Ein Always-On-Display mit dem Raspberry Pi Zero W entwickeln
Mein Projekt "Always-On-Display" ist mittlerweile über fünf Jahre alt und hat einige Erweiterungen erfahren. Dabei handelt es sich um eine Anzeige, die ständig an und in meinem Blickfeld ist und mir fortlaufend Informationen anzeigt, wie zum Beispiel- Zustand meines Webservers: CPU- und RAM-Auslastung, Übertragungsraten, Erreichbarkeit, etc. In kritischen Lagen fängt das AOD an zu piepsen, wobei ich am Intervall erkennen kann, um was es geht. So kann ich zeitnah eingreifen, sollte mal etwas nicht wie erwartet laufen, oder es ein Netzwerkproblem geben.
- Zustand des Raspberry Pis: Temperatur, RAM etc.
- Börsenwerte und -Indizes wie DAX, USD, Bitcoin, Gold- und Ölpreis...
- Die Wettervorhersage für die nächsten Tage
- Meine Abonenntenzahlen auf Youtube, Twitter usw.
Es ist unheimlich praktisch, alles Wichtige auf einen Blick immer im Blick zu haben. Wobei die längeren Zeilen durchscrollen, da nicht endlos Platz auf dem 20 x 4 Zeichen-Display ist.
Da es mittlerweile etwas mühsam wird, alle zu diesem Projekt gehörenden Einzel-Artikel aus dem Hauptindex herauszusuchen, will ich hier einen Überblick über diese Einzelartikel geben.
Dies geschieht in Textform, da es doch nötig ist, manchmal das eine oder andere anzumerken. Einfach den blauen Links folgen, um zum betreffenden Artikel zu gelangen. Der Artikel sollte sich dann in einem neuem Browsertab öffnen.
Angefangen hat alles natürlich mit der Ersteinrichtung des Raspberry Pi Zero W, also dem installieren des Betriebssystems, damit überhaupt etwas möglich ist. Danach musste noch die Dateifreigabe und Zugriff über Windows auf den Raspi sichergestellt werden. Das machte die Software-Entwicklung sehr viel bequemer, weil jetzt auf dem PC die Python-Programme editiert und herübergeladen werden konnten. Damit war der Grundstein gelegt.
Was wäre ein Always-On-Display ohne Display? Genau: nichts. Im Artikel Ein Dot-Matrix-LCD (1602A und 2004A) mit dem Raspberry Pi ansteuern erkläre ich, wie man ein LCD am Raspi anschließt und ansteuert. Ich entscheide mich für ein 2004A-Display, mit dem 4 Zeilen zu je 20 Zeichen darstellbar sind. Es ist einfach ansprechbar, braucht wenig Strom, kann allerdings nur sehr rudimentär Grafiken.
Damit die Hintergrundbeleuchtung des Displays nicht ständig an sein muss, wird sozusagen als Lebensverlängerungsmaßnahme ein PIR-Bewegungsmelder (HC-SR501) eingebaut, der das Display ausschalten soll, wenn ich nicht davor sitze. So wie ich es auch schon bei meinem OctoPrint-Raspi mit Status-LCD gemacht hatte (siehe Foto rechts).
Den PIR-Sensor habe ich allerdings später durch ein Radar Bewegungsmelder Modul RCWL-0516 (hier an einem Arduino MFS) ausgetauscht, weil dieser auch ohne Sicht nach außen und platzsparend im Gehäuse Platz findet. Der weiße, nach außen stehende PIR-Dom hatte mich doch ein wenig gestört und mir zu viel Platz weggenommen.
Zwischendurch hatte ich auch einen Bosch BMP280 als Thermometer und Barometer-Sensor eingebaut gehabt, mir den Platz im Gehäuse dann aber wieder gespart und das Modul wieder ausgebaut, weil das Always-On-Display eh fast direkt neben meiner Wetteranzeige auf dem Schreibtisch steht und die schon Innen- und Außentemperatur und Luftfeuchtigkeit anzeigt. Darum habe ich den Sensor wieder ausgebaut, weil er war ja informationstechnisch überflüssig.
Als nächstes habe ich die Anzeige auf dem Always-On-Display in mehrere Screens unterteilt, also mehrere Anzeigen, die unterschiedliche Dinge anzeigen: Screen 1 sollte eine Zusammenfassung mit allen wichtigen Informationen und notfalls Scrollern bei zu langen Texten anzeigen. Screen 2 dann die genauen Infos zum Raspberry Pi Zero, Screen 3 alle Infos zum Webserver, Screen 4 alle Börsenwerte, Screen 5 alle Wetterdaten und so weiter.
Das Umschalten zwischen den Screen muss aber irgendwie ermöglicht werden und das bitte schön möglichst komfortabel. Von einem Gestensensor bin ich schnell abgekommen, da zu ungenau und dann schließlich bei einer Infrarot-Fernbedienung gelandet. Mein Artikel Den Raspberry Pi mit der Infrarot-Fernbedienung fernsteuern erklärt genau, wie das technisch geht.
Man kann im Prinzip jede beliebige IR-Fernbedienung benutzen und die Codes, die diese bei Tastendrücken sendet, abfangen und auswerten. Also habe ich die Fernbedienung meiner Soundbar hergenommen, bei ich ich eigentlich regelmäßig nur den Ein/Ausschaltknopf und die Lautstärkeregelgungsknöpfe benötige und einige nicht benutzte Tasten umgewidmet, um mein Always-On-Display damit zu steuern. Funktioniert wunderbar und ist beliebig erweiterbar. Nun kann ich komfortabel durch die einzelnen Screens durchschalten. Die Empfindlichkeit des IR-Sensors ist überraschend gut.
Da mein Always-On-Display ja sowieso 24 / 7 läuft, kann ich es doch im Prinzip auch als Server für allerlei Dinge gebrauchen, die nicht so viel CPU-Power benötigen. Das schöne am Raspi Zero ist ja, dass sich der Stromverbrauch mit eins, zwei Watt echt in Grenzen hält. Wenn ich da an den Router meines Internet-Providers denke, der auch immer läuft und sich gleich 20 Watt gönnt (zahlt ja der Kunde)...
Warum das Always-On-Display dann nicht benutzen, um Geräte an- und auszuschalten? Ich habe noch reichlich dieser Funksteckdosen, die auf 433 MHz funken. Wäre doch toll, diese mit der Fernbedienung ein- und ausschalten zu können. Oder per WLAN-Interface im Browser. Oder zu einer bestimmten Uhrzeit. Oder bei einer bestimmten Temperatur. Oder irgendeiner anderen Bedingung. Zuerst brauchte mein Always-On-Display dazu aber ein neues Modul, das diese Funksteckdosen schalten kann. Das stelle ich im Artikel Mit dem Raspberry Pi 433 MHz-Funksteckdosen schalten vor. So sicher wie WLAN-Steckdosen sind die 433 MHz-Variante aber bei weitem nicht und sollten nicht für kritische Dinge oder Verbraucher mit höheren Leistungen über ein paar Watt benutzt werden.
Nach diesen Experimenten und weiteren Überlegungen, ob ich denn vielleicht nicht doch noch einen weiteren Sensor / Aktor brauchen würde, habe ich dann den Entschluss gefasst, dass das jetzt erst einmal genug ist und das Always-On-Display nun ein eigenes Gehäuse bräuchte, damit es geschützt und hübsch aussehend auf meinem Schreibtisch einen Platz finden könnte.
In meinem Artikel Gehäuse für Always-On-Info-Display mit Raspberry Pi Zero stelle ich noch einmal die Inneren des Always-On-Display vor: Buzzer, 433 MHz Sender, Radar-Bewegungsmelder, IR-Empfangsdiode, 2004A Display und natürlich der Raspi Zero W. Und wie ich ein passendes Gehäuse in dem CAD-Programm OpenSCAD entworfen habe, dass dann in passendem transluzenten blauen PLA über meinen 3D-Drucker Realität geworden ist. Diese transluzenten Farbe habe ich gewählt, damit die IR-Empfangsdiode auch noch guten Empfang hat, auch wenn sie ins Gehäuse integriert ist.
Damit war das Projekt aber noch nicht abgeschlossen. Als nächstes sollte das Always-On-Display mit meinen amazon Echo Dots zusammenarbeiten. Ich wollte auch auf Zuruf meine 433 Mhz-Funksteckdosen-Geräte an- und ausschalten lassen oder mir ansagen lassen, wie das Wetter wird oder die Kurse stehen. Und Letzteres so, wie ich das möchte, mit den Infos, die ich will und nicht irgendeinem Gedöns, dass einen nicht interessiert, wie es Alexa von sich aus gerne präsentiert.
Also wurde das Always-On-Display mit einem kleinen Webserver mit PHP ausgestattet, der sich in die amazon Alexa Skill-Welt integriert. Wie das genau geht, steht in meinem Artikel Eigenen Alexa Skill programieren und auf Raspi-Webserver hosten. Für die paar Abfragen aus der amazon Cloud reich auch ein Raspberry Pi Zero der ersten Generation locker aus. Benutzt außer mir ja niemand.
Zwischenzeitlich hatten die amazon Cloud oder die Skill-Software zwar mal gesponnen, aber ich konnte die entgleisten Routinen immer wieder auf die Schiene setzen. Allerdings finde ich den Umgang mit amazon Alexa Skills stellenweise unnötig kompliziert und eigenartig, wie ich zum Beispiel auch in meinem Artikeln 433 Mhz-Funksteckdose in Amazon Alexa-Routine schalten und Alexa zickt rum und will selbst programierten Skill nicht mehr finden erwähne.
Nach über fünf Jahren Betrieb kann ich mir ein Leben ohne mein Always-On-Display fast nicht mehr vorstellen, so praktisch ist es und so viele Dinge macht es einfacher. Und: Das Display ist genauso scharf, hell und kontrastreich wie am ersten Tag und das nach 5 Jahren Dauerbetrieb. Da habe ich auch schon andere Erfahrungen mit anderen Displays gemacht, wie unter Burn-in bzw. Burn-out Problem bei OLED Displays nachzulesen.
Und wenn mir irgendwas in Zukunft fehlen sollte, dann programmiere ich es einfach. Selbst neue Sensoren könnte ich noch einbauen; notfalls müsste ich dann halt ein größeres, neues Gehäuse designen. Alles kein Problem.
Ich hatte zwar einmal das Problem, dass die Bewegungserkennung nicht mehr richtig funktionierte. Mein erster Verdacht für die Fehlerquelle war natürlich das Radar-Modul, aber dann ging mir ein billiges USB-Ladegerät an anderer Stelle kaputt (siehe auch mein Artikel Reparatur Billig China Netzteil 5 Volt 2 Ampere TYL-U90EWE). Ein Netzteil gleicher Bauart versorgte auch mein Always-On-Display mit Strom.
Nachdem das Netzteil ausgetauscht war, funktionierte die Bewegungserkennung sofort wieder einwandfrei. Ursache war, dass das Billig USB Ladegerät wegen defektem Kondensator nicht mehr genügend Strom liefern konnte und wohl der Radar-Sensor dasjenige Teil war, dass am Ende den Kürzeren zog. Als ein paar Wochen später dann mein Countdown-Wecker mit dem STM32 für Schlafzeit-Experimente öfters die falsche Zeit anzeigte, habe ich gleich als erstes das Netzteil überprüft - und auch dieses hier war zu schwach geworden. Es ist schon interessant, zu welchen Effekten es kommen kann, wenn die Stromquelle nicht verlässlich Strom liefert. Nicht immer ist die Schaltung schuld, in der man natürlich als erstes sucht. Da kann man dann lange suchen. Insbesondere, wenn sich das Netzteil zwischenzeitlich "abkühlt" und einen Moment lang erst einmal ganz normal funktioniert.
Von daher finde ich auch die "Low Power"-Warnungen, die die neuen Raspberry Pis (ab Version 3 glaube ich) ausgeben, mittlerweile praktisch; auch wenn ich sie zuerst als nervig empfunden habe, weil ja anscheinend doch alles korrekt funktioniert. Ein ungenügendes Netzteie kann, wie gesagt, zu den seltsamsten Phänomenen führen. Gut, wenn man dann einen Hinweis hat. Aber das ist ein anderes Thema.