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.

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.