Experimente mit ESP8266, WS2812B und MQTT

Derzeit experimentiere ich mit einem ESP8266, WS2812B und MQTT. Was sollen all diese Buzzwords, fragt man sich vielleicht erst mal- daher eine kleine Einführung worum es sich dabei handelt und was das Ziel ist.

Fangen wir damit an, was ich eigentlich vor habe. Meine Visualisierung der Hausautomatisierung per SmartVISU gibt mir prinzipiell jederzeit alle Statusinformationen im Haus- beispielsweise ob Fenster offen sind, ob Licht brennt, oder ob irgendwelche sonstigen Informationen vorliegen.

Das ist prima, ist aber denkbar schlecht geeignet wenn man sich „mal schnell“ einen Überblick über den Zustand verschaffen möchte. Dazu muss man erst mal das Handy raus holen, die Visualisierung aufrufen und dann evtl. noch mehrere Unterseiten ansehen.

Daher möchte ich eine Statusanzeige realisieren, die zentral im Haus angebracht wird (ggf. auch mehrere). Darauf sollen dann mit Hilfe von RGB LEDs die Statusinformationen zu sehen sein- beispielsweise blaue LED für offenes Fenster, rot blinkende LED für eine Alarminformation etc.- ich stelle es mir ungefähr so vor:

WS2812B

Wie man sieht braucht man eine ganze Menge LEDs. Diese alle einzeln an einen Mikrocontroller anzuschließen und getrennt anzusteuern ist ein relativ großer Aufwand. Daher werde ich die bekannten WS2812B LED Stripes verwenden. Diese ähneln im Aussehen den allseits bekannten LED Stripes, die ich auch verwende. Der Unterschied ist allerdings der, dass man jede LED einzeln ansteuern kann- also jede LED kann eine beliebige Farbe und Helligkeit habe. Einfach mal Google zum Thema WS2812B befragen, wer diese LEDs noch nicht kennt.

Der „Nachteil“ ist natürlich, dass es nicht ausreicht diese einfach an die Spannung anzuschließen, sondern man benötigt einen Mikrocontroller um diese anzusteuern. Hierfür gibt es aber Bibliotheken für alle gängigen Controller, die den Aufwand minimieren.

Sieht man sich die obige Zeichnung an, benötigt man also nur drei LED Stripes mit je 11 LEDs um die drei LED-Reihen der Anzeige zu realisieren. Da man die WS2812B Stripes nach jeder LED teilen kann, reicht ein günstiger Streifen mit 60 LEDs locker aus. Sonst benötigt man an Bauteilen so gut wie nichts.

MQTT

Die nächste Frage ist dann natürlich, wie kommt die Statusinformation aus FHEM an den Mikrocontroller? Hierfür bietet sich das MQTT Protokoll an. Hierbei handelt es sich um ein mittlerweile standardisierte Protokoll für das „Internet der Dinge“. Das bedeutet, es ist dazu gedacht, Nachrichten zwischen unterschiedlichen Geräten auszutauschen. In meinem Fall wäre das die Statusanzeige und der FHEM-Server.

Das Protokoll funktioniert so, dass es einen zentralen „Nachrichten Broker“ gibt. Dies wäre bei mir der FHEM-Server. Client-Geräte (wie die Statusanzeige) können sich am Broker für Informationen registrieren, beispielsweise eben Statusinformationen von Fenstern oder Licht. Wenn sich ein entsprechender Status ändert, schickt der Broker den neuen Status an alle registrierten Geräte.

Für FHEM gibt es entsprechende Module, die eine Verbindung zwischen FHEM-Geräten und MQTT herstellen. Man installiert also zunächst einen MQTT Broker wie z.B. Mosquitto. Der Broker kann auf dem selben Gerät wie FHEM laufen, z.B. einem Raspberry Pi. Mosquitto kann man über die Paketverwaltung ganz einfach installieren. Dann definiert man per FHEM-Modul sogenannte „Bridges“, die definieren welcher Status in welche MQTT Nachricht umgesetzt werden soll. Das verschicken übernimmt dann der Broker.

ESP8266

Verschicken schön und gut mag man sich nun denken, aber wie kommen die Nachrichten am Statusdisplay an? Da sich MQTT über TCP/IP verschicken lässt, bietet sich WLAN an. Da wir wie oben erwähnt einen Mikrocontroller brauchen um die LEDs anzusteuern, und natürlich auch um die MQTT Nachrichten zu verarbeiten, landet man sehr schnell beim ESP8266.

Hierbei handelt es sich um einen kleinen Mikrocontroller der chinesischen Firma espressif. Das geniale an diesem kleinen Chip ist, dass er sehr günstig ist (deutlich unter 5€), WLAN direkt onboard hat, und sich darüber hinaus auch noch in der Arduino IDE programmieren lässt. Wer also schon einmal mit einem Arduino gearbeitet hat, kann quasi sofort loslegen.

Wenige Zeilen Code sind notwendig, und der Controller ist mit dem heimischen WLAN verbunden. Danach benötigt man noch Code für das MQTT Protokoll und für die Ansteuerung der WS2812B LED Stripes. Für beides gibt es Bibliotheken.

Nun muss man also nur noch den Code für die Interpretation der MQTT Nachrichten und die Umsetzung in entsprechende Aktionen am LED Stripe schreiben.

Ausblick

Nun hört sich das ganze wahnsinnig toll und einfach an, aber ist es in der Realität auch so?

Ja, ist es 🙂 Unten seht ihr meinen Versuchsaufbau mit dem ESP8266 und einem WS2812B LED Stick mit 8 LEDs.

Die Firmware habe ich aktuell so weit, dass sie auf MQTT Nachrichten von FHEM reagiert, und je nach Nachricht eine bestimmte LED in einer definierten Farbe einschaltet, blinken lässt oder ausschaltet. Im Prinzip also fertig, es fehlt nur noch der Feinschliff. Hierfür habe ich inklusive der Inbetriebnahme des ESP8266, der Installation des MQTT Brokers und der Konfiguration der MQTT Bridges nur wenige Abende gebraucht.

Ich werde bei Gelegenheit zu allen hier genannten Themen entsprechende Tutorials veröffentlichen, so dass ihr eure eigenen Projekte mit dem ESP8266 und den WS2812B LEDs realisieren könnt. Eventuell braucht ihr ja auch genau so eine Statusanzeige, dann könnt ihr diese einfach nachbauen.

 

 

 

 

 

 

5 Antworten auf „Experimente mit ESP8266, WS2812B und MQTT“

    1. Tutorial wird kommen. Das fertige Gerät habe ich mittlerweile seit längerem ohne Probleme im Einsatz. Im Moment fehlt nur die Zeit, alles zusammen zu schreiben 🙁

  1. Hi, angenommen es steht genug Strom zur Verfügung, wieviele LEDs könnte so ein Modul ansteuern? Hast du sowas getestet?

    Könntest du bitte die FW zur Verfügung stellen?

    Vielen Dank für die coole Arbeit!

    1. Es gibt eigentlich kein echtes Limit bei der Anzahl der LEDs. Natürlich benötigen mehr LEDs mehr RAM des Controllers. Das dürfte neben dem Stromverbrauch die wichtigste Limitierung sein. Bei der Statusanzeige verwende ich 33 LEDs, ich hab bei einem anderen Projekt aber auch 150 am Laufen.

      Die Firmware steht bereits auf GitHub:
      https://github.com/MTJoker/HomeStatusDisplay

      Ich schreibe gerade ein Tutorial zu Aufbau und Inbetriebnahme, aber das ist leider zeitaufwändiger als ich dachte… 🙁

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert