Von Hans Henrik Skovgaard

Als Ingenieur ist es für mich nicht ungewöhnlich, dass ich mit unvorhergesehenen Problemen/Herausforderungen konfrontiert bin, mit denen ich irgendwie umgehen muss. Das passierte mir aber vor einiger Zeit auch privat, denn mein Sohn überreichte mir ein „NeoPixel Jewel 7" von Adafruit, das er aus Versehen für sein Universitätsprojekt gekauft hatte. Dabei handelt es sich um die in Bild 1 zu sehende kleine, runde Platine, die mit sieben „intelligenten“ NeoPixel-RBG-LEDs im SMD-Format bestückt ist. Die große Frage: Was könnte ich damit Nützliches machen?

Bild 1. NeoPixel Jewel 7, angeschlossen an ein Arduino-Board.

NeoPixel + Arduino

Die Firma WorldSemi hat schon eine ganze Zeit RGB-LEDs mit integriertem Controller im Programm, die einfach und effektiv seriell angesteuert werden können. Man findet Massen an Angeboten aus Fernost, wenn man die Begriffe „NeoPixel“ oder „WS2812B“ bei eBay eingibt. Da ich bereits eine ganze Reihe von Arduino-Projekten entwickelt hatte, war es nicht schwer, diese LEDs mit Hilfe der Library von Adafruit zum Leuchten zu bringen. Resultat meiner Experimente war eine Reihe von weißen Punkten in meinem Blickfeld, denn die LEDs sind wirklich sehr hell. Seien Sie also vorsichtiger als ich, wenn Sie solche LEDs ausprobieren!

Arduino ist das Eine. Wenn man aber gerne eine Internet-Anbindung haben will, nimmt man doch besser etwas anderes als Basis. Zur gleichen Zeit beschäftigte ich mich damals mit der ESP8266-MCU von Espressif in Form des Boards „D1 mini Pro“ von Wemos. Für mich ergab dieses Board mit der NeoPixel-Platine eine gelungene Kombination. Zur Erhöhung des WAF (Wife Acceptance Factor ;-) ) musste ich dieses Stück Technik allerdings in etwas Schönem (aber nicht zu Teurem) verkleiden.

Lampen-Tuning

Meine Lösung bestand darin, eine fertige Lampe von IKEA namens Gröno quasi als Gehäuse zu verwenden. Ich bin zwar nicht auf die Produkte von IKEA fixiert, aber diese in Bild 2 zu sehende Lampe kostet in Dänemark nur 6,50 € (in D sogar nur 4,99 €). Passiert der Lampe aufgrund meiner Umbaumaßnahmen eine destruktive Katastrophe, würde mich das vermutlich nicht ruinieren – ein nicht ganz unwichtiger Aspekt beim Hacken von Dingen.

Bild 2. Die preiswerte Lampe „Gröno“.

Bild 3 zeigt „die Elektrik“ bzw. das Innenleben der Lampe: Eine E14-Lampenfassung nebst Netzkabel und Schnurschalter.

Bild 3. Das noch unmodifizierte Innenleben der IKEA-Lampe.

Da drei Adern zum Anschluss der NeoPixel-Platine ausreichen, wurde einfach die Lampenfassung demontiert und die Platine obendrauf geklebt sowie die Zuleitung durch ein normales dreiadriges Kabel ersetzt (Bild 4).

Bild 4. Die LED-Platine kommt oben auf die demontierte Lampenfassung.

Die Schaltung der einzubauenden Elektronik von Bild 5 ist mehr als einfach. Neben der Neopixel-Platine und einem ESP8266 benötigt man nur noch 5 V mit 500 mA Belastbarkeit via USB. Der Rest ist reine Software. Die Neopixel-Platine beherbergt sieben RGB-LEDs mit integriertem Controller im SMD-Format 5050. Man kann diese LEDs auch einzeln unter der Bezeichnung WS2812B kaufen und damit fast beliebig komplexe Anordnungen realisieren. Sie benötigen bis zu 60 mA Strom und leuchten maximal mit rund 20 Lumen. Man kann sie in Serie schalten und trotzdem einzeln adressieren, indem man die RGB-Helligkeitsdaten an einem Ende seriell in die Kette hineinschiebt. Die Ansteuerung ist also denkbar einfach.

