NodeMCU + WS2812B
11. Januar 2021
Von Espressif gibt es den Mikrocontroller ESP8226, der sich durch seinen günstigen Preis und WLAN auszeichnet. Den ESP8226 findet man unter anderem auf dem Board NodeMCU, das es für 3 bis 5€ gibt. Eine passendee Firmware lässt sich entweder selbst schreiben, z.B. in der Arduino-IDE, oder man spielt eine fertige auf. Für meinen Anwendungszweck, das Steuern eines WS2812B-LED-Streifens, bietet sich das Projekt WLED an. Damit wollte ich die prinzipielle Funktion überprüfen und da es zum Projekt eine App gibt, macht es das recht einfach.
Aufbau
Zusammengesteckt ist der Aufbau relativ schnell. Auf dem NodeMCU befindet sich ein Spannungswandler, der aus 5V die für den Controller verträglichen 3,3V generiert. Der Wandler ist weiterhin stark genug, um den LED-Streifen für einen kurzen Test mitzuversorgen.
NodeMCU
_________
|A0 D0|
|RSV D1|
|RSV D2| WS2812B WS2812B
|SD3 D3| ________ ________
|SD2 D4|-------------------|Din Dout|----------|Din Dout|---
|SD1 3V3|-------------------|Vcc |----------|Vcc |---
|CMD GND|-------------------|GND |----------|GND |---
|SDO D5| |________| |________|
|CLK D6|
|GND D7|
|3V3 D8|
|EN DX|
|RST TX|
----|GND GND|----
----|Vin 3V3|----
|___USB___|
|
|
|
Als Spannungsversorgung bieten sich 3 Optionen an.
- 5V über USB
- 5V über Vin
- 3,3V über 3V3
Netzteile mit 5V liegen i.d.R. daheim herum, daher sind die ersten beiden Optionen am naheliegensten. Im Netz finden sich ähnliche Anleitungen, die zum einen einen Widerstand (330..470 Ohm) für die Datenleitung (zwischen D4 und dem LED-Streifen) und zum anderen den LED-Streifen - wie vorgesehen - an 5V betreiben.
Der Widerstand ist nicht unsinnig, aber um eine Baugruppe vor hochfrequente Störeinstrahlung zu schützen, nimmt man normalerweise eine TVS-Diode. Denn der Widerstand behindert die HF nur ein bisschen, während die TVS-Diode für die zu hohe, eingekoppelte Spannung einen Kurzschluss darstellt. Am Mikrocontroller-Pin liegt im Idealfall keine Spannung außerhalb der Spezifikation an. Ähnlich kann auch eine Kapazität wirken, jedoch wirkt diese frequenzabhängig während eine TVS-Diode in Abhängigkeit der Spannung auslöst.
Der Betrieb an 3,3V ist zum Test tolerierbar, für eine dauerhafte Anwendung nicht. Denn im Datenblatt
Parameter Symbol Ratings Unit Power supply voltage VDD +3.5~+5.3 V Input voltage VI -0.5~VDD+0.5 V
werden mindestens 3,5V gefordert. Die 3,3V liegen somit außerhalb der Spezifikation und ein Regelbetrieb ist nicht garantiert.
Firmware
Unter Linux steckt man die Baugruppe einfach an, daraufhin meldet sie sich am System als ttyUSB*
an und dann muss nur noch die fertige Firmware übertragen werden.
Programmieren lässt sich das Board mit esptool.py
und nachfolgendem Aufruf.
$ esptool.py -p /dev/ttyUSB0 write_flash -fm dout 0x0000 WLED_0.11.1_ESP8266.bin
Den Befehl musste ich 2x ausführen, aber danach tauchte ein neues WLAN-Netz auf und ich konnte mich mit der Baugruppe verbinden.
Randbemerkung
Ursprünglich wollte ich den LED-Streifen an 5V betreiben, jedoch hat mit dem 5V-Netzteil nichts funktioniert. Der NodeMCU funktionierte, allerdings klappte die Kommunikation mit den LEDs nicht. Mit einem Multimeter wurde die Spannung nachgemessen und da das Netzteil nicht 5V sondern 6V lieferte, war die Ursache gefunden.
Parameter Symbol Conditions Min Typ Max Unit Input voltage level VIH DIN,SET 0.7VDD —— —— V VIL DIN,SET —— —— 0.3 VDD V
Rechnerisch ergibt sich für einen notwendigen Highpegel eine Mindestspannung von 3,5V, die mit den 3,3V schon nicht mehr erreicht werden können. Beim Betrachten von anderswo dokumentierten Aufbauten drängt sich jedoch der Eindruck auf, dass die Kommunikation dennoch erfolgreich stattfinden kann. Das ändert sich jedoch, wenn die LEDs nicht mehr an 5V sondern an 6V hängen. Damit wird für einen Highpegel eine Mindestspannung von 4,2V gefordert und die werden sicher nicht mehr erreicht.
Pegelwandler
Ein stabiler Betrieb erscheint ohne Pegelwandler nicht möglich. Diese kann man fertig kaufen oder man verschaltet diskrete Transistoren.