Do-It-Yourself Hardware Hausautomatisierung

Portables ePaper Info-Dashboard

Fertiges, mobiles Informationsdashboard

Die Idee zum ePaper Info-Dashboard hat sich ca. vor einem halben Jahr materialisiert, als ich das 7.5″ eInk Display wieder aus einer Kiste herausgezogen habe. Gekauft hatte ich es schon 2019, ohne einen Verwendungszweck dafür gehabt zu haben. Weil so ein eInk Display nur beim Aktualisieren Strom verbraucht, wollte ich schauen, ob ich das mit Akkubetrieb umsetzen kann. Dazu wollte ich mit ESPHome und einem ESP32 experimentieren. Dieser Mikrocontroller braucht nicht nur selbst sehr wenig Strom, er beherrscht auch einen Tiefschlaf-Modus in dem er besonders wenig verbraucht. Zum Deepsleep aber später mehr. Das lief nicht wie erwartet.

Erste Schritte mit ESPHome und dem ePaper-Display

ESPHome unterstützt diverse ePaper Displays von Waveshare von Haus aus. Und dementsprechend einfach wird es im yaml-Code auch konfiguriert. Wobei der eigentliche Rendercode in C++ dann über eine lambda-Funktion injiziert wird. Die erstklassige Dokumentation hilft hier gut.

# Example configuration entry font: - file: 'fonts/Comic Sans MS.ttf' id: font1 size: 8 spi: clk_pin: D0 mosi_pin: D1 display: - platform: waveshare_epaper cs_pin: D2 dc_pin: D3 busy_pin: D4 reset_pin: D5 model: 2.90in full_update_every: 30 lambda: |- it.print(0, 0, id(font1), "Hello World!");
Code-Sprache: YAML (yaml)
Erste Ausgabe auf dem ePaper
Erste Ausgabe auf dem ePaper

Werte aus dem HomeAssistant holen und anzeigen

Nun lege ich Sensoren und Text-Sensoren , sowie weitere Elemente wie Bilder oder Webfonts an, die ich im Rendercode verwenden möchte. Auf diese Elemente greife ich in dem Lambda-Ausdruck über die ID zu.

sensor: # WiFi signal strength - platform: wifi_signal name: "WiFi Signalstärke" id: wifisignal update_interval: 60s - platform: homeassistant entity_id: sensor.wohnzimmer_feinstaub_pm_2_5um id: pm25_livingroom - … text_sensor: - platform: homeassistant name: "Sun Setting ESP" entity_id: sensor.sun_setting_template id: sun_setting internal: true - platform: homeassistant entity_id: weather.zuhause id: weather - … graph: - id: line_power_graph sensor: power_total duration: 2h width: 235 height: 100
Code-Sprache: PHP (php)

Um Speicher im Flash und RAM zu sparen, gebe ich die explizit zu verwendenden Zeichen und Buchstaben in den Fonts in der Config an.

Softwareentwicklung mit ESPHome: Zusammenstellung des rendercodes

Softwareentwicklung mit ESPHome: Zusammenstellung des Rendercodes

Der Rendercode ist natürlich über mehrere Iterationen gewachsen und hat sich im Laufe deutlich verändert. Und vermutlich wird er das auch über das Artikelveröffentlichungsdatum hinweg weiter tun. Daher verweise ich hier auf den aktuellen Stand im Git. Wenn Du diesen Code in Deinem Projekt verwenden willst, kannst Du dies gerne tun. Es sind aber natürlich Anpassungen an Deine Begebenheiten (HA Entitäten, Beschriftungen und natürlich die Anordnung) nötig.

Hardwareaufbau des ePaper Bilderrahmens

Auf Amazon habe ich mir den billigsten Bilderrahmen geklickt, die ich dort finden konnte. Meine Idee war, das ePaper-Display in den Rahmen und die Technik auf die Rückseite zu kleben. So kann der Rahmen mithilfe seines Pappständers frei im Raum oder am Ladekabel auf dem Schreibtisch stehen. Das Display hab ich mit Tesa Photo Klebepads festgeklebt. Ich hoffe, dass ich es wieder ohne Bruch runter bekomme, falls ich muss.

Also erst einmal einen frischen ESP32 flashen, und danach auf ein Breakout-Board löten, Platzierung planen, PSU zusammen bauen und alles fliegend mit passenden Kabellängen verdrahten. Ich mag diese silikonummantelten Käbelchen, mit einer festen Seele drin. Die lassen sich gut in Form biegen und der Silikonmantel sich mit den Fingernägeln abreißen.

Das Problem mit der Stromversorgung

Um das Gerät mit Strom zu versorgen, habe ich winzige Li-Ion Ladegeräte mit Unterspannungsschutz, Überladungsschutz gekauft, an die ich eine 18650er Zelle hängen wollte. Das entspricht so ziemlich dem, was an Ladeelektronik, was so in einer handelsüblichen Powerbank verbaut ist. Inkl. der 4 Status-LEDs – die in diesem Fall auch noch furchtbar hell leuchten. Das dürfte dem Stromverbrauch nicht gerade zuträglich sein. Vermutlich sind diese sogar die größten Einzelverbraucher.

Doch das eigentliche Problem ist, dass der Strombedarf des ESP32 in den Idle-Zyklen zu gering ist. So schaltet der Laderegler einfach nach ein paar Minuten den Ausgang ab und der ESP ist aus und bleibt es. Interessanterweise passiert das nicht, wenn ich den ESP währenddessen vom Rechner aus pinge. Dann ist der Verbrauch dank der ständigen WiFi-Aktivität hoch genug. Allein dieser Umstand hat mich 2 graue Haare gekostet. Wenn ich den Knopf an dem Laderegler jedoch in regelmäßigen Abständen drücke, bleibt er an …

Naja, dann zieh ich eben noch ein Kabel vom ESP zum Laderegler und lass den Knopf (praktischerweise hat er auch ein Lötpad nebenan), alle paar Sekunden drücken – also auf GND ziehen… Nicht schön, aber selten. Dafür haben sich so zumindest die Überlegungen mit dem Deep-Sleep ganz von allein erübrigt.

Erfolgreicher Test zur Aufrechterhaltung der Ausgangsspannung des Li-Ion Lademoduls
Erfolgreicher Test zur Aufrechterhaltung der Ausgangsspannung des Li-Ion Lademoduls

Entsprechend wird noch eine zeitgestützte Aktion dem Code hinzugefügt:

time: - platform: homeassistant id: homeassistant_time on_time: # Every 10 seconds - seconds: /10 then: - logger.log: level: INFO format: 'Power button press' - output.turn_on: power_key - delay: 0.5s - output.turn_off: power_key
Code-Sprache: YAML (yaml)
Finaler Aufbau der Bilderrahmentechnik
Finaler Aufbau der Bilderrahmentechnik

Autor

Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein/e Beruf/ung, die weit über den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fuß und bietet mittlerweile professionelle Lösungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich beschäftigt er sich neben Computerspielen mit der Fotografie.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.