Hyperion LED Controller als Einstieg in die embedded Softwareentwicklung

Honeybees persönlicher Weg zur embedded Software: Entwicklung einer WLAN basierten LED-Steuerung zur Anbindung an Hyperion als Ambilight.

hyperion
Bildquelle: honeybee

Oder: Wie eine Biene zum embedded Softwareentwicklung kam. In diesem Artikel stelle ich euch mein Hyperion LED Controller Projekt vor. An diesem Projekt konnte ich wachsen und mein Wissen in der Software- und Hardwareentwicklung extrem erweitern. Warum lohnt es sich, diesem Vorhaben Zeit und Aufmerksamkeit zu widmen? Was kann man dadurch lernen und mittelfristig erreichen?

Mein Einstieg ins Reverse Engineering und die embedded Softwareentwicklung

In dieser Artikelserie möchte ich meinen ganz persönlichen Weg zu diesem sehr interessanten Bereich in der IT näherbringen. Vielleicht kann er ja auch dem ein oder anderen als Blaupause dienen. Ich habe mir in den letzten Jahren natürlich mehr als nur diese Geräte angesehen. Aber bei diesen handelt es sich um die Geräte, in die ich am tiefsten eingestiegen bin oder die zu einem großen Wissensdurst und Schub bei mir geführt hatten. Daneben gab es auch andere Projekte, die mich lange beschäftigt haben. Darunter mein persönlicher Favorit: Das Reverse Engineering der Toniebox.

Toniebox Platine

Platine der Toniebox

Ich war selbst von klein auf sehr IT interessiert. Somit fiel sehr schnell der Fokus auf die Softwareentwicklung, insbesondere auf .NET und Java. Auch meine Ausbildung habe ich in diesem Bereich gemacht. Von dort habe ich folgenden Ansatz mitgenommen:

Schaue Dir ein (komplexes) Problem an, zerlege es in mehrere kleinere (simple) Probleme, und finde so Stück für Stück eine Lösung.

Hyperion LED Controller (ESP8266 Arduino)

Es gab immer mal wieder kleinere Arduino Projekte, mit denen ich mich beschäftigt hatte. Darunter zwei größere Projekte. Das erste Projekt war eine Fernsteuerung meiner Autostandheizung über Telefon (Arduino+GSM-Modul+Fernbedienung). Dort gab es aber zwei Probleme: Die Zuverlässigkeit und die Stromversorgung. Dies war der fehlenden Erfahrung mit elektrischen Schaltungen geschuldet.

Ich möchte daher lieber ein erfolgreicheres und eher softwareorientiertes Arduino Projekt vorstellen. Es handelt sich dabei um eine WLAN basierte Steuerung von LED-Streifen, die an Hyperion angebunden werden kann.

Was ist Hyperion?

Bei Hyperion handelt es sich um eine Open Source Lösung, um das von Philips bekannte Ambilight selbst umzusetzen. Genau genommen ist Hyperion nur die Steuerungssoftware, die Bildsignale aufnimmt und daraus dann Steuerungssignale für LEDs bereitstellt.

Zusätzlich wird dazu noch ein Raspberry Pi mit einem Videograbber benötigt, der die Bildsignale aufnehmen kann. Und natürlich die dazu passenden LED Streifen, die dann z. B. hinter dem TV angebracht werden können. Ein Tutorial, wie man so etwas umsetzten kann, findest du im Raspberry Pi Forum.

Beispielaufbau Hyperion Ambilight

Beispielaufbau Hyperion Ambilight

Wireless LEDs

Mich hatte Anfang 2016 dabei gestört, dass die LEDs nur über eine direkte Kabelverbindung zum Raspberry Pi angesteuert werden konnten. Dies konnte man insbesondere für Ambilight Effekte unter der Couch oder unter dem Bett nur sehr umständlich anbinden. Es gab zwar schon eine Ausgabe der LED Signale über UDP, aber noch keinen passenden WLAN-Empfänger dafür.

Daher war die Idee geboren auf Basis meiner bisherigen Erfahrung mit Arduino einen ESP8266 (Microcontroller mit WLAN) zu verwenden, um diese Lücke zu schließen. Es kristallisierte sich recht schnell heraus, dass mit FastLED eine tolle Bibliothek zur Ansteuerung von LEDs existiert. Es lassen sich darüber diverse SPI bzw. 4-Wire wie z. B. LPD8806 oder APA102 und verschiedene 3-Wire wie Neopixel oder LPD1886 LED Streifen ansteuern.

ESP8266 / NodeMCU auf Breadboard

ESP8266 auf Breadboard

Bildquelle: Tim Käbel

Objektorientierung

Bei der Umsetzung war es mir einerseits wichtig, dass es einfach zu verwenden ist. Und dass der Quellcode sauber strukturiert ist, damit auch andere von diesem Projekt profitieren können.

Da ich von manchen Freunden und Kollegen gerne als jemand mit “Klassenfetisch” bezeichnet werde, ist natürlich klar, dass ich einen objektorientierten Ansatz fahren würde. Da Arduino auch die Möglichkeit bietet klassisches C++ zu nutzen, passte das wie Arsch auf Eimer.

Nach den ersten Überlegungen haben sich folgende Module herauskristallisiert:

  • Config
    • Konfigurationstrukturen
    • einlesen und abspeichern
  • Logger
  • JsonServer
    • Steuerung über die Hyperion App
  • LedControl
    • Kapseln von FastLed
    • Animationen
  • UdpServer
    • Empfang von LED-Daten von Hyperion
  • OTA
    • Firmwareupdates über WiFi
  • WebConfig
    • Webinterface zur Konfiguration
  • WiFi
    • Verbindungsaufbau
crime, Kriminalität

Lesen Sie auch

 

Fazit Hyperion LED Controller Projekt

Mit diesem Projekt konnte ich große Fortschritte bei der embedded Entwicklung mit Arduino und C++ sammeln. Insbesondere musste ich lernen, dass FastLED zur Compilezeit entscheidet, welcher Typ von LED angesprochen werden kann und es unmöglich ist, das zur Laufzeit über einen Parameter vom Benutzer entscheiden zu lassen. Ich hätte mich vorher mehr mit der Dokumentation von FastLED und mit der Funktionsweise von Templating in C++ beschäftigen sollen. Das hätte einige Stunden Zeit gespart.

Zwei Punkte wären in Bezug auf einfache Verwendung hilfreich gewesen: Vorkompilierte Firmwares für die einzelnen LED-Typen und eine Hotspot basierte WLAN-Konfiguration. Damit hätte sich ein potenzieller Nutzer nicht mehr mit Arduino und den Config-Dateien des Projekts beschäftigen müssen. Den Hotspot habe ich wegen des Artikels hier kürzlich nachimplementiert. 

Und trotzdem: Ich konnte über 100 Stargazers auf GitHub mit meinem Hyperion LED Controller Projekt einsammeln. Jemand hat sich sogar extra die Mühe gemacht, ein französisches Tutorial zu schreiben..

Als weiteres “Abfallprodukt” habe ich bei diesem Projekt (wieder) viel Erfahrung mit Elektronik und der Stromversorgung von LEDs sammeln können. Ich habe beispielsweise unfreiwillig ausprobiert, was passiert, wenn man ein 12V Netzteil an 5V LEDs anschließt: Qualmt schön, stinkt auch …

Zur Entwicklung habe ich früher die Arduino IDE eingesetzt, welche aber für ein Projekt mit vielen Modulen meiner Meinung nach ungeeignet ist. Ich bin daher nach einiger Zeit auf Visual Studio Code inklusive des Arduino Plugins umgestiegen.

Feedback erwünscht

Aus diesem Artikel könnte in Zukunft eine Artikelserie werden, in der ich für mich persönlich wichtige Projekte kurz vorstelle und Revue passieren lasse. Ich möchte dabei folgende Fragen behandeln: Inwiefern konnte ich damit meinen Horizont erweitern? Wie wichtig waren diese Projekte zur Weiterentwicklung meiner Fähigkeiten?

Wie hat euch der Artikel gefallen? Ich hoffe, ich konnte damit vielleicht den ein oder anderen dazu zu inspirieren, ein interessantes Open Source Projekt zu starten, oder über seinen ganz persönlichen Tellerrand hinaus zu schauen. Schreibt mir in den Kommentaren!

Tarnkappe.info

Honeybee schreibt seit Ende 2020 für die Tarnkappe. Der Einstieg war ein Reverse Engineering Artikel über die Toniebox. Die Biene liebt es, Technik aller Art in ihre Bestandteile zu zerlegen. Schraubendreher und Lötkolben liegen immer in Reichweite. Themen wie Softwareentwicklung, Reverse Engineering, IT-Security und Hacking sind heiß geliebt.