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