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
Update
Ich konnte meinen Sensor nur ohne Pull-Up an Data
auslesen.