SONOFF Si7021 Support zu Micropython hinzuf├╝gen

2022-07-23

Der SONOFF Si7021 Temperatur- und Feuchtigkeitssensor l├Ąsst sich f├╝r einen guten Preis in einem ordentlichen Geh├Ąuse kaufen. Anstelle aber den Sensor, welcher sich ├╝ber i2c anpsrechen l├Ąsst, direkt herauszuf├╝hren hat SONOFF einen Mikrocontroller vorgeschaltet der das Protokoll des DHT22 (bis auf einen winzigen Unterschied) spricht.

Im Micropython Forum findet sich eine Änderung (https://forum.micropython.org/viewtopic.php?t=9473#p53605) die den Sensor bei mir zum Laufen gebracht hat. Dafür muss allerdings Micropython angepasst und neu übersetzt werden.

Es muss lediglich der Startimpuls im dht Treiber von ca. 20ms auf ca. 500us verk├╝rzt werden.

diff --git a/drivers/dht/dht.c b/drivers/dht/dht.c
index 81754ac15..d01a4d75f 100644
--- a/drivers/dht/dht.c
+++ b/drivers/dht/dht.c
@@ -52,7 +52,7 @@ STATIC mp_obj_t dht_readinto(mp_obj_t pin_in, mp_obj_t buf_in) {
     mp_hal_pin_od_high_dht(pin);
     mp_hal_delay_ms(250);
     mp_hal_pin_od_low(pin);
-    mp_hal_delay_ms(18);
+    mp_hal_delay_us_fast(493);

     mp_uint_t irq_state = mp_hal_quiet_timing_enter();

Anschlie├čend kann Micropython neu ├╝bersetzt werden und der Sensor ist als DHT22 nutzbar.

from dht import DHT22
from machine import Pin

data = 28
sensor = DHT22(machine.Pin(data))
sensor.measure()

Beispiel f├╝r den Pi Pico W:

cd ports/rp2/
make BOARD=PICO_W

Es ist zu beachten das nach der Änderung natürlich keine echten DHT11 und DHT22 mehr nutzbar sind.

Die Beschaltung des 2.5mm Klinkensteckers (ja 2.5mm ist korrekt) ist wie folgt

Pinout

Update

Ich konnte meinen Sensor nur ohne Pull-Up an Data auslesen.

rpipinoutpythonsensors

SSH Hop

Wifi Self Healing