Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:iot:senzor-htu21d [2023/09/28 15:43] – Petr Nosek | it:iot:senzor-htu21d [2024/10/26 21:33] (aktuální) – [Parametry senzoru] Petr Nosek | ||
|---|---|---|---|
| Řádek 5: | Řádek 5: | ||
| * komunikuje skrze I2C | * komunikuje skrze I2C | ||
| * senzor teploty a vlhkosti | * senzor teploty a vlhkosti | ||
| - | * má integrované 4,7k pull up rezistory, takže není třeba přidávat rezistory k pinům na Raspberry PI | + | * destička |
| * Tento I2C digitální vlhkoměr má perfektní přesnost ± 2 % při rozsahu 5 % až 95 % RH | * Tento I2C digitální vlhkoměr má perfektní přesnost ± 2 % při rozsahu 5 % až 95 % RH | ||
| * Teplotu tento modul měří s přesností ± 1 ° C v širokém rozsahu od -30 ~ 90 °C. | * Teplotu tento modul měří s přesností ± 1 ° C v širokém rozsahu od -30 ~ 90 °C. | ||
| Řádek 13: | Řádek 13: | ||
| Přidávám odkaz na [[https:// | Přidávám odkaz na [[https:// | ||
| + | |||
| Řádek 26: | Řádek 27: | ||
| -SCL = A5 (use inline 10k resistor if your board is 5V)</ | -SCL = A5 (use inline 10k resistor if your board is 5V)</ | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ==== Zapojení senzoru ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | zdroj: https:// | ||
| + | |||
| + | |||
| + | ==== Aktivace I2C na Raspberry PI ==== | ||
| + | |||
| + | Nejprve aktivovat směrnici I2C. | ||
| + | <code bash> | ||
| + | raspi-config | ||
| + | </ | ||
| + | |||
| + | Dále nainstalovat i2ctools: | ||
| + | <code bash> | ||
| + | apt install i2ctools | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code bash> | ||
| + | root@rpi:# i2cdetect -l | ||
| + | i2c-1 | ||
| + | i2c-2 | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | root@rpi# i2cdetect -y 1 | ||
| + | | ||
| + | 00: -- -- -- -- -- -- -- -- | ||
| + | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | </ | ||
| + | |||
| + | |||
| + | Krok za krokem je to rozepsáno zde: https:// | ||
| + | |||
| + | |||
| + | ==== Program v C ==== | ||
| + | |||
| + | Jednou z variant je postupovat [[https:// | ||
| + | |||
| + | Poté jsem našel [[https:// | ||
| + | |||
| + | <code bash> | ||
| + | git clone https:// | ||
| + | cd allsky/ | ||
| + | make | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Instalace Micropython na Raspberry Pi 1 ==== | ||
| + | |||
| + | Kvůli tomu, že budu kód přenášet i na zařízení s Micropythonem, | ||
| + | |||
| + | <code bash> | ||
| + | apt-get install build-essential libreadline-dev libffi-dev git | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | git clone https:// | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | cd micropython/ | ||
| + | make | ||
| + | cd ../ | ||
| + | make submodules | ||
| + | make | ||
| + | ./ | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | Tak jsem sice nainstaloval Micropython, | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | [' | ||
| + | </ | ||
| + | |||
| + | Tudy tedy cesta nepovede a Micropython bude dávat opravdu smysl pro použití pouze na Espressobin a podobné mikropočítače: | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ==== Instalace knihoven pro Python (Circuitpython) na Raspberry Pi ==== | ||
| + | |||
| + | Narazil jsem na [[https:// | ||
| + | |||
| + | Na [[https:// | ||
| + | |||
| + | Nicméně když jsem četl dál, tak jsem se dočetl, že by mělo jít nainstalovat Adafruit_Blinka knihovna, která poskytuje CircuitPython podporu do Pythonu. Což by znamenalo, že bych mohl nainstalovat knihovny na Raspberry Pi a jednoduše používat senzor. Tak jsem to vyzkoušel. | ||
| + | |||
| + | |||
| + | <code bash> | ||
| + | apt install python3-pip | ||
| + | apt install python3-dev python3-setuptools python3-venv | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | pip3 install adafruit-circuitpython-htu21d | ||
| + | </ | ||
| + | |||
| + | A opravdu, pak stačilo spustit jednoduchý kód a senzor funguje: | ||
| + | <code python> | ||
| + | # SPDX-FileCopyrightText: | ||
| + | # SPDX-License-Identifier: | ||
| + | |||
| + | import time | ||
| + | import board | ||
| + | from adafruit_htu21d import HTU21D | ||
| + | |||
| + | # Create sensor object, communicating over the board' | ||
| + | i2c = board.I2C() | ||
| + | # i2c = board.STEMMA_I2C() | ||
| + | sensor = HTU21D(i2c) | ||
| + | |||
| + | |||
| + | while True: | ||
| + | print(" | ||
| + | print(" | ||
| + | time.sleep(2) | ||
| + | </ | ||
| + | |||
| + | |||
| + | A tady je ještě repozitář od Adafruit - knihovna, kterou jsem instaloval pomocí pip3 - https:// | ||
| + | |||
| + | |||
| + | === Posílání dat přes MQTT === | ||
| + | |||
| + | <code bash> | ||
| + | pip3 install paho-mqtt | ||
| + | </ | ||
| + | |||
| + | Musím počítat s tím, že mám self signed certifikát a tak musím přidat k TLS tuto část kódu: **cert_reqs=ssl.CERT_NONE** | ||
| + | <code python> | ||
| + | import time | ||
| + | import board | ||
| + | import ssl | ||
| + | from adafruit_htu21d import HTU21D | ||
| + | |||
| + | # Create sensor object, communicating over the board' | ||
| + | i2c = board.I2C() | ||
| + | # i2c = board.STEMMA_I2C() | ||
| + | sensor = HTU21D(i2c) | ||
| + | |||
| + | import json | ||
| + | import paho.mqtt.client as mqtt | ||
| + | |||
| + | CLIENT_NAME = " | ||
| + | BROKER_ADDR = ' | ||
| + | USER = ' | ||
| + | PASSWORD | ||
| + | MQTT_TOPIC | ||
| + | |||
| + | |||
| + | CA_CERT = " | ||
| + | CLIENT_CERT = " | ||
| + | CLIENT_KEY = " | ||
| + | |||
| + | def on_connect(client, | ||
| + | if rc == 0: | ||
| + | print(" | ||
| + | else: | ||
| + | print(f" | ||
| + | |||
| + | |||
| + | |||
| + | def connect_and_subscribe(): | ||
| + | client = mqtt.Client(CLIENT_NAME) | ||
| + | client.on_connect = on_connect | ||
| + | client.username_pw_set(USER, | ||
| + | | ||
| + | # Setting TLS with the provided certificates and key | ||
| + | | ||
| + | client.tls_set(ca_certs=CA_CERT, | ||
| + | client.connect(BROKER_ADDR, | ||
| + | return client | ||
| + | |||
| + | |||
| + | def is_connected(client): | ||
| + | try: | ||
| + | client.publish(" | ||
| + | return True | ||
| + | except: | ||
| + | return False | ||
| + | |||
| + | client = connect_and_subscribe() | ||
| + | |||
| + | while True: | ||
| + | temperature = round(sensor.temperature, | ||
| + | humidity = round(sensor.relative_humidity, | ||
| + | data = { | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | | ||
| + | print(f" | ||
| + | print(f" | ||
| + | |||
| + | if not is_connected(client): | ||
| + | client = connect_and_subscribe() | ||
| + | |||
| + | try: | ||
| + | client.publish(MQTT_TOPIC, | ||
| + | except: | ||
| + | print(" | ||
| + | client = connect_and_subscribe() | ||
| + | |||
| + | time.sleep(5) | ||
| + | </ | ||