E-Paper Home Assistant Dashboard – Teil 1

In diesem Technik-Blog-Beitrag geht es um ein spannendes Projekt:
Ein E-Paper Dashboard, das über Node-Red mit dem Home Assistant kommuniziert. Das Dashboard zeigt eine Fülle an Informationen an, darunter das aktuelle Wetter, Temperaturanzeigen, Kalendereinträge, Strom- und Wasserverbrauch, der aktuelle Standort der Hausbewohner, Akkuanzeigen und sogar die aktuellen Spritpreise.

Der E-Paper Driver, der für das Dashboard verwendet wird, arbeitet mit einem ESP32, der sich über WLAN mit dem lokalen Netzwerk verbindet und die Daten im JSON-Format über MQTT überträgt. Der Home Assistant bietet eine einfache Möglichkeit, die Daten zu verarbeiten und an das E-Paper Dashboard zu senden. Ebenfalls ist der E-Paper Driver ist für den Batteriebetrieb optimiert und verbraucht im DeepSleep nur 40uA, was bedeutet, dass das Display für mehrere Monate mit einem Akku betrieben werden kann. Das E-Paper Display ist nicht nur extrem energiesparend im Vergleich zu LC-Displays, sondern es ist auch bei normalem Tageslicht leicht ablesbar. In diesem Beitrag werde ich alle weiteren Details zu diesem faszinierenden Projekt erläutern.

Die Idee

Die Idee, ein EPaper Dashboard zu entwerfen, entstand aus dem Wunsch heraus, die wichtigsten Daten des SmartHome-Systems auf einen Blick darzustellen. Der Home Assistant bietet zwar eine gute Übersicht im Browser und in der App, aber man möchte nicht ständig das Notebook oder das Handy nutzen, um die Daten abzurufen. Das E-Paper Display erschien mir als die ideale Lösung, da es nicht nur schick aussieht, sondern auch extrem stromsparend ist. So können Daten wie Wettervorhersage, Termine oder Raumtemperaturen jederzeit und ohne großen Stromverbrauch abgerufen werden. Mein Ziel war es, einen E-Paper Driver zu entwickeln, der mit dem Home Assistant verbunden ist und somit eine nahtlose Integration ins SmartHome-System ermöglicht.

Hardware

E-Paper Display

Ich habe mich für den Einsatz von Waveshare E-Paper Displays entschieden, da sie nicht nur relativ kostengünstig sind, sondern auch in kompatible Gehäuse eingebaut werden können. Mein persönliches Dashboard wird von einem 7,5 Zoll (19,05 cm) E-Paper Display mit einer dreifarbigen Anzeige in Schwarz, Rot und Weiß dominiert.

Das E-Paper benötigt keine Hintergrundbeleuchtung und kann den letzten Inhalt lange anzeigen, auch wenn das Gerät ausgeschaltet ist. Es hat einen extrem niedrigen Stromverbrauch und benötigt im Grunde nur Strom zum Auffrischen. Außerdem verfügt es über eine SPI-Schnittstelle, die eine einfache Verbindung zu Controller-Boards wie dem Raspberry Pi, Arduino, STM32 oder ein meinem Fall, dem ESP32, ermöglicht.

Spezifikationen

BETRIEBSSPANNUNG3,3V
SCHNITTSTELLE3-Draht-SPI, 4-Draht-SPI
BILDSCHIRMGRÖSSE170,2 × 111,2 mm
ANZEIGEGRÖSSE163,2 × 97,92 mm
PUNKTABSTAND0,205 × 0,204 mm
AUFLÖSUNG800 × 480 Pixel
ANZEIGEFARBErot, schwarz, weiß
GRAUSTUFEN2
VOLLE AUFFRISCHUNGSZEIT16 Sekunden
REFRESH POWER48 mW (typ.)
STANDBY-STROM<0,01 uA (fast keine)
BLICKWINKEL>170°

ESP32 E-Paper Driver

Zur Ansteuerung des Displays habe ich eine Treiber-Platine entworfen.
Diese beinhaltet folgende grundlegende Funktionsteile:

  • USB zu UART IC (FT231XQ)
  • E-Paper Treiberschaltung
  • lineares Batterie-Ladungsmanagement (MCP73831)
  • LDO-Festspannungsregler (XC6220)
  • Treiberschaltung für die Spannungsmessung ohne Stromentnahme (no current drain)
  • ESP32 (WROOM-32E 8MB) als MCU