Bild 5. Die „Schaltung“ meines Hacks ist sehr simpel: Mikrocontroller-Board + LED-Platine.

Software

Ein wichtiger Aspekt des Boards D1 mini Pro von Wemos ist, dass es mit der Arduino-IDE programmiert werden kann. Die Verwendung der Arduino-IDE hat Vor- und Nachteile – besonders relevant für mich ist aber, dass man damit Projekte schnell und einfach zum Laufen bringen kann. Die Erstellung von Software für diesen IKEA-Hack braucht folgende Vorarbeiten:


Die Software mag angesichts der einfachen Aufgabe des Steuerns dieser LEDs etwas aufwändig erscheinen, doch der Grund für die Komplexität liegt darin, dass ein ESP8266 über WLAN-Unterstützung verfügt. Und wenn wir diese nutzen wollen, benötigen wir schon etwas Code. Die Software hat folgende Aufgaben:

  • Erzeugung spezieller Lichteffekte.
  • Internet-Anbindung per WLAN.
  • Webserver zur Konfiguration der Lampe.


Die Lampe kann auch „offline“ bzw. im Standalone-Modus betrieben werden, in dem sie z.B. die Regenbogenfarben in einem definierten Tempo durchläuft (z.B. 20 ms für jede der 8x8x8 Farbstufen). Wenn man die Lampe während des Betriebs konfigurieren möchte, muss man aber zwingend WLAN aktivieren, damit die Neopixel-Lampe eine Verbindung zum lokalen Netz herstellen kann. Die nötigen Parameter für WLAN kann man entweder fix im Sourcecode mit anschließender Neukompilierung der Wemos-Firmware oder beim „Booten“ der Lampe einstellen. Hat die Lampe Verbindung mit dem WLAN, ist folgendes möglich:

  • Ein- und Ausschalten der Lampe.
  • Einstellung der Helligkeit.
  • Änderung der Verzögerungszeit zwischen den Farbzyklen.
  • Auswahl der Farbzyklen (aktuell: Regenbogen, Regenbogenzyklen, statisch, Kerzenflackern und Fading).
  • Statische Einstellung der Farbe.

 

Die Einstellungen kann man über eine (sehr) einfache Web-Oberfläche (siehe Bild 6) vornehmen.

Bild 6. Die einfache Konfigurationsoberfläche des Webservers.

Der HTML-Code für die Webseite wird mit der Funktion

getPage(string str)

generiert.

 

Das alles ist in der Software fest vorgegeben und nicht leicht zu ändern - aber es funktioniert. Die Web-Konfigurationsschnittstelle aktualisiert die NeoPixel-Lampe per HTTP-POST-Requests. Das prinzipielle Vorgehen ist in meinem Buch „IoT Home Hacks with ESP8266“ beschrieben. Insgesamt ist die Software ähnlich wie bei anderen Projekten von mir gestrickt. Bild 7 zeigt den Ablaufplan der Software beim Setup und Bild 8 beim Betrieb bzw. der Modus-Auswahl.

Bild 7. Ablaufdiagram für den Setup-Prozess.
Bild 8. Ablaufdiagram für die Modus-Auswahl.

 

Recht bald entdeckte ich, dass das Fading (An- und Abschwellen der Helligkeit) zusätzliche Überlegungen erforderte. Wenn man das nämlich mit einer linearen Rampe löst, sieht es nicht gut aus. Wie in Bild 9 dargestellt, ist eine eher sanfte, an eine Sinuskurve angenäherte Rampe erforderlich. Dieser Helligkeitsverlauf wurde in Excel simuliert und als Array byte fadeInterpolation[] implementiert – er kann bei Bedarf beliebig verändert werden.

Bild 9. Optimierter Helligkeitsverlauf beim Fading.

Der Artikel „LED-Dimmer“ in Elektor 9/2018 beschreibt die Zusammenhänge. Die zugrundeliegende Theorie basiert auf dem psycho-physikalischen Weber-Fechner-Gesetz.

