[PYTHON] Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi

Was du machen willst

Notieren Sie Raumtemperatur und Luftfeuchtigkeit, wenn Raspi4 startet

Dinge notwendig

H/W

Das verwendete H / W ist wie folgt

  1. Raspberry Pi 4
  2. HDC1000

S/W

  1. Python 3.6.1 | packaged by rpi | (default, Apr 20 2017, 19:35:19)
  2. Linux raspi4 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux

verschiedene Einstellungen

HDC1000-Verbindung

スクリーンショット 2020-04-10 13.11.17.png

Ich konnte die Teile für Raspberry 4 nicht finden.

HDC1000-Einstellungen

/boot/config.txt

i2c-bezogene Einstellungen

dtparam=i2c_arm=on

/etc/modules

Modulbezogene Einstellungen

i2c-dev
i2c-bcm2835

Überprüfen Sie die HDC1000-Einstellungen

sh


$ lsmod | grep i2c
i2c_bcm2835            16384  0
i2c_dev                20480  0

sh


$ dmesg | grep i2c
[    2.153160] i2c /dev entries driver

sh


$ i2cdetect -l
i2c-1	i2c       	bcm2835 I2C adapter             	I2C adapter

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Funktionsprüfung

Dies ist ein Beispielprogramm.

python


# -*- coding: utf-8 -*-
import smbus
import time

# Get I2C bus
bus = smbus.SMBus(1)

# HDC1000 address, 0x40(64)
# Select configuration register, 0x02(02)
#        0x30(48)    Temperature, Humidity enabled, Resolultion = 14-bits, Heater on
bus.write_byte_data(0x40, 0x02, 0x30)

# HDC1000 address, 0x40(64)
# Send temp measurement command, 0x00(00)
bus.write_byte(0x40, 0x00)

time.sleep(0.2)

# HDC1000 address, 0x40(64)
# Read data back, 2 bytes
# temp MSB, temp LSB
data0 = bus.read_byte(0x40)
data1 = bus.read_byte(0x40)

# Convert the data
temp = (data0 * 256.000) + data1
cTemp = (temp / 65536.000) * 165.000 - 40.000

# HDC1000 address, 0x40(64)
# Send humidity measurement command, 0x01(01)
bus.write_byte(0x40, 0x01)
time.sleep(0.2)

# HDC1000 address, 0x40(64)
# Read data back, 2 bytes
# humidity MSB, humidity LSB
data0 = bus.read_byte(0x40)
data1 = bus.read_byte(0x40)


# Convert the data
humidity = (data0 * 256.000) + data1
humidity = (humidity / 65536.000) * 100.000

print('Humid.:' + str(humidity) + '%')
print('Temp. :' + str(cTemp) + '℃ ')

Bei der Ausführung ist dies wie folgt.


$ python HDC1000.py
Humid.:41.96014404296875%
Temp. :22.763748168945312℃

Aufnahmeprogramm

Das Aufnahmeprogramm sieht so aus.

python


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import time
import datetime
import csv
import pathlib
import os

file_name = 'th_data.csv'
header_data = 'date_time,temperature\n'

def read_temp():
        # Get I2C bus
        bus = smbus.SMBus(1)
        # HDC1000 address, 0x40(64)
        # Select configuration register, 0x02(02)
        #        0x30(48)    Temperature, Humidity enabled, Resolultion = 14-bits, Heater on
        bus.write_byte_data(0x40, 0x02, 0x30)

        # HDC1000 address, 0x40(64)
        # Send temp measurement command, 0x00(00)
        bus.write_byte(0x40, 0x00)
        time.sleep(0.2)

        # HDC1000 address, 0x40(64)
        # Read data back, 2 bytes
        # temp MSB, temp LSB
        data0 = bus.read_byte(0x40)
        data1 = bus.read_byte(0x40)

        # Convert the data
        temp = (data0 * 256.000) + data1
        cTemp = (temp / 65536.000) * 165.000 - 40.000
        return cTemp

def read_humid():
        # Get I2C bus
        bus = smbus.SMBus(1)
        # HDC1000 address, 0x40(64)
        # Select configuration register, 0x02(02)
        #        0x30(48)    Temperature, Humidity enabled, Resolultion = 14-bits, Heater on
        bus.write_byte_data(0x40, 0x02, 0x30)

        # HDC1000 address, 0x40(64)
        # Send humidity measurement command, 0x01(01)
        bus.write_byte(0x40, 0x01)
        time.sleep(0.2)

        # HDC1000 address, 0x40(64)
        # Read data back, 2 bytes
        # humidity MSB, humidity LSB
        data0 = bus.read_byte(0x40)
        data1 = bus.read_byte(0x40)

        # Convert the data
        humidity = (data0 * 256.000) + data1
        humidity = (humidity / 65536.000) * 100.000
        return humidity


