I’m trying to use an RPi Pico W as a temp/humidity sensor using a DHT20.

It kind of works - at least sometimes, but I keep “losing” sensors more or less randomly.

I connected everything up like here (using MicroPython): https://github.com/flrrth/pico-dht20 There are currently 4 sensor-boards, 3 soldered, one on a breadboard.

The error modes I could observe are:

  1. DHT20 fails to init - sometimes after the first read, sometimes after days. Resetting the machine works sometimes, if not, power cycling usually does the trick

  2. The board just “stops” after about 5min - the serial console just says “device disconnected”. Power cycling is the only option.

My measurement work by having a timer fire every minute, connect to wifi, read from the sensor, and then send an mqtt message (either the values or an error message) and shutdown wifi again.

My current ideas why it could fail (but I’m not an electronics guy at all):

  • There is some kind of “rogue current” messing with some IC.
  • Some component is broken
  • Maybe the power draw is too low or issuing sleep() messes with the USB-power connection somehow?

For me the problem is, I don’t really know where to look for errors. The software works in principle, the soldering seems to be good enough to sometimes work for days, and looking too deep into the whole electronics side is beyond my capabilities.

  • I had something similar happen in one of my ESP8266 projects (also running MicroPython). What I wound up doing was, every five wall clock minutes (maybe a bit sooner than that, for your case) I had my firmware do a local_networks = wifi.scan() just to exercise the wifi functionality. If that failed I have the code do gc.collect() followed by sys.exit(1), which causes the 8266 to reboot automatically.

    Give that a try.

      • No, I don’t. My best informed guess is that the wifi connection’s state machine gets stuck once in a while, it misses a couple of packets, and then sits there doing nothing. So, by kicking it a little it doesn’t get a chance to freeze up.

        • I “kind of” solved at least parts of the problem by simply not turning wifi off. It’s more stable than before, but not stable as such.

          Edit: I played around a bit and I think the problem is somewhere in the power supply. My workbench PC can drive the board just fine for hours, just plug it into the USB port, connect serial monitor and let it do its thing. However, if I’m plugging it into my router or a usb power supply, it stops working after a while again.

          My theory is, that the PSU/router thinks the device is dead, because it draws too little power? That would explain, why not shutting down wifi improves the stability - it draws more power.

          Now, that is just my naive theory, I’m not entirely sure, how to validate it. Maybe I’ll just add a useless busy-loop to increase power draw or add some power consuming components.