Alltagsbetrieb

Sobald das mit der Firmware versehene Wemos-Board an eine 5-V-Stromversorgung angeschlossen wird, bootet es und durchläuft dabei einen „Einschaltzyklus“.

WLAN-Verbindung (blaues Licht)

Zunächst wird versucht, anhand der eingestellten Konfiguration eine Verbindung mit dem WLAN herzustellen. Während dieses Vorgangs blinken die LEDs der NeoPixel-Platine nacheinander blau.

Warten (rotes Licht)

Nach einer erfolgreichen oder fehlgeschlagenen WLAN-Verbindung wartet die Elektronik auf eine Benutzerinteraktion am USB-Anschluss. Während dieses Vorgangs blinken die LEDs nacheinander rot auf. Wenn man mit der Konfiguration der NeoPixel-Lampe beginnt, erlöschen alle LEDs. Wenn zehn Sekunden lang kein Benutzer mit der Lampe interagiert, startet sie die vorkonfigurierte Beleuchtung. Nach dem Einschalten über eine aktive WLAN-Verbindung ist es möglich, den Lichteffekt bzw. den Betriebsmodus der Neopixel-Lampe zu verändern.

Neues Web-Interface

Nachdem ich so weit gekommen war, zeigte ich das Ergebnis meinem Sohn. Er hat einen Master-Abschluss in Interaktionsdesign und zeigte sich von meiner Gestaltung der Web-Schnittstelle nicht sehr beeindruckt. Also entwickelte er ein neues Design (Bild 10), das nicht in einfach „hart“ per Code realisiert werden konnte, da die Pflege zu schwierig geworden wäre.

Bild 10. Entwurf des verbesserten Web-Interfaces.

Stattdessen wurde ein HTML-, CSS- und Javascript-Design erstellt. An dieser Stelle kommt das SPI-Flash-Datei-System ins Spiel. Eine ESP8266-MCU stellt immerhin 14 MB per Datei-System SPIFFS nutzbaren Flash-Speicher zur Verfügung. In meinem Buch findet man die Informationen zum:

  • Hochladen von Dateien ins SPIFFS.
  • Ablageort der Dateien auf dem PC, um sie hochladen zu können.
  • Installation der nötigen Software für die Arduino-IDE.

 

Wenn dies korrekt durchgeführt wurde, sollte Ihr Arduino-Software-Verzeichnis wie in Bild 11 aussehen.

Bild 11. So sollte das Arduino-Software-Verzeichnis aussehen.

In Bild 12 sind die im Ordner Data enthaltenen Dateien für das Web-Interface aufgeführt. Die aktualisierte Software finden Sie zum kostenlosen Download auf der Elektor-Webseite zu diesem Artikel. Wenn Sie in das Verzeichnis Data schauen, werden Sie feststellen, dass keine Datei NEOPixel_new_20191222_load.js enthalten ist, denn diese Funktionen sind fest in der ESP8266-Software kodiert. Auf diese Weise kann die ESP8266-MCU das Web-Interface beim Einschalten mit gespeicherten EEPROM-Werten konfigurieren.

Bild 12. Der Inhalt des Verzeichnisses Data.

Das Web-Interface ist von vorneherein für die Hochkant-Darstellung der Bildschirme von Smartphones konzipiert. Da die NeoPixel-Lampe durch den Empfang von HTTP-POST-Requests konfiguriert werden kann, ist es auch möglich, die Lampe über die Heimautomatisierungslösung OpenHAB zu steuern - aber das ist eine andere Geschichte.

Diese bescheidene NeoPixel-Jewel-Platine hat mich in viele verschiedene neue Bereiche geführt, die mir vor Beginn des Projekts nicht bekannt waren. Und das hat sich gelohnt, denn dieser IKEA-Hack bzw. diese NeoPixel-Lampe ist seit mehr als einem Jahr fester Bestandteil meines Zuhauses.

----------------------------------------------------------------------------------------------------------------------

Wollen Sie weitere Elektor-Artikel lesen? Jetzt Elektor-Mitglied werden und nichts verpassen!

----------------------------------------------------------------------------------------------------------------------