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:24] – 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 11: | Řádek 11: | ||
Konkrétně jsem koupil [[https:// | Konkrétně jsem koupil [[https:// | ||
+ | |||
+ | Přidávám odkaz na [[https:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== Instalace na Raspberry Pi ===== | ||
+ | |||
+ | Rozhodl jsem se senzor vyzkoušet na Raspberry Pi. Použil jsem 3,3 V logiku. [[https:// | ||
+ | |||
+ | <adm warning> | ||
+ | |||
+ | <adm warning> | ||
+ | < | ||
+ | -SDA = A4 (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) | ||
+ | </ | ||
+ |