Zufällig hatte ich bei einem chinesischen Versandhändler meines Vertrauens ein interessantes Board namens WEMOS R1 D32 gefunden, das auch noch erstaunlich preiswert angeboten wurde (um die 3,- €), weswegen ich mir gleich 3 Exemplare davon bestellt habe.
Das ist das Interessante an diesem Board:
- Arduino-UNO-Formfaktor, d.h. man kann Shields im UNO-Formfaktor aufstecken
- Statt eines mickrigen ATMEGA328 ein CPU-Modul vom Typ ESP-WROOM-32 mit 4MB Flash-Speicher und 2.4 GHz WiFi
- On-Board USB<->RS232-Konverter mit CH340C und über RS232 gesteuerte RESET- und IO0-Leitungen
- On-Board Schaltregler für Betrieb des Moduls über ein Netzteil >5V
Mit anderen Worten: Genau das Richtige, um ein UNO-Sensor-Shield in ein IOT-Device zu verwandeln, oder?
Ok, der ATMEGA328 auf dem Arduino-UNO läuft mit 5V und die IO-Pegel auf dem UNO sind ebenfalls 0V/5V.
Das CPU-Board auf dem WEMOS D1 R32 läuft mit Vdd=3.3V (genauer gesagt läuft es zwischen 3.0V und 3.6V, was später noch eine Rolle spielen wird) und verträgt keine höheren Eingangsspannungen als Vdd+0.3V. Es gibt aber genügend Sensor-Shields, die problemlos mit 3.3V laufen oder sich auf 3.3V umbauen lassen.
ESP32 und TASMOTA
Für den ESP32 gibt es eine experimentelle Version von TASMOTA, die man sich sehr einfach zusammenkompilieren kann.
Man muss lediglich das Repository des wunderbaren TASMOTA-Projekts von Theo Arends klonen. Wenn man PlatformIO schon installiert hat, so wie es bei mir der Fall war, dann braucht man nur noch in der Datei platformio_tasmota32.ini den Strichpunkt in der Zeile
; tasmota32-sensors
entfernen, dann in platformio.ini einen Strichpunkt hinzufügen, so dass kein anderes Target mehr gebaut wird und dann muss man noch weiter unten den COM-Port und die Baud-Rate richtig eintragen:
monitor_speed = 115200
monitor_port = COMxx
upload_speed = 115200
.
.
upload_port = COMxx
und schon geht es los mit dem Kompilieren und Programm-Upload auf das Board.
Das Board stellt nach dem Reset zunächst einen Access-Point mit Webserver dar, den man aufruft und wo man dann die SSID und das Passwort des eigenen WLANs einträgt, in das sich das Board beim nächsten Start einloggt.
So weit so gut; es war eigentlich alles so wie ich es schon in meinem Blog-Eintrag mit dem ESP8266 beschrieben hatte. Auch hier habe ich den MH-Z19B angeschlossen, weil ich einen CO2-IOT-Sensor bauen wollte.
Als Nächstes ging ich daran, mir ein 12V-Netzteil zu suchen, um den CO2-Sensor mit Strom zu versorgen. Ich steckte also das 12V-Netzteil ein und legte meinen CO2-IOT-Sensor in das Zimmer, in dem ich die CO2-Konzentration messen wollte.
Leider war der Sensor unter seiner IP-Adresse aber jetzt nicht mehr zu finden. Und als ich nachschauen ging, fiel mir auf, dass die blaue Leuchtdiode auf dem WEMOS-D1-R32 deutlich dunkler leuchtete als vorher am USB-Anschluss. Und als ich das Board in die Hand nahm, verbrannte ich mir fast die Finger am Abschirmblech des CPU-Moduls, so heiß war es geworden!
WTF!!!
Hätte ich das Netzteil vielleicht doch vorher prüfen sollen? Ist dessen Ausgangsspannung zu hoch?
Durch Nachmessen stellte ich fest, dass die Ausgangsspannung ungeregelte 12 V waren, d.h. im Leerlauf fast 16 V! Hat das meinen WEMOS-D1-R32 gekillt?
Eine kurze Suche ergab, dass der Schaltregler wohl ein MP1482DS ist (ok, einen wirklich offiziellen Schaltplan des Herstellers habe ich nicht gefunden, aber auf allen Schaltplanversionen, die ich gefunden habe, stand genau dieser Typ drauf), der laut Datenblatt des Herstellers MPS bis 18 V Eingangsspannung gemacht ist und sogar 20 V maximal verträgt.
Das kann es also nicht gewesen sein; oder vielleicht doch? Merkwürdigerweise kann man nämlich auf dem SO8-Gehäuse keinerlei Aufdruck erkennen:
Könnte das also ein anderer Baustein sein, der zwar so ähnlich wie der MP1482DS ist, aber eine geringere maximale Eingangsspannung verträgt?
Als Nächstes versuchte ich, in der Hoffnung, dass doch nicht alles kaputt gegangen sei, das Board wieder mit 5 V über die USB-Buchse zu betreiben. Leider stellte ich aber fest, dass die Stromaufnahme mehr als 0.6 Ampere war und das CPU-Board nach wie vor glühend heiß wird.
Oh jeh. Dann hab ich nachgemessen, wie hoch Vdd ist. Es sollten ja 3.3V sein.
4.98 Volt. Au weia.
Der AMS1117_3.3 ist also auch noch kaputt gegangen und zeigt einen Schluss zwischen Eingang und Ausgang.
Zu allem Überfluss stellte ich fest, dass auch mein CO-Sensor kaputt gegangen ist. Wahrscheinlich hat der Schaltregler kurzzeitig eine so hohe Spannung geliefert, dass auch der MH-Z19B kaputt gegangen ist dabei.
Schöne Bescherung:
Am Schluss habe ich noch das CPU-Board ausgelötet (wie man das mit Hausmitteln hinkriegt, erkläre ich ein anderes Mal), damit ich mal bei Gelegenheit und wenn ich Lust habe, ein neues einlöten kann.
Der Schaden schaut also so aus:
Ein kaputtes WEMOS-D1-R23 und ein kaputter MH-Z19B, insgesamt im Wert von etwa 20 Euro.
Ärgerlich.
Vorsichtig geworden, habe ich meine beiden übrigen WEMOS-D1-R32 unter die Lupe genommen und deren Hohlstecker mit einem Labornetzteil bestromt, und zwar vorsichtig steigernd mit Spannungen von 5V bis 12V.
Bei den beiden übrigen Exemplaren des WEMSO-D1-R32 stellte ich aber auch fest, dass die Schaltregler einfach nicht das machen, was sie tun sollten:
Die Ausgangsspannung des Schaltreglers auf meinem zweiten WEMOS-D1-R32, die eigentlich 5V sein sollte, war hier nur etwa 3.8 Volt:
Nach dem AMS1117_3.3 blieben davon nur 2,856 Volt für Vdd übrig und nicht 3.3 V, wie es sein sollte.
Bei meinem dritten Exemplar war es ähnlich: 3,74 Volt statt 5 V und Vdd = 2,78 Volt statt 3,3 V.
Fazit 1:
Die Schaltregler auf den von mir gekauften Boards funktionieren nicht.
Wenn man das WEMOS-D1-R32 also unbedingt verwenden will, dann vorher unbedingt den eingebauten Schaltregler prüfen oder nur mit 5V über USB versorgen!
Wie sieht es bei Versorgung über USB aus?
Da ist alles in Ordnung:
WEMOS-D1-R32 und I²C
Als Nächstes habe ich probiert, einen SCD30 von Sensirion anzuschließen, der ebenfalls von TASMOTA unterstützt wird und über die I²C-Schnittstelle angeschlossen wird.
Leider hat das zuerst überhaupt nicht funktioniert!
Ein i2cscan-Befehl, über die Konsole von TASMOTA eingegeben, sagte mir, dass kein I²C-Baustein gefunden wurde.
Des Rätsels Lösung: Auf dem WEMOS-D1-R32 ist die SCL-Leitung mit IO23 des CPU-Moduls verbunden, anstelle mit IO22
Richtig wäre IO22 gewesen, das aber mit keinem zugänglichen Pin verbunden ist!
Mir blieb also nichts anderes übrig, als ein feines Drähtchen direkt ans CPU-Modul anzulöten (bei der Gelegenheit habe ich das auch mit einem zweiten Drähtchen mit SDA/IO21 gemacht) und von dort aus zum I²C-Teilnehmer zu verbinden:
Und siehe da, jetzt klappt’s auch mit dem Erkennen und Anzeigen des Sensors:
Abschließendes Fazit:
Das WEMOS-D1-R32 ist ein gut gemeintes, aber nicht gut gemachtes Board. Es wäre wirklich schön, ein Arduino-UNO-kompatibles Board zu haben, das WiFi kann.
So wie diese Idee umgesetzt wurde, ist sie aber leider wenig brauchbar. Man kann zwar die Fehler mit einem gewissen Aufwand umgehen, aber das kann ja nicht der Sinn der Sache sein!?