def file_check():
        global file_name
        file_name = pathlib.Path(file_name)
        if os.path.exists(file_name):
                print('Data File exists!')
        else:
                file_name.touch()
def header():
        global file_name
        with open(file_name) as f:
                line = f.readline()
        if 'date' in line:
                print('Header exists!')
        else:
                with open(file_name) as f:
                        lines = f.readlines()
                        lines.insert(0, header_data)
                        f.close()
                with open(file_name, mode='w') as f:
                        f.writelines(lines)

def main():
        global file_name
        file_check()
        header()
        while True:
                now = datetime.datetime.now()
                temp = read_temp()
                humid = read_humid()
#               print(now.strftime('%Y%m%d-%H:%M:%S'), '{:.3f}'.format(temp), '{:.3f}'.format(humid))
                save_data = [now.strftime('%Y%m%d-%H:%M:%S'), '{:.3f}'.format(temp), '{:.3f}'.format(humid)]
                with open(file_name,'a',newline='') as f:
                        writer = csv.writer(f, lineterminator='\r\n')
                        writer.writerow(save_data)
                time.sleep(10)

if __name__ == '__main__':
        main()

Systemeinstellungen und Einstellungen für den Autostart

/etc/systemd/system/thlogger.service

Ich habe den Dienstnamen thlogger gewählt.

[Unit]
Description=TH_Logger
After=syslog.target

[Service]
User = pi
PIDFile=/var/run/thlogger.pid
WorkingDirectory=/home/pi/Jupyter/data
ExecStart=/home/pi/berryconda3/bin/python /home/pi/works/HDC1000/TH_logger.py
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

RestartSec=10s
[Install]
WantedBy = multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl start thlogger

Überprüfen Sie das Startprotokoll (/ var / log / system).

$ sudo systemctl status thlogger.service -l
● thlogger.service - TH_Logger
   Loaded: loaded (/etc/systemd/system/thlogger.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-10 13:09:16 JST; 18min ago
 Main PID: 352 (python)
    Tasks: 1 (limit: 4915)
   Memory: 9.1M
   CGroup: /system.slice/thlogger.service
           └─352 /home/pi/berryconda3/bin/python /home/pi/works/HDC1000/TH_logger.py

10. April 13:09:16 raspi4 systemd[1]: Started TH_Logger.

Wenn es kein Problem gibt, führen Sie es beim Start aus.

$ sudo systemctl enable thlogger

Recommended Posts

Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Himbeere + am2302 Temperatur und Luftfeuchtigkeit mit Temperatur- und Feuchtigkeitssensor messen
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
MQTT auf Raspberry Pi und Mac
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
Haustierüberwachung mit Rekognition und Raspberry pi
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Arbeiten mit GPS in Python für Raspberry Pi 3
Messen Sie Temperatur, Luftfeuchtigkeit usw. mit SensorTag und senden Sie es über Raspberry Pi 3 an Ambient, um es Teil 2 grafisch darzustellen
Verwenden Sie den Temperatur- / Feuchtigkeits- / Drucksensor BME280 von Python mit Raspberry Pi 2
[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
MQTT Radicon Car mit Arduino und Himbeere
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Grove - Temperatur- und Feuchtigkeitssensor (DHT11) mit Raspberry Pi
Zeigen Sie die CPU-Temperatur alle 5 Sekunden auf dem Raspberry Pi 4 an
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Messen Sie die CPU-Temperatur von Raspeye mit Python
GPGPU mit Raspberry Pi
Pigpio auf Himbeer-Pi
DigitalSignage mit Raspberry Pi
Cython auf Raspberry Pi
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Führen Sie die LED-Matrix interaktiv mit Raspberry Pi 3B + auf Slackbot aus
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Messen Sie die Temperatur und Luftfeuchtigkeit im Innen- und Außenbereich und zeigen Sie sie auf dem Armaturenbrett an
Installation von Docker auf Raspberry Pi und L Chika
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Simulieren Sie die Temperaturmessung mit Raspberry Pi + Flask + SQLite + Ajax
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing
Mutter pflanzt mit Raspberry Pi
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi