EPaper b/w/r Display "Fast" Update im b/w Betrieb

Bohnenhans

Commander
Registriert
Okt. 2022
Beiträge
2.321
Ich baue mir gerade eine neue Steuerung für 2 Rechner, deren Powerbutton ich eher nur schlecht erreiche.

Und dabei mehr oder weniger per Zufall als ich im Netz wegen eines Bugs der epaper Module gesucht habe gefunden, dass es wenn man die 3 farbigen ePaper Waveshare Displays im reinen schwarz weiss Modus betreibt die Updaterate ~ 7x schneller ist - verrückt.

ist zwar schade dass ich dann auf Rot verzichten muss aber ~ 1 Frame pro Sec ohne Flackern beim partial Update ist natürlich ein ganz andere Liga als ~ 5 sec mit Flackern auch bei kleinen Teilupdates was die im b/w/r Modus bei mir immer hatten.

Wollte ich nur mal sagen, falls jemand zufällig auch damit was macht, wenn auch nicht so wahrscheinlich - aber man weiss ja nie.
 
  • Gefällt mir
Reaktionen: matze313
Die 3 farbingen Display sind auch eher als "Preisschild" gedacht und nicht als Anzeige für häufig wechselnde Werte.

Warum also nicht auf eine Technik zurück greifen, die für den Einsatzzweck auch gedacht ist? LCD, LED, OLED?
 
Für low power gibt es zwei Display-Technologien:
1. e-ink
2. spezielle LCD mit speziellen treibern

In deinem Fall könnte eins dieser memory LCDs besser passen.
 
Naja ich habe mit halt einen "Sack" :D der 3-Farbigen gekauft, weil ich ab und zu halt mal auch z.B. eine Info oder Warnmeldung gerne haben können will - das brauche ich eher selten, aber manchmal hätte ich das halt gerne dass das etwas mehr auffällt.

e-ink ist doch epaper?

Ich finde die Ablesbarkleit halt super bei epaper und dass ich die immer sofort auf hibernate / powerdown stellen kann nach der Anzeige - bei System mit Akku/Batterie und Displayupdate nur alle 30 Sek oder so ist das halt extrem viel wert. Viele der kleinen Displays denke ich die ich habe sind > 90% der Zeit auf "powerdown"
 
Zuletzt bearbeitet:
eink ist Markenname bzw. Firma.
epaper heißt es bei Wettbewerbern.

Um die Frage ob eink ein Gattungsbegriff ist sollen sich die Juristen streiten.
 
  • Gefällt mir
Reaktionen: Bohnenhans
Bist du dir wirklich sicher, dass das die richtige Technologie für den Anwendungszweck ist? Wie sieht es mit deinem Energieverbrauch aus? Wir nutzen aktuell ca. 6.500 solcher Labels für die Logistiksteuerung bei uns im Unternehmen. Diese sind mit zwei Batterien für eine Dauer von 7 Jahren ausgelegt, bei 20 Änderungen am Tag. Wenn du jetzt diese Infos alle Sekunde änderst, dann hast du ja jede Menge Schaltvorhgänge/Tag.
 
Ich update z.B. alle 20 Sekunden die Anzeige mit aktuellen Werte - oder nach Bedarf wenn eine Taste gedrückt wurde etc., das aber vernachlässigbar.

99% sind kleine Partial Updates.

ePaper DIsplay verbaucht dann pro Minute für maximal ~ 5 Sekunden Strom und ist 55 Sekunden abgeschaltet - ein anderes (O)LED Display verbraucht pro Minute die vollen 60 Sekunden Strom also 12x länger.

Wenn sich die Werte nicht ändern - z.B. hier bei dem Display über Nacht - dann braucht das epaper Display ~ 12h doch gar keinen nennenswerten Strom (der Controller wird doch im Hibernate im kleinen µA Bereich sein), denn dann werden die Anzeigewerte nicht upgedated und ich gebe natürlich auch nichts neues aus und hole das ePaper Display auch nicht aus dem Powerdown Modus
 
Zuletzt bearbeitet:
Mir ist die Funktionsweise dieser Displays wie gesagt bekannt, sonst hätte ich auch nicht eine so hohe Stückzahl im Einsatz. Es ist aber trotzdem ein Unterschied ob 20 Änderungen/Tag oder alle 30 Sekunden.

Es ist ja eine ganz einfache Rechnung. Bei 7 Jahren sind das 51.100 Displaywechsel, wenn wir jetzt davon ausgehen, dass wir nur 12h lang jede Minute updaten, dann sind es bereits 720 Wechsel/Tag. Das Problem ist bei den Displays ja auch, dass man nicht nur teilweise updaten kann, sondern immer das ganze Display einmal angesprochen wird, was hast du für welche im Einsatz? Wir nutzen hier welche von Vusion. Bei denen gibt es aber immer wieder Herausforderungen wenn man mal einen größeren Schwung (1.000 Charge) an Batterien benötigt.
 
Ich nutze die einfachen Waveshare 2,13"(?) (ich hab aber auch ein 4,2" und ein 7") ungefähr die Grösse der Preisdisplays im Supermarkt. 2 davon sind auch ein paar Jahre alt, das nichts neues oder so.

Und die können partial updates - glaube das können alle Waveshares.

Wie gesagt ich mache nur eine Update wenn die Daten die angezeigt werden sich verändert haben und dann nur in dem Bereich in dem die Werte sich geändert haben (~ 10% des Displays) - ansonsten nicht.

Das partial Update hat halt jetzt durch den Verzicht auf "rot" den Vorteil man sieht gar nicht dass der Bereich upgedated wird - bei sonstigen Updates habe ich immer diesen "Inverter" Effekt - der ist hier gar nicht zu sehen

Hier mal ne schnelle "Uhr" die die stunden und Sekunden anzeigt - wer braucht schon Minuten :D
aber soll ja in Echzeit tun damit man sieht wie doch fix das mit den partial Updates tut wenn man nur Teildaten neu anzeigen muss.

Das Update erfolgt hier nur im Textbereich der Uhr +/- ein paar Pixel, glaub das wird horizontal durch 8 geteilt.
 

Anhänge

  • epaperclock.mp4
    210,3 KB
Zuletzt bearbeitet:
Ja gut die Anforderungen habe ich nicht, wir haben nur eine Datamatrix und zwei Zeilen Text, daher können wir ruhig es komplett anpassen. Ich hoffe lässt hier mal einen Beitrag in 6 Monaten, wie die Batterielebensdauer sich verhält, normalerweise kann man ja das auslesen aus den Displays.
 
Ich betreibe das in dem Fall angeschlossen an einen ESP32 S3 der gleichzeitig über WiFi Daten sammelt von smarten Steckdosen und über MQTT Daten verschickt und mitliest - und auch als USB HID Emulation arbeitet - ich habe bisher nur das Delta gemessen mit und / ohne Display wobei der identische Programmcode läuft - das Display hatte ~ 0,25% des Gesamt-Stromverbrauchs ausgemacht, das also in der Anwendung eh egal :D

Meine Zusatzanzeige für die PV Anlage läuft seit 1,5 Jahren mit einem 2000 mAh Akku @ 5V und einem 4,3" Waveshare - Daten werden alle 15 Min geholt und dann der ESP32 für 15 Min in den Super Deep Sleep gesetzt. Keine Ahnung wann der Akku leer ist :D

Ich finde halt die ePaper Displays super wegen der Abslesbarkeit und weil man sie in den PowerDown Modus schicken kan - vor allem jetzt wo ich weiss wie schell die b/w/r Displays im b/w Modus sind wenn man Teilbereiche aktualisiert. 1 Frame / sec reicht mir für viele "Echtzeit" Daten.

Eine echt tolle Sache wer die erfunden hat
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Homoioteleuton
Ich verwende hier eine Lösung, welche über WLAN läuft, welches aber nicht im 2,4 oder 5 GHz läuft, damit es keine Störung bei du Vielzahl an Labels gibt. Alle zwei Minuten holt sich die MariaDB die Änderungen von der SQL Datenbank des Navisions. Da auch Labelgrößen und deren Auflösungen ausgelesen werden können, lasse ich das Layout dynamisch anpassen, ohne dass ich mir Gedanken machen muss, was für ein Display der Nutzer eingebunden hat. Bei der Vielzahl an Labels wäre auch eine Akkulösung undenkbar, wie oft soll ich da laden.
 
Bei mir ist das ja nur daheim und im Büro im Einsatz. Bei den Microcontrollern ist halt 2.4 Ghz noch am weitesten verbreitet

Das sind ja hier nur so kleine Anzeigen oder Steuerungen für die Hausautomation, die ich halt nach und nach bastle wenn ich mal Zeit und Lust hab

Nach so 20x4 lcd, dann oled bin ich halt jetzt bei epaper und mit den partial updates sind die halt für mich jetzt auch schnell genug für "live" Daten
 
Zuletzt bearbeitet:
Ich wäre auch interessiert!
Bei meinen letztem Versuch mit e-ink und esp-32 konnte man keine partial updates machen, das war extrem nervig...
 
Ja - wie gesagt bei mir gehen die Partial Updates bei meinen b/w/r Display wenn ich das als b/w Display "falsch" definiere - ich habe allerdings nur e-ink Display von Waveshare (als SPI 4-wire)

Und das sind alle b/w/r Displays (2,11" 4,2" und 7") - so dass ich das Verhalten der b/w Display nicht kenne wie schnell da die (partial) updates sind

Bei mir im b/w Modus echt für epaper schnell mit dem Reset Pulse auf 2 ms - siehe setup()

Anbei mal ein kleines Video in "Echtzeit" wie sich die Wattanzeige ändert. DIe pixelige Darstellung kommt halt weil ich das hier extrem komprimiert habe :schaf:

Der ganze Code ist ja sicher uninteressant weil ja vermutlich niemand das gleiche braucht und sinnvoll nutzen kann :D

Aber das partial update ist ja eigentlich super einfach

Eigentlich nur display.setPartialWindow(x,y,breite,hoehe)
das Partialwindow "hoehe" wird irgendwie in Segmente abgerundet (denke ~ /8 Pixel) da muss man dann halt ein wenig try an errorn dass das zum Layout passt.

und dann erfolgt die Ausgabe an koordinaten absolut wie fullscreen.

Von mir fürs Display benutzte Libraries

Code:
...
#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include "GxEPD2_display_selection.h"
....



1. im Bereich setup() (DebugEnabled ist bei mir immer ein Define ob ich Debugausgaben anmache oder nicht) 2 ms funktioniert bei allen meiner Waveshares egal welche Grösse.

Code:
....
   #ifdef DebugEnabled
      display.init(115200, true, 2, false);
   #else
      display.init(0, true, 2, false); // Waveshare sollte 2ms reset pulse passen
   #endif
....


2. Exemplarisch mal eine Funktion die ein partial Update macht hier die Watt-Ausgabe

Code:
void drawWattage(uint8_t _myIndex)
{
   String myWattString = String(mySystem[_myIndex].Wattage) +  " Watt";
   if (mySystem[_myIndex].Wattage < 0)
      myWattString = "-";
   if (mySystem[_myIndex].Voltage == 0)
      myWattString = " ";

   if (myWattString == mySystem[_myIndex].OldWattDisplay)
      return;
   mySystem[_myIndex].OldWattDisplay = myWattString;
   display.setRotation(myDisplayRotation);
   int16_t tbx, tby; uint16_t tbw, tbh;
   display.setFont(&FreeMonoBold9pt7b);
   display.getTextBounds(myWattString.c_str(), 0, 0, &tbx, &tby, &tbw, &tbh);
   if (myTextFont9Height > tbh)
      tbh = myTextFont9Height;
   tbx = (display.width() / 4) - (tbw / 2) + (_myIndex * (display.width() / 2));
   display.setPartialWindow(4 + (_myIndex * (display.width() / 2)-1), mySystem[_myIndex].Display_Watt_Y_Pos -(tbh), display.width()/2-6, tbh*1.25);
 
   display.firstPage();
   do
   {
      display.fillScreen(GxEPD_WHITE);
      display.setTextColor(GxEPD_BLACK);
      display.setCursor(tbx, mySystem[_myIndex].Display_Watt_Y_Pos);
      display.print(myWattString.c_str());
   } while (display.nextPage());
   display.powerOff();
}
 

Anhänge

  • mqttpower.mp4
    119 KB
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dms und Der_Picknicker
Ja ich habe nur Waveshare aber jetzt nicht aus einem so besonderen Grund. Hihi dehslkab habe ich mir ja auch im Kommentar schon vermerkt dass die 2 ms reset pulse nur auf meinen Waveshares getestet habe - sonst wunder ich mich evtl wenn das bei anderem Display nicht tut und such den Fehler ewig.

Die gibt es halt finde ich relativ oft bei so Elektronik Versendern - ich kaufe meistens die mit Raspberry Anschluss mit zusätzlich dran, auch wenn ich die dann doch meist am ESP über SPI nutze.

Aber ich weiss halt nie zum Zeitpunkt des Kaufes vielleicht will ich ja doch mal eines auf den Raspberry stecken z.B., für OctoPrint oder sowas - dann will ich das schon daheim haben :D

Und so riesige Massen kauf ich auch nicht, dass der Preis dann so extem wichtig ist im Vergleich zur universelleren Nutzbarkeit.

Die Bastelkiste muss halt im Idealfall schon das drin haben was ich brauche, wenn ich mal was basteln will, denke das kennt doch fast jeder oder?
 
Zuletzt bearbeitet:
Naja ich hab das jetzt soweit fertig jetzt muss ich nur noch das Gehäuse häkeln :D

Das halt so nen kleines Bedienpanel für 2 Rechner deren EInschalter ich nur schlecht erreichen kann - mit 2 Tastern schalte ich 2 Tasmota Steckdosen, lesen den Verbrauch aus und fahre die Rechner per Knopfdruck sauber über MQTT herunter.

Ne Uhr ist natülich auch drin :D :D die mir dann so ein paar Sekunden auf Knopfdruck die Uhrzeit anzeigt und OTA Updates gehen natürlich auch - weil das halt so einfach ist mit den fertigen Libraries

--------------------

Noch ein kleiner Nachtrag:

Ich habe jetzt noch ein wenig rumgespielt ud ein paar "Fullscreen Partial Updates" eingebaut :D z.B. beim Umschalten auf die Uhrzeitanzeige oder die "Infoscreens". Es bleiben ganz winzige NegativBilder der bisherigen Anzeige, die man aber kaum erkennt, und mich bei den Anzeigen überhaupt nicht stören - dafür kann man praktisch instant den kompletten Screen switchen.... für die "Normalanzeige" mache ich aber einen
Komplettrefresh.

Dass die Uhr wobbelt liegt daran dass der Font mit ":" wohl einen Pixel weiter nach unten geht als nur ZUahlen bei dem Font - und ich dynamisch zentriere - aber finde den Effekt ganz witzig und zeigt ja auch dass immer der komplette Screen neu gezeichnet wird.
 

Anhänge

  • mqttpower.mp4
    1,7 MB
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Der_Picknicker
Zurück
Oben