simon-dreher.de

Hardware

Material:

Hardwareseitig ist wenig zu tun, es muss nur der LED-Ring mit dem ESP8266 verbunden werden und irgendwie mit Strom versorgt werden.

Ich habe dazu einen alten, dreipoligen Lüfteranschluss an die LEDs gelötet (Rot an 5V, Schwarz an GND und weiß an DI (Data In)). Zum Testen habe ich es dann mit dem Steckbrett verbunden an 5V, GND und D4. Später habe ich noch eine passende Buchse an ESP8266 und Stromversorgung angelötet, um später einfacher den LED-Ring austauschen zu können.

Die Stromversorgung kann man einfach über das USB-Kabel oder ein USB-Netzteil lösen. Da mir beim Testen allerding bereits einmal die MicroUSB-Buchse abbrach, habe ich für die endgültige Lösung eine Buchse für einen Hohlstecker angelötet.

Software

Softwareseitig benötigt man auf dem ESP8266 auch nicht besonders viel. Ich nutzte die NodeMCU-Firmware. Diese stellt einen Lua-Interpreter und verschiedene nützliche Bibliotheken zur Verfügung, hier zum Beispiel eine für MQTT und WS2812. Die Firmware kann man entweder selbst bauen oder auf https://nodemcu-build.com die modules auswählen (hier MQTT und WS2812) und später erhält man eine E-Mail, wo man die Firmware herunterladen kann.

Die Firmware wird dann mit esptool auf den ESP8266 geflasht:

$package_manager_install esptool
sudo esptool --port /dev/ttyUSB0 write_flash 0x00000 firmware.bin

Dabei natürlich die richtige USB-Schnittstelle auswählen. Am besten nur den einen zu beschreibenden Mikrocontroller an den Rechner anschließen.

Anschließend müssen noch die Lua-Dateien darauf geladen werden. Dies kann zum Beispiel mit esplorer erledigt werden (benötigt Java und die Rechte, mit einer seriellen Schnittstelle zu interagieren). Für diese Software gibt es viele Tutorials im Internet, darum hier nur in Kurzfassung:

Nun sollte zuerst eine LED leuchten, die zweite leuchtet nach ein paar Sekunden auf, wenn der ESP8266 eine IP-Adresse erhalten hat. Die dritte und vierte leuchten auf, wenn erfolgreich mit dem MQTT-Server verbunden wurde bzw. wenn erfolgreich subscribed wurde.

Infrastruktur

Die Lampe wird über das MQTT-Protokoll gesteuert, bei dem die Kommunikation zwischen verschiedenen Knoten über einen zentralen Broker läuft. Genau diesen müssen wir noch aufsetzen. Dazu kann man auf einem Raspberry Pi oder, wie ich, auf einem Heimserver einen Server wie mosquitto installieren. Bereits in der Standardkonfiguration funktioniert unsere Lampe, da ich auf besondere Sicherheitsmaßnahmen verzichtet habe. Ansonsten könnte man noch Benutzer mit Passwörtern anlegen, Zertifikate konfigurieren oder mit einem anderen MQTT-Server verbinden, der anderswo steht und beispielsweise die Lampe aus dem Internet erreichbar macht.

Wenn der MQTT-Server läuft, kann man ihn mit den bei mosquitto mitgelieferten Kommandozeilenwerkzeugen testen. In einem Terminal abonniert man das Thema /foo

mosquitto_sub -h $MQTT_SERVER_IP -t /foo

und in einem anderen sendet man eine Nachricht an dieses Thema:

mosquitto_pub -h $MQTT_SERVER_IP -t /foo -m "bar"

Dann sollte im ersten Terminal die Nachricht bar erscheinen.

Wenn der ESP8266 läuft, kann man die Farbe im Terminal mit folgendem Befehl ändern:

mosquitto_pub -h $MQTT_SERVER_IP -t /shoji-lamp/light -m "#303010"

Dabei ist die Nachricht eine Farbe, hexadezimal kodiert. Die Farbe per Kommandozeile zu ändern ist jetzt natürlich nicht besonders komfortabel (ja, außer für die Linux-Kommandozeilen-Nerds ;) Dafür gibt es verschiedene Apps für das Smartphonebetriebsystem der Wahl. Ich habe MQTT Dash ausprobiert, darin konfiguriert man den Server, das Topic und hat dann einen Farbwähler, mit dem man die Lampe setzen kann.

Bemerkungen

In anderen Projekten gibt es noch die Funktion, dass der ESP8266 ein eigenes WLAN aufmacht, wenn er keine gültige Konfiguration hat. Dann kann man sich mit diesem WLAN verbinden und auf einer Webseite die Kofiguration bearbeiten. Damit ist die Einrichtung deutlich einfacher, aber für meine Zwecke reichte mir der bisherige Stand aus. Wenn so etwas eingebaut werden soll kann man die vorgefertigte Bibliothek enduser-setup benutzen.