3D Ansicht (KiCad) vom E-Paper Driver

Ich neige dazu, mich bei meinen PCB-Designs immer für ungewöhnliche und spezielle Lösungen zu entscheiden, aber in diesem Fall wurde ich dazu gezwungen. Das Gehäuse des E-Paper-Displays bietet keine Möglichkeit, die Platine sicher zu befestigen, und die Kräfte, die beim Einstecken des USB-Kabels auf die Platine wirken, sind nicht zu vernachlässigen. Trotzdem war es mir wichtig, dass die Platine im Gehäuse einen guten Halt hat. Deshalb habe ich die Aussparungen so gestaltet, dass die Platine später am Rand und auf dem Display verklebt werden kann. Zur Anzeige des Ladezustands wurde eine reverse LED in Richtung der Frontplatte gesetzt.

Komplettierung des E-Paper Dashboards

Zur Vervollständigung habe ich das Display in den Frame gelegt und mit Kapton Klebeband fixiert. Anschließend klebte ich mit doppelseitigem Klebeband die Treiber-Platine auf das Display. Ich werde demnächst geeigneten Kleber besorgen, um Display und Platine ordentlich zu montieren.
Der Lithium-Akku wurde ebenfalls auf das Display geklebt und mit Kapton fixiert. Das Foto wurde im Zeitraum der Inbetriebnahme aufgenommen und zeigt damit nicht das endgültige Ergebnis.

Das Case verfügt am vorderen Frame mehrere vordefinierte Bohr-Soll-Stellen. Eine davon habe ich für die Anzeige der Lade-LED vorgesehen und mit einem 1 mm Bohrer vorsichtig geöffnet.

Draufsicht auf die Innenseite E-Paper Dashboards
Seitenansicht

Bestandteile der Schaltung

Spannungsversorgung

Die Treiber-Platine ist für eine maximale Spannung von 5V ausgelegt und wird über den USB-Konnektor mit bis zu 500mA versorgt. Bei einem Kurzschluss wird die zurücksetzbare Polyfuse aktiviert. Die Platine kann entweder dauerhaft über USB oder einen Lithium-Akku betrieben werden. Im Schlafbetrieb verbraucht die Platine lediglich 40uA, wodurch bei einem entsprechend dimensionierten Akku Betriebszeiten von mehreren Monaten möglich sind.

USB zu UART Converter

Der E-Paper Driver besitzt einen FTDI FT231XQ USB zu Serial Konverter und dient als Schnittstelle zwischen PC und dem ESP32.
Dies bietet die Möglichkeit, die Software auf den ESP32 zu flashen und sekundär als serielle Debug Möglichkeit für die (Weiter-)Entwicklung der Software.

Des Weiteren wurde eine Auto-Reset-Schaltung integriert. Damit ist es möglich, den ESP32 bequem aus der ARDUINO IDE zu flashen.

Lade-Elektronik (Batterie-Management-System)

Der Lithium-Akku wird geladen, sobald die Platine mit einem USB-Port verbunden wird. Der maximale Ladestrom des MCP73831 beträgt 500mA und bietet zudem gleichzeitig mehrere Schutzfunktionen, z. B. gegen Rückwerts-Entladung, thermische Überlastung und die automatische Stromabschaltung.

Ladungspumpe

Ein großer Teil der Schaltung macht den Steuerteil des Displays aus. Hier wird eine Ladungspumpe verwendet. Für diesen Teil habe ich mich an die Referenz-Schematik aus dem Datenblatt vom Display gehalten.

Spannungsregler

Bekanntlich arbeitet der ESP32 mit 3.3V und würde bei einer USB Spannung von 5V sterben. Auch die nominale Zell-Spannung des Akkus von 3.7V ist zu hoch. In diesem Zusammenhang ist ein Spannungsregler notwendig. Meine Wahl war der XC6220, welcher gerade für den Low Power Bereich gute technische Eigenschaften aufweisen kann. Eine extrem niedrige Dropout-Spannung von ca. 20mV bei 100mA und ein automatischer Energiesparmodus ist für diesen Anwendungsfall optimal.

Automatische Spannungsumschaltung

Das Batterie-Lade-IC (MCP73831) darf während des Entladens nicht gleichzeitig geladen werden. Aus diesem Grund verwende ich mit ein paar wenigen Bauteilen eine Spannungsumschaltung. Sobald die Platine mit USB verbunden ist, wird der Akku geladen und der USB-Port übernimmt die primäre Stromversorgung für Lade- und Arbeitsstrom. Sobald die USB-Verbindung unterbrochen wird, bezieht die Platine den Strom aus dem Akku.

ADC Spannungsmessung

Die Messung der Batteriespannung erfolgt prinzipiell über einen einfachen Spannungsteiler, mit dem Nachteil, dass die Batterie dauerhaft entladen wird. Um dies zu verhindern, wurde dieser Teil mit einer MOSFET-Stufe abgeändert und kann nur zur Messung mit einem GPIO vom ESP32 aktiviert werden.

Stromverbrauch

Die Stromaufnahme der Treiber-Platine ist ein bedeutendes Thema, da die Gesamtlaufzeit des Displays davon abhängt. In einigen Anwendungsfällen ist eine dauerhafte Stromversorgung nicht möglich, daher war es für mich wichtig, stromsparende Komponenten zu wählen. Die Zusammenarbeit von Hard- und Software ist entscheidend für die Akkulaufzeit eines Geräts mit begrenzter Kapazität. Der größte Stromverbrauch tritt bei der Netzwerkverbindung und der Aktualisierung des Dashboards auf. Um dies zu minimieren, ist es wichtig, eine schnelle Verbindung zu gewährleisten, den Code schlank zu halten und unnötige Hardware zu deaktivieren.

Messung bei Display-Refresh

Die Messung bezieht sich auf den Vorgang des Aufwachens des E-Paper Treibermoduls sowie der Datenbeschaffung und Aktualisierung des Displays. Dieser Vorgang beansprucht fast 20 Sekunden und verbraucht durchschnittlich ca. 51mA Strom. Besonders die Aktualisierung des Displays führt zu einem erheblichen Stromverbrauch, da dieser Prozess etwa 16 Sekunden in Anspruch nimmt.

Messung im Tiefschlaf

Der Stromverbrauch im Tiefschlaf ist daher umso besser und beträgt gerade einmal 25.7uA. Nicht wundern, die Einheit auf dem Bild ist aufgrund des eingestellten Messbereiches am Messwandler falsch.

Akkulaufzeit

Die Laufzeit des Akkus bei diesem Projekt hängt stark von der Kapazität des Akkus und der Häufigkeit der Aktualisierung des Displays ab. In meinem Fall habe ich mich für einen Lithium-Akku mit einer Kapazität von 6000mAh und einem Aktualisierungsintervall von 15 Minuten entschieden. Der gemessene durchschnittliche Stromverbrauch beträgt etwa 1,13 mA.

Das Ergebnis meiner Berechnung ergab eine Dauer von 222 Tagen, das entspricht mehr als 7 Monaten. Super!

Kommunikation und Datenaustausch

Funktionsweise

Der ESP32 ist das Steuerungsmodul für den E-Paper Driver und verbindet sich über das lokale WLAN-Netzwerk für den Datenaustausch. Sobald eine Verbindung zum Router oder Access Point hergestellt wurde, wird eine weitere Verbindung zu einem MQTT-Broker aufgebaut. Wenn auch dieser Schritt erfolgreich ist, sendet das E-Paper ein Lebenszeichen über ein Topic an den MQTT-Server.

In Node-RED wird dieses Lebenszeichen gefiltert und löst den Nachrichtenfluss zum E-Paper aus. Dabei werden alle Sensoren im Home Assistant und in den Nodes ausgelesen und anschließend im JSON-Format über MQTT an das E-Paper gesendet. Sobald die Daten am E-Paper angekommen sind, werden sie intern weiterverarbeitet und das Dashboard aktualisiert. Anschließend geht das Display in den Tiefschlafmodus und bleibt für eine definierte Zeit in diesem Zustand.

Wenn eine dauerhafte Verbindung zum Server gewünscht ist, kann der Tiefschlafmodus deaktiviert werden. Dadurch wird der Akku schneller entladen und es empfiehlt sich, eine permanente Stromversorgung bereitzustellen.

Datenstruktur Lebenszeichen (E-Paper -> Node-Red)

Lebenszeichen werden bei jedem Start des ESP32 oder nach einer definierten Zeit übertragen, letzteres funktioniert nur mit deaktivierten Tiefschlaf.
Jedes Lebenszeichen enthält folgende Daten im JSON Format:

Datenstruktur Dashboard (Node-Red -> E-Paper)

Die Datenstruktur für die Dashboard-Daten wird wie beim Lebenszeichen ebenfalls gut lesbar im JSON Format übertragen.

Das Dashboard habe ich in folgende Areas unterteilt:

  • Header für die Refresh-Zeit, IP-Adresse ESP32, WLAN Signalanzeige, Akkuanzeige
  • Aktuelle Wetteranzeige
  • Wettervorhersage der nächsten 3 Tagen
  • Area 0 mit 4 Zeilen, teilweise zweifarbig
  • Area 1 mit 4 Zeilen, teilweise zweifarbig
  • Area 2 mit 2 Zeilen, teilweise zweifarbig
  • Area 3 mit 4 Zeilen
  • Area 4 mit 2 Zeilen und 2 Spalten
  • Balkenanzeige z. B. für den Energiebedarf der letzten Tage
  • Kalender mit Titel und Zeitangaben

Die Icon-IDs können aus dieser Liste entnommen werden.

ID Icons Liste

Dies ist die aktuelle Liste aller Icons, welche über das JSON konfiguriert werden können.
Ich werde diesen Bereich demnächst erweitern und neue Icons hinzufügen.
Quelle: pictogrammers

Funktionstest

Zur Überprüfung der Funktionalität des JSON-Strings bietet sich die Verwendung eines MQTT Clients an. Persönlich bevorzuge ich den MQTT Explorer. Damit dies funktioniert, muss der Source-Code des E-Paper-Drivers entsprechend angepasst werden, indem die #define-Anweisung für den DeepSleep auskommentiert wird. Dadurch wird eine dauerhafte Verbindung zum MQTT Broker aufgebaut.

Um das Dashboard zu testen, müssen nicht alle Teile des JSON-Strings übertragen werden. Eine Teilaktualisierung reicht aus, wie sie beispielsweise im MQTT Explorer dargestellt wird. Dadurch kann die Übertragung und Aktualisierung des Dashboards getestet werden.

Ausschnitt des JSON-Strings für das aktuelle Wetter:

Der JSON-String kann im MQTT Explorer, im Fenster „Publish“, eingefügt werden. Mit dem richtigen Eintrag des Topics kann die JSON Nachricht mit dem Klick auf „Publish“ an den E-Paper Driver gesendet werden.

Node-Red Integration – Teil 2

Ist in Arbeit…

Home Assistant Integration – Teil 3

Ist in Arbeit…

Dokumente

Den Source-Code und weitere Dokumente habe ich in meinem GitHub Repository zur Verfügung gestellt.

28 Gedanken zu „E-Paper Home Assistant Dashboard – Teil 1“

  1. Hallo Martin,
    Ich finde dein Projekt sehr cool. Bin gerade am Anfang mit dem entwerfen von eigenen Platinen im ESP8266 Umfeld. Was mich sehr interessieren würde, wäre ein Ausschnitt deiner automatischen Spannungsumschaltung. Hier stoße ich immer wieder auf komplexe Schaltungen. Vlt kannst du ein paar Worte drüber verlieren 🙂

    Antworten
  2. Hallo Martin,

    für deinen ESP32 E-Paper Driver würde ich mich auch interessieren. Wie hoch schätzt du den Verkaufspreis und wann denkst du, wird es so weit sein?

    VG
    Sebastian

    Antworten
  3. Hallo,
    sehr schöne Sache. Ich bin noch nicht so fit mit Homeoffice und ESP. Wie programmiere ich denn das über Node-Red? Läuft das auf dem ESP über die Arduino IDE? Wie siehr der Code aus. Und im HA braucht es dann einen Eintrag in die configration.yaml? Wie sieht das aus?

    Gruß Tom

    Antworten
  4. Der Artikel klingt wirklich vielversprechend – die Gestaltung des Displays finde ich sehr gut. Ich habe mit HomeAssistant/ESPHome und den „Waveshare-Teilen“ ein ähnliches Display aufgebaut. Eine „portable“ Version mit der angepassten Platine wäre ideal – bitte unbedingt informieren, sobald so eine Platine zur Verfügung steht. Läuft die Programmierung ähnlich wie für das „ESP32-Driver-Modul“ ab?

    Antworten
  5. Hallo habe sow was ähnliches gebaut.
    Meine Source ist leicht zu ändern.
    Es hätte eine Infotafel für die Gemeinde werden sollen. Das Projekt wurde jedoch abgebrochen. Der Stromzufuhr, Internet,… auf 8 Standorten war mir dann zu Aufwendig zu Installieren und in Betrieb zu halten.

    Nun sind sie frei für HA

    Tel.Nr. +43 6643001793 Für WhatsApp oder…

    Antworten
  6. Das sieht alles sehr interessant und gut durchdacht aus!
    Könntest Du bitte noch den Schaltplan (und evtl. auch das Layout) der Treiberplatine veröffentlichen.

    Antworten
    • Hi Andy,
      vielen Dank für deinen Kommentar.
      Den Schaltplan habe ich im Moment mit Absicht noch nicht veröffentlicht.
      Ich habe noch ein paar Fehler zu beseitigen. Die neue Platine muss noch getestet werden – anschließend erfolgt die Freigabe zur Open Source Nutzung.

      VG Martin

      Antworten
  7. Hey,

    mal nachgehört gibt es hier etwas neues gerade Teil 2 und Teil 3 würde mich interessieren da ich ebenfalls nach einer Lösung mit MQTT schaue und gerade das Aufgeräumte Display mir gut gefällt?

    Lg
    Torsten

    Antworten
    • Hallo Martin,

      es wäre wirklich toll, wenn es bald die weiteren Teile zu deinem Projekt gibt und die Platine gekauft werden kann.

      Viele Grüße

      Markus

      Antworten
  8. Hi Martin,
    This project is fantastic, and I am thrilled to know more details. I personally just finished one following other instructions with a waveshare 7.5″ e-paper driver board.

    Antworten
  9. Auch von mir ein großes Lob für die sehr professionelle Umsetzung, ich spiele auch mit dem Gedanken, etwas e-Paper basiertes einzusetzen. Was mich echt interessieren würde, wie sieht der Refresh aus, grade in Bezug auf die Uhr oben links?

    Könntest Du evtl. ein Vid auf youtube stellen oder so? Kann mir das so gar nicht vorstellen.

    Vielen Dank und Grüße, mach weiter so, Joachim

    Antworten
  10. Hi Martin,
    interessantes, informatives und top bearbeitetes Projekt.
    Da bleibe ich mal drann. Ich interessiere mich sehr für die Darstellung auf dem EPaper. Ich selber beschäftige mich mit Node Red und habe eine „Wohnungsautomatisation“ mit den unterschiedlichsten Komponenten (Aqara, HUE, Ikea) auf Basis eines Raspberry und Zigbee2mqtt realisiert. Google Kalender, Telegramm, Openweather, SQLite nutze ich ebenfalls.

    Bin auf die weiteren Infos in deinem Projekt gespannt.
    Toll Gruß Jörg

    Antworten
    • Hallo Jörg,
      vielen Dank, das freut mich sehr.
      Sehr gerne, schau einfach ab und zu vorbei. Die nächsten Teile für die Integration folgen demnächst und es sind auch schon weitere Projekte in der Pipeline.

      Das klingt bei dir auch alles sehr spannend, auch was Zigbee angeht. Die Integration mit dem Google Kalender hatte auch so seine Schattenseiten, aber es funktioniert jetzt.

      Und wenn du Vorschläge hast, dann gerne her damit. 😉

      VG Martin

      Antworten

Schreibe einen Kommentar

Cookie Consent mit Real Cookie Banner