Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:iot:senzor-htu21d [2023/09/28 18:31] – [Program v C] Petr Nosekit: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 má integrované 4,7k pull up rezistory, takže není třeba přidávat rezistory k pinům na Raspberry PI
   * 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 107: Řádek 107:
 </code> </code>
  
 +Tak jsem sice nainstaloval Micropython, nicméně ukazuje se, že Micropython pro platformu UNIX nemá hardwarovou podporu, jako je I2C. 
  
 +<code python>
 +>>> import machine
 +>>> dir(machine)
 +['__class__', '__name__', '__dict__', 'PinBase', 'Signal', 'idle', 'mem16', 'mem32', 'mem8', 'time_pulse_us'                                                                                                    
 +</code>
  
 +Tudy tedy cesta nepovede a Micropython bude dávat opravdu smysl pro použití pouze na Espressobin a podobné mikropočítače:
 +
 +  * https://learn.adafruit.com/micropython-hardware-i2c-devices/i2c-main
 +  * https://github.com/Kleity/HTU21D-Micropython-ESP32
 +  * https://github.com/flrrth/pico-htu21d/tree/main
 +  * https://docs.micropython.org/en/latest/develop/gettingstarted.html#source-control-with-git
 +  * https://learn.sparkfun.com/tutorials/htu21d-humidity-sensor-hookup-guide
 +
 +
 +==== Instalace knihoven pro Python (Circuitpython) na Raspberry Pi ====
 +
 +Narazil jsem na [[https://learn.adafruit.com/adafruit-htu21d-f-temperature-humidity-sensor/python-circuitpython|tento článek o Circuitpython]] a mém senzoru. Když jsem zkoumal rozdíly mezi MicroPython a CircuitPython, tak jsem se dopátral, že MicroPython je odnoží MicroPythonu, který byl vytvořen firmou Adafruit s cílem vytvořit verzi Pythonu speciálně pro jejich řadu desek a s důrazem na výuku a snadnou obsluhu.
 +
 +Na [[https://circuitpython.org/downloads|oficiální stránkách Circuitpython]] jsem našel podporu pro různé desky, ale schází mi tam Raspberry pi 1 až 3 a Espruino8266. 
 +
 +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>
 +
 +<code bash>
 +pip3 install adafruit-circuitpython-htu21d
 +</code>
 +
 +A opravdu, pak stačilo spustit jednoduchý kód a senzor funguje:
 +<code python>
 +# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
 +# SPDX-License-Identifier: MIT
 +
 +import time
 +import board
 +from adafruit_htu21d import HTU21D
 +
 +# Create sensor object, communicating over the board's default I2C bus
 +i2c = board.I2C()  # uses board.SCL and board.SDA
 +# i2c = board.STEMMA_I2C()  # For using the built-in STEMMA QT connector on a microcontroller
 +sensor = HTU21D(i2c)
 +
 +
 +while True:
 +    print("\nTemperature: %0.1f C" % sensor.temperature)
 +    print("Humidity: %0.1f %%" % sensor.relative_humidity)
 +    time.sleep(2)
 +</code>
 +
 +
 +A tady je ještě repozitář od Adafruit - knihovna, kterou jsem instaloval pomocí pip3 - https://github.com/adafruit/Adafruit_CircuitPython_HTU21D/tree/main.
 +
 +
 +=== Posílání dat přes MQTT ===
 +
 +<code bash>
 +pip3 install paho-mqtt
 +</code>
 +
 +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's default I2C bus
 +i2c = board.I2C()  # uses board.SCL and board.SDA
 +# i2c = board.STEMMA_I2C()  # For using the built-in STEMMA QT connector on a microcontroller
 +sensor = HTU21D(i2c)
 +
 +import json
 +import paho.mqtt.client as mqtt
 +
 +CLIENT_NAME = "rpi_htu21d"
 +BROKER_ADDR = '192.168.1.120'
 +USER        = 'uzivatel'
 +PASSWORD    = 'supertajneheslo'
 +MQTT_TOPIC  = 'hajany/sensor/htu21d'
 +
 +
 +CA_CERT = "ca.crt"
 +CLIENT_CERT = "client.crt"
 +CLIENT_KEY = "client.key"
 +
 +def on_connect(client, userdata, flags, rc):
 +    if rc == 0:
 +        print("Connected to MQTT broker!")
 +    else:
 +        print(f"Failed to connect, return code {rc}")
 +
 +
 +
 +def connect_and_subscribe():
 + client = mqtt.Client(CLIENT_NAME)
 + client.on_connect = on_connect
 + client.username_pw_set(USER, PASSWORD)
 +    
 +    # Setting TLS with the provided certificates and key
 +    
 + client.tls_set(ca_certs=CA_CERT, certfile=CLIENT_CERT, keyfile=CLIENT_KEY, cert_reqs=ssl.CERT_NONE, tls_version=mqtt.ssl.PROTOCOL_TLSv1_2)
 + client.connect(BROKER_ADDR, 8883, 60)  # Note: Using port 8883 for MQTT over SSL
 + return client
 +
 +
 +def is_connected(client):
 +    try:
 +        client.publish("connection_test", "test", qos=1)
 +        return True
 +    except:
 +        return False
 +
 +client = connect_and_subscribe()
 +
 +while True:
 + temperature = round(sensor.temperature,2)
 + humidity = round(sensor.relative_humidity,2)
 + data = {
 + 'temperature': temperature,
 + 'humidity': humidity
 + }
 +    
 + print(f"\nTemperature: {temperature:.1f} C")
 + print(f"Humidity: {humidity:.1f} %")
 +
 + if not is_connected(client):
 + client = connect_and_subscribe()
 +
 + try:
 + client.publish(MQTT_TOPIC, json.dumps(data))
 + except:
 + print("Failed to send data. Reconnecting...")
 + client = connect_and_subscribe()
 +
 + time.sleep(5)
 +</code>
  
  • it/iot/senzor-htu21d.1695925911.txt.gz
  • Poslední úprava: 2023/09/28 18:31
  • autor: Petr Nosek