ESP32 mit 7,5 Zoll epaper-Display als Anzeige

Begonnen von smmmo, 13 Mai 2018, 21:28:36

Vorheriges Thema - Nächstes Thema

smmmo

Hallo,

eine Weile lang hatte ich einen Kindle zur Darstellung von Temperatur-Werten aus fhem im Einsatz. Leider war die Lösung bei mir a) nicht sehr stabil und b) kommt man nur schwierig an jailbreak-empfängliche Geräte. Daher habe ich schon länger auf bezahlbare epaper-Lösungen gewartet, bei denen man zudem ohne Hacks an Ziel kommt.

Dann kam der c't-Artikel "Ausdauernde Infotafel - Drahtloses Türschild mit E-Paper-Display" und das damit verbundene Projekt DoorsignEPD. Damit ist es recht einfach möglich, fhem-seitig die bisherige Kindle-Lösung zu nutzen. Und noch besser: Nicht einmal Löt-Kenntnisse sind erforderlich.

Verwendete Teile:
- ESP32: AZDelivery ESP32 NodeMCU Module Wlan Wifi Development Board mit CP2102 (Nachfolgermodell zum ESP8266). ca. 15 Euro.
- epaper: Waveshare 7.5 Inch E-Paper Display HAT Module Kit 640x384 Resolution 3.3v E-ink Electronic Paper Screen with Embedded Controller. ca. 60 Euro.
- Bilder-Rahmen

Ergebnis: siehe Bild im Anhang (Die Namen meiner Geburtstagsliste habe ich geschwärzt, daher die schwarzen Balken auf dem Foto).

Vorgehen zur Installation:
- Verkabeln von ESP32 und epaper
- Software mittels "Arduino IDE" auf den ESP32 bringen: DoorsignEPD
- Genau wie bei der Kindle-Lösung ein svg-file mit Text-Variablen erstellen und in fhem per FReplacer diese Text-Variblen durch konkrete Werte ersetzen lassen. Ist alles im Kindle-Wiki-Eintrag beschrieben.
- DoorsignEPD lässt es, zu einen Pfad zum generierten png anzugeben, das dann regelmässig (Dauer konfigurierbar) neu geladen wird. Das png muss zur Darstellung für's epaper noch umgerechnet werden, aber das dazu nötige Skript kommt schon bei DoorsignEPD mit.
- Sobald alles läuft: epaper im Bilderrahmen unterbringen

Was aktuell bei mir noch verbesserungsbedürftig ist, ist die pixelige Darstellung des Texts.
Meine Lösung hängt ausserdem dauerhaft per USB am Strom. Da kann man natürlich auch schöner lösen, aber dafür fehlen mir die Bastler-Kenntnisse.

Falls jemand Interesse hat, kann ich gern noch weiter ins Detail gehen.

Grüße
smmmo

Update vom 30.06.2019:
Eine ausführliche Anleitung von bart0190 findet ihr hier: https://forum.fhem.de/index.php/topic,87778.msg953828.html#msg953828

pc1246

Moin
Sehr interessant! Warum hast du es nicht auch, wie die ct', mit einer/m Batterie/Akku geloest?
Kann man die Qualitaet nicht angeben beim Berechnen?
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

smmmo

Hallo,

bezgl. Akku/Batterie war die Beschreibung im c't-Artikel einfach zu knapp für mich bzw. und mir fehlt das KnowHow, was ich zu tun und zu beachten habe. Dachte schon daran, eine einfache Powerbank per USB dranzuhängen, aber es hat sich herausgestellt, dass die sich (wegen des niedrigen Stromverbrauchs vom ESP32?) einfach abschaltet.

Die Berechnung des png mache ich aktuell so:

inkscape -z -e /opt/fhem/www/images/Basi_generated.png -w 2560 -h 1536 /opt/fhem/www/images/Basi_generated.svg

Heraus kommt damit:

Area 0:0:640:388 exported to 2560 x 1536 pixels (380,041 dpi)

Die Auflösung noch höher zu drehen, bringt leider nichts. Evtl. muss ich eine andere Schriftart nehmen, die sich besser skalieren lässt?

Grüße
smmmo

gloob

Ich hänge mich mal zum lauschen mit dran.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

nils_

lese auch mal mit....


das display hab ich auch zu Hause rumliegen, aber bisher noch keine zeit gehabt damit was zu basteln  :-\
viele Wege in FHEM es gibt!

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

Bapt. Reverend Magersuppe

Könnte man nicht den ESP selber die Anzeige rendern lassen?
Der soll doch recht potent sein.
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

pc1246

Zitat von: smmmo am 14 Mai 2018, 13:16:10
Hallo,

bezgl. Akku/Batterie war die Beschreibung im c't-Artikel einfach zu knapp für mich bzw. und mir fehlt das KnowHow, was ich zu tun und zu beachten habe. Dachte schon daran, eine einfache Powerbank per USB dranzuhängen, aber es hat sich herausgestellt, dass die sich (wegen des niedrigen Stromverbrauchs vom ESP32?) einfach abschaltet.

Die Berechnung des png mache ich aktuell so:

inkscape -z -e /opt/fhem/www/images/Basi_generated.png -w 2560 -h 1536 /opt/fhem/www/images/Basi_generated.svg

Heraus kommt damit:

Area 0:0:640:388 exported to 2560 x 1536 pixels (380,041 dpi)

Die Auflösung noch höher zu drehen, bringt leider nichts. Evtl. muss ich eine andere Schriftart nehmen, die sich besser skalieren lässt?

Grüße
smmmo
Moin
Mal ne kurze Frage: Warum vervierfachst du die Aufloesung, oder verstehe ich da etwas falsch? Wer rechnet das zurueck?
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

smmmo

Zitat von: pc1246 am 15 Mai 2018, 06:57:41
Warum vervierfachst du die Aufloesung, oder verstehe ich da etwas falsch? Wer rechnet das zurueck?
Wenn ich mein svg (640*384) per inkscape mit exportiere, wird es sehr blurry. Durch das Vervierfachen erhalte ich eine schärferes png. Ich kann es dir nicht begründen, aber es hat geholfen.
Das Runterrechnen übernimmt static_image.php.

Grüße
smmmo

pc1246

Moin
Und Danke fuer die Info!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Laffer72

Hallo smmmo,

danke für Deinen Post. Ich habe die Teile für das Türschild auch schon länger zuhause liegen, bin aber bisher noch nicht wirklich dazu gekommen das ganze zu verwirklichen.
Aufgrund habe ich mich jetzt endlich drangemacht.
Wie funktioniert das mit dem Bild übertragen. Irgendwie werd ich da aus dem ct-Artikel nicht richtig schlau.
Muß ich einen eigenen Server aufsetzen oder kann das auch über FHEM funktionieren?
Ich habe gesehen Du speicherst Das Bild im FHEM/www/images-Verzeichnis ab, wie erfolgt die Umwandung mit staticimage?

Danke schonmal für Deine Mühe.

Viele Grüße

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

tomster

Zitat von: smmmo am 13 Mai 2018, 21:28:36
Was aktuell bei mir noch verbesserungsbedürftig ist, ist die pixelige Darstellung des Texts.

Das Problem kenne ich von anderer Stelle. Um wirklich die Darstellungsfähigkeiten eines Displays auszunutzen, MUSS man pixelgenaue Graphiken; sprich am Besten native Graphikengines benutzen. Das generierte PNG ist auf Grund der hohen Auflösung für das Auge schön scharf. Da aber das dafür verwendete Raster nicht mit dem Pixelraster des Displays übereinstimmt, werden bei der Darstellung eben in Teilbereichen 2 (oder mehr) nebeneinanderliegende Pixel angesprochen. Das Problem wird durch das "Runterrechnen" sogar noch verstärkt. Insgesamt "franst" der Text dann aus. Bei Ebook-Reader kann man das Phänomen ganz gut sehen. Text ist eigentlich immer recht scharf wenn man die Standard-Schrift und -größe verwendet, weil der Schriftsatz genau auf das Pixelraster des Readers ausgelegt ist. Bei anderer Schriftart oder bei Graphiken schaut es hingegen immer leicht ausgefranst aus.

Ich hab vor einiger Zeit an einem OLED-Display am ESP8266 gefrickelt:
https://forum.fhem.de/index.php/topic,50697.0.html

Dabei war es notwendig den kompletten Zeichensatz für die Textausgabe (also wirklich jeden einzelnen Buchstaben und jede Ziffer) in den Sketch zu miteinzukompilieren. Nur so konnte ich wingfighter eine einigermaßen scharfe Darstellung von Text erreichen. Lediglich der knappe Speicher des ESP8266 hat den dabei verwendbaren Umfang begrenzt. Aber zumindest dieses Problem dürfte beim ESP32 etwas geringer ausfallen.


smmmo

Zitat von: Laffer72 am 18 Mai 2018, 09:30:05
Wie funktioniert das mit dem Bild übertragen. Irgendwie werd ich da aus dem ct-Artikel nicht richtig schlau.
Muß ich einen eigenen Server aufsetzen oder kann das auch über FHEM funktionieren?
Ich habe gesehen Du speicherst Das Bild im FHEM/www/images-Verzeichnis ab, wie erfolgt die Umwandung mit staticimage?
Sorry, habe deine Frage erst jetzt gelesen.

Ja, da muss tatsächlich noch ein Server laufen, bei mir ist das ein nginx. Meine config sieht so aus:

upstream php-handler {
    server unix:/var/run/php/php7.2-fpm.sock;
}

server {
        server_name xxx;
        listen 80;

        root /var/www;
        index index.html index.htm;

        location /ardu {
                root   /var/www;
                index  index.php;

                allow 192.168.178.0/24;
                deny all;

                location ~ ^/ardu(/.+?\.php) {
                        root /var/www;
                        fastcgi_index index.php;
                        fastcgi_param PATH_INFO $1;
                        include fastcgi.conf;
                        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                }
        }
}
[...]


Dann habe ich einen symbolic link zum generierten file angelegt und alle anderen files in static_image gelöscht (sonst wird zufällig irgendeines der images verwendet):

root@xxx:/var/www/ardu/DoorsignEPD/server/contents/static_image# ls -l
insgesamt 0
lrwxrwxrwx 1 root root 39 Mai  1 14:28 basi.png -> /opt/fhem/www/images/Basi_generated.png


Grüße
smmmo

gerhardg

Waveshare hat auch ein esp8266 Board, bzw findet man dort passenden Beispielcode um die Bilder direkt am ESP zu rendern.

https://www.waveshare.com/wiki/E-Paper_ESP8266_Driver_Board


kennymc.c

Etwas zum Them Batteriebetrieb: Andreas Spiess hat auf YouTube eine ganz gute Zusammenfassung von ESP32 Boards mit LiPo Batterie-Anschluss und USB Ladefunktion erstellt. Dazu gibt es auch eine Tabelle mit nützlichen Infos wie dem Stromverbrauch. Leider fehlt das relativ neue Wemos D32, wo man noch herausfinden muss, ob die verbauten LEDs auch in Deep Sleep aktiv sind. Mit Batteriebetrieb kann das die Dauer ja recht massiv beeinflussen. Im Prinzip kann man dann aber alles mit einem 3,7V LiPo Akku betrieben. Müssten dann eigentlich auch in einen entsprechenden Rahmen, z.B. IKEA Ribba, passen.

Wird das Display während des Deep Sleeps noch mit Strom versorgt? Ansonsten müsste man das ja noch mit zum Verbrauch dazu rechnen.

r00t2

Zitat von: kennymc.c am 06 September 2018, 14:56:27...
Wird das Display während des Deep Sleeps noch mit Strom versorgt? Ansonsten müsste man das ja noch mit zum Verbrauch dazu rechnen.
Sollte bei einem ePaper Display zumindest nicht notwendig sein, da es seinen Inhalt auch ohne Versorgungsspannung behält.
FHEM 6.0 (Raspberry Pi 2 B | Raspberry Pi OS Lite | Perl 5.28.1 | UZB Z-WAVE.Me | Hue Bridge V1 | SIGNALDuino 433 MHz | FritzBox | Kodi | Pioneer AVR | MQTT | Node-RED | Diverse Google Dienste)

kennymc.c

Ja, genau. Deshalb meine Frage, ob der ESP32 da einfach alles kappt oder dann noch irgendwie versucht das Display mit Strom zu versorgen auch wenn es beim ePaper nicht nötig ist. Eventuell könnte man die Displayausgabe auch einfach kurz vor dem Deep Sleep Befehl deaktivieren.
Da man den ESP32 glaube ich auch über externe Schalter aus oder in den Deep Sleep versetzten kann, wäre es eventuell auch noch interessant ein Funk Relais mit daran zu hängen, um die Aktualisierungen bei Abwesenheit auszusetzen, da man sie dann ja eh nicht sieht und damit Batteriekapazität spart. Könnte allerdings sein, dass der zusätzliche Stromverbrauch der Relais den Vorteil wieder ausgleicht, je nachdem wie lange man abwesend ist.

Wernieman

1. Transi ist Stromsparender als Relais
2. Einfach beim der Anwesenheit das Display nicht mehr aktuallisieren.

Ein EPaper sollte nur Stromverbrauchen, wenn sich etwas ändert ... ansonsten wie hier schon geschrieben mal die Schaltung prüfen!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

bart0190

Hallo,
Ich habe mir das gleiche Setup besorgt und habe nun geschafft ein .png am Raspi zu erstellen und mit FHEM Daten aktuell zu halten. Jetzt weiß ich aber nicht, wie ich weiter machen soll. Habe leider keine Erfahrung mit PHP.

Hat das vielleicht jemand kürzlich gemacht bzw. würde es klappen PHP auf dem RasPi zu haben? Und wie bekommt der ESP32 den Datenstrom, den das PHP Skript generiert?

Lg
Bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

smmmo

Naja, das Vorgehen für die Software auf dem ESP32 ist unter https://www.heise.de/select/ct/2018/2/1515453575487133 beschrieben. Dort habe ich mich bedient. Oder verstehe ich dich falsch?

Grüße
smmmo

bart0190

Hallo smmmo,
Danke für die super schnelle Antwort. Ja, den c't Artikel habe ich soweit durchgemacht, dass nun ein .png am Raspi (via FHEM) erstellt wird. Der ESP32 steuert das Display mit dem Demobeispiel richtig an und auch in mein WLAN kommt er korrekt rein. Das c't Arduino Programm lädt auch richtig runter. Jetzt hab ich beim ersten Start nach dem c't Programm download die Möglichkeit WLAN Settings MQTT Server und Ordner, wo das Bild liegt, einzugeben. Da stehe ich nun aber an: Der ESP versteht ja das Kindle .png so nicht und dazu braucht es ja dieses PHP Script.

Muss ich nun das Bild auf einen Server kopieren und dort mit PHP umwandeln? Oder kann ich (einfacher?) über den Raspi gehen, wo ich die Umwandlung mit dem im c't gezeigen PHP Skript mache? Was muss ich dazu wo installieren, damit ich wenig (oder gar nichts) im Code anpassen muss.
Bin da leider unerfahren aber sehr dankbar für jeden Hinweis.

Lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

smmmo


bart0190

Ah, da hab ich glaub ich früher beim Durchlesen was falsch verstanden.  ::)
d.h. der nginx server ist zusätzlich am Raspi installiert, richtig?

Dann werd ich mich mal an das Thema machen.
Ich hoffe ich darf mich wieder melden, da ich sicher noch die eine oder andere Frage habe. :)

Danke schonmal soweit.
lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

_Niemand_

hallo bart0190,

läuft bei Dir jetzt das eInk-Display mit den Werten von FHEM?
Ich hätte auch Interesse an so einer Display-Lösung, hatte ich bislang zum einen auch das mit den nginx server nicht verstanden (wie installiert man den? Gibts irgendwo eine leichte Anleitung?).
Zum anderen würde mich interessieren, ob die Schrift auf den eInk auch wirklich "scharf" angezeigt wird (da hatte ich auch meine Zweifel beim Lesen des Blogs). Wie läuft da bei Dir?
Als Alternative käme bei mir noch das Nextion-Display (siehe hier https://forum.fhem.de/index.php/topic,51267.0.html ) in Betracht nur scheint das auch ziemlich kompliziert zu sein - wenn der Blog 41-Seiten hat ;)

bart0190

Hallo _Niemand_,
Nein, den Server hab ich noch nicht installiert, aber bis jetzt alle Details was zu tun ist mitgeschrieben. Wenn ich (hoffentlich erfolgreich) fertig bin, werde ich alle Schritte posten.
Ich hoffe ich komme in 1-2 Wochen dazu daran weiterzuarbeiten.
Ich hoffe smmmo hat dann auch etwas Zeit (und Nerven) die eine oder andere Frage zu beantworten. :-)

Lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

_Niemand_

hallo bart,

danke fürs Update ... dann drücke ich Dir mal die Daumen  ;)
Und würde mich sehr über (hoffentlich einen Erfolgs-)Bericht freuen...

Viele Grüße
_Niemnand_

bart0190

#26
Hallo smmmo,
Ich habe nun einen nginx auf dem Raspberry (dort wo ich auch FHEM laufen habe) und auch PHP installiert. Der nginx und PHP funktioniert auch richtig, hab ich getestet.
Jetzt stehe ich aber ein wenig an.
Kannst du mir bitte einige Hinweise geben?

Folgende Verzeichnisse habe ich:
nginx Server
hier liegt ein dummy index.php, welches testet, ob PHP funktioniert:
/var/www/html

Das server-Verzeichnis von https://github.com/jamct/DoorsignEPD habe ich hierher kopiert
/var/www/ardu/DoorsignEPD/
Ich nehme an, das ist der gleiche Ort bei dir.

In diesem Verzeichnis gibt es aktuell nur das Beispiel .png von c't (ct.png).
/var/www/ardu/DoorsignEPD/server/contents/static_image

Dann habe ich die Konfigurationsdatei von nginx Server angepasst (an dein Beispiel gehalten):   
sudo nano /etc/nginx/sites-available/default

# Default server configuration
#
server {

listen 80
# listen 80 default_server;
# listen [::]:80 default_server;

root /var/www;
index index.php;
server_name xxxDERNAMEDERNACHDEMRASPILOGINSTEHTxxx;

location /ardu {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
root /var/www;
index index.php;

allow 192.168.178.0/24;
  deny all;

location ~ ^/ardu(/.+?\.php) {
root /var/www;
fastcgi_index index.php;
fastcgi_param PATH_INFO $1;
include fastcgi.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
}


Im /var/www/ Verzeichnis liegt keine Datei.

Das
allow 192.168.178.0/24;
verstehe ich nicht, wo das herkommt.

Dann hab ich das Arduino Programm auf den ESP32 geladen. Dann auf das WLAN vom ESP32 verbunden. Nun gibt es viele Fehlerquellen: bei der ESP32 Konfig-Page, was gebe ich da wo ein?
Device ist der Name vom ESP, wie er im WLAN erscheinen soll, richtig?
SSID ist mein Haus-WLAN und dann dessen WLAN-Passwort nehme ich stark an.
Server to load image from, ist die IP Adress von meinem nginx (also meines Raspis).

Was gebe ich nun aber bei
Address to load image from (path on server, starting with / e.g.: /index.php/?debug=false&[...] ):
ein? Mit dem Pfad (siehe Anhang) klappt es (wie zu erwarten) nicht. :)
Ich würde ja als ersten Schritt gerne mal sehen, ob das mit dem Server prinzipiell funktioniert, bevor ich das generierte Image anzeige.

Dass es noch nicht das richtige Bild nehmen kann ist mir klar, da ich noch nirgends gesagt habe, wo das alle Minuten aktualisierte Bild liegt.
Mein von FHEM kommende Bild liegt hier:
/opt/fhem/www/images
und heißt:
KindleDisplay_status1.png

@_Niemand_ : ich habe noch eine Detail-Beschreibung, die ich, wenn ich (hoffentlich) fertig bin, posten werde.

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

smmmo

#27
Hallo bart,

das sieht alles schon gut aus. Deine Annahmen sind soweit alle richtig (device name, wifi ssid, server...).

Ich denke das Problem liegt beim Ausliefern des pngs: Damit der esp32 es darstellen kann, muss es umgerechnet werden. Das übernimmt das index.php im server-Verzeichnis für dich. D.h. die URL muss so aussehen:

/ardu/DoorsignEPD/server/index.php?display=7.5&content=static_image&scale=28


Falls es nicht gleich funktioniert, kannst du zum Test vom Rechner im gleichen WLAN einfach die URL aufrufen:

http://<ip_vom_raspi>/ardu/DoorsignEPD/server/index.php?debug=true&display=7.5&content=static_image&scale=28

Wichtig für den Test im Browser ist das debug=true. Damit wird das Umrechnen verhindert, so kann dein Browser das Bild darstellen.

Anbei noch ein Bsp von meiner Konfig.

Gruß
smmmo

bart0190

Hallo smmmo,
VIELEN DANK!!! Bin nun einen großen Schritt weiter.
c't Beispielbild, welches im
/var/www/ardu/DoorsignEPD/server/contents/static_image
liegt wird nun angezeigt.   :D :D :D
Seltsam ist nur, dass es alle 5 Sekunden nachgeladen wird bzw. flasht (sich invertiert).

Was für mich nun nicht ganz klar ist:
Muss ich mein erstelltes .png (siehe Anhang, ja da ist noch ein Grafikfehler drin  ::) ) nun nochmal umwandeln?
Habe ein Foto angehängt, es sollte noch 90° gedreht werden, aber die Schärfe ist in Ordnung. (Das Bild ist aber nur mal händisch hinkopiert).

Wie bringe ich das Bild nun in den /static_image/ Ordner? Zwei Kommandos am Raspi machen so wie folgend?
root@xxx:/var/www/ardu/DoorsignEPD/server/contents/static_image# ls -l
und dann?
root@xxx:basi.png -> /opt/fhem/www/images/KindleDisplay_status1.png
Bin da leider ganz unwissend. (sorry wenn ich da nen totalen Blödsinn schreibe)

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

smmmo

Zitat von: bart0190 am 27 Juni 2019, 22:07:43
Seltsam ist nur, dass es alle 5 Sekunden nachgeladen wird bzw. flasht (sich invertiert).
Was hast du denn bei sleep time eingegeben? Evtl. zieht die aber auch erst im ProductionMode, da bin ich gerade auch nicht sicher.

Zitat
Was für mich nun nicht ganz klar ist:
Muss ich mein erstelltes .png (siehe Anhang, ja da ist noch ein Grafikfehler drin  ::) ) nun nochmal umwandeln?
Das erstellte png legst du in den Ordner, in dem du aktuell noch das Beispiel-Bild hast. Das Umwandeln übernimmt das php-Skript.

Zitat
Habe ein Foto angehängt, es sollte noch 90° gedreht werden, aber die Schärfe ist in Ordnung. (Das Bild ist aber nur mal händisch hinkopiert).
Ungetestet: Öffne mal index.php und such nach der Zeile

"7.5"=>array("size"=>"640x384","rotate"=>"false"),

Evtl. hilft hier die Änderung auf "rotate"=>"true"?

Zitat
Wie bringe ich das Bild nun in den /static_image/ Ordner? Zwei Kommandos am Raspi machen so wie folgend?
root@xxx:/var/www/ardu/DoorsignEPD/server/contents/static_image# ls -l
und dann?
root@xxx:basi.png -> /opt/fhem/www/images/KindleDisplay_status1.png
Bin da leider ganz unwissend. (sorry wenn ich da nen totalen Blödsinn schreibe)
Bin nicht ganz sicher was du meinst.
Irgendwo hast du ja dein generiertes png liegen, sagen wir mal in /opt/fhem/www/images/KindleDisplay_status1.png. Diese Datei wird von fhem regelmässig neu erstellt.
Damit die auf deinem epaper auftaucht, müsste sie nach jedem Erstellen nach /var/www/ardu/DoorsignEPD/server/contents/static_image/ kopiert werden.

Statt jedes Mal zu Kopieren kannst du auch einfach einen Link erstellen (am besten googeln, wenn du nicht weisst was das ist):

cd /var/www/ardu/DoorsignEPD/server/contents/static_image/
ln -s /opt/fhem/www/images/KindleDisplay_status1.png basi.png


Grüße
smmmo

bart0190

Hallo smmmo,
DANKE!!!!!!!
Es läuft!  :D 8) :D
Siehe Anhang.
Jetzt geht es an die Kosmetik.  :)

Das mit dem Drehen hat nicht funktioniert.  Ich werd mich mal mit der Auflösung und Ausrichtung im .svg spielen.

Kannst du mir sagen wie du das Datum mit Wochentag eingefügt hast (bzw. welche Dummies du im FHEM angelegt hast?

Nochmals vielen vielen Dank für deine Hilfe!

Lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

bart0190

#31
So, wie versprochen nun die Detail-Beschreibung, wie ich zu dem aktuellen Ergebnis gekommen bin.
Auch ein kleines Architekturbild (nicht ganz korrekt, aber sollte dem Verständnis helfen)

@smmmo: Vielleicht kannst du ja einen Link auf der ersten Seite zu diesem Post erstellen. :)

Meine aktuelle Vorlage habe ich auch hinzugefügt.
Hab noch eine Kleinigkeit zum besseren Verständnis im .docx eingefügt.

lg
bart
---------------------------------
edit 12.07.2019: Neue Version vom .docx. Jetzt gibt es auch Wettervorhersage und auch Wetter-Icons, die mit dem Wetter ändern. :D ;D
Auch nun ein Bild wie es aussieht.
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

smmmo

Zitat von: bart0190 am 30 Juni 2019, 09:26:20
So, wie versprochen nun die Detail-Beschreibung, wie ich zu dem aktuellen Ergebnis gekommen bin.
Auch ein kleines Architekturbild (nicht ganz korrekt, aber sollte dem Verständnis helfen)

@smmmo: Vielleicht kannst du ja einen Link auf der ersten Seite zu diesem Post erstellen. :)

Meine aktuelle Vorlage habe ich auch hinzugefügt.
Hab noch eine Kleinigkeit zum besseren Verständnis im .docx eingefügt.

lg
bart

Sehr schön, danke für die Anleitung!
Noch schöner wäre es natürlich, wenn du das Ganze ins Wiki packst. Dann können auch andere dort Ergänzungen/Korrekturen/Verbesserungen vornehmen.

Grüße
smmmo

bart0190

Zitat von: smmmo am 30 Juni 2019, 19:51:06
Sehr schön, danke für die Anleitung!
Noch schöner wäre es natürlich, wenn du das Ganze ins Wiki packst. Dann können auch andere dort Ergänzungen/Korrekturen/Verbesserungen vornehmen.

Grüße
smmmo
Ja, das habe ich vor, jedoch dauert das etwas länger und bis dort hin kann man schon das .docx verwenden. :)

@smmmo: Übrigens habe ich überhaupt kein Problem mit einer Unschärfe. Weder mit Bildauflösung unterschiedlich noch gleich wie das Display. Ich rechne da aber auch nicht mehr extra um. Am besten fahre ich nun mit der gleichen Auflösung wie das Display hat.
Ich verwende Inkscape 0.92 mit einer Bildauflösung von 640x384px.

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

perezma

#34
Hallo, ich klinke mich hier mal ein. Bin aber bei Arduino absoluter Anfänger. Habe mir das Wordokument heruntergeladen und versucht alles nach Anleitung zu machen. Leider bekomme ich im Arduino IDE eine lange Fehlermeldung. Vielleicht könnt Ihr mir ja hier weiterhelfen.

Schon jetzt ein riesen Dankeschön für Euer Verständnis.

Hier die Fehlermedlungen aus dem IDE:
Arduino: 1.8.9 (Windows 10), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"

In file included from C:\Program Files (x86)\Arduino\libraries\Basecamp/WebServer.hpp:16:0,

                 from C:\Program Files (x86)\Arduino\libraries\Basecamp/Basecamp.hpp:23,

                 from C:\Users\Maik\Downloads\DoorsignEPD-master\esp32\doorsignEPD\doorsignEPD.ino:5:

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:86:5: error: 'DynamicJsonDocument' does not name a type

     DynamicJsonDocument _jsonBuffer;

     ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h: In constructor 'AsyncJsonResponse::AsyncJsonResponse(size_t, bool)':

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:104:100: error: class 'AsyncJsonResponse' does not have any field named '_jsonBuffer'

     AsyncJsonResponse(size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE, bool isArray=false) : _jsonBuffer(maxJsonBufferSize), _isValid{false} {

                                                                                                    ^

In file included from C:\Program Files (x86)\Arduino\libraries\Basecamp/WebServer.hpp:16:0,

                 from C:\Program Files (x86)\Arduino\libraries\Basecamp/Basecamp.hpp:23,

                 from C:\Users\Maik\Downloads\DoorsignEPD-master\esp32\doorsignEPD\doorsignEPD.ino:5:

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:108:17: error: '_jsonBuffer' was not declared in this scope

         _root = _jsonBuffer.createNestedArray();

                 ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:110:17: error: '_jsonBuffer' was not declared in this scope

         _root = _jsonBuffer.createNestedObject();

                 ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h: In member function 'size_t AsyncJsonResponse::setLength()':

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:122:41: error: 'measureJson' was not declared in this scope

       _contentLength = measureJson(_root);

                                         ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h: In member function 'size_t AsyncJsonResponse::getSize()':

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:129:30: error: '_jsonBuffer' was not declared in this scope

    size_t getSize() { return _jsonBuffer.size(); }

                              ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h: In member function 'virtual size_t AsyncJsonResponse::_fillBuffer(uint8_t*, size_t)':

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:137:32: error: 'serializeJson' was not declared in this scope

       serializeJson(_root, dest);

                                ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h: In member function 'virtual void AsyncCallbackJsonWebHandler::handleRequest(AsyncWebServerRequest*)':

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:212:9: error: 'DynamicJsonDocument' was not declared in this scope

         DynamicJsonDocument jsonBuffer(this->maxJsonBufferSize);

         ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:213:9: error: 'DeserializationError' was not declared in this scope

         DeserializationError error = deserializeJson(jsonBuffer, (uint8_t*)(request->_tempObject));

         ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:214:13: error: 'error' was not declared in this scope

         if(!error) {

             ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:215:30: error: 'jsonBuffer' was not declared in this scope

           JsonVariant json = jsonBuffer.as<JsonVariant>();

                              ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:215:55: error: expected primary-expression before '>' token

           JsonVariant json = jsonBuffer.as<JsonVariant>();

                                                       ^

C:\Program Files (x86)\Arduino\libraries\ESPAsyncWebServer-master\src/AsyncJson.h:215:57: error: expected primary-expression before ')' token

           JsonVariant json = jsonBuffer.as<JsonVariant>();

                                                         ^

Mehrere Bibliotheken wurden für "WiFi.h" gefunden
Benutzt: C:\Users\Maik\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2\libraries\WiFi
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
Mehrere Bibliotheken wurden für "GxEPD.h" gefunden
Benutzt: C:\Program Files (x86)\Arduino\libraries\GxEPD
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\GxEPD-master
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

PeMue

Hallo,

bitte pack die Liste mit den Fehlermeldungen in code tags damit Dein Beitrag besser lesbar ist.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

perezma

Zitat von: PeMue am 10 Juli 2019, 15:08:35
Hallo,

bitte pack die Liste mit den Fehlermeldungen in code tags damit Dein Beitrag besser lesbar ist.

Gruß Peter

Hatte ich, aber irgendwie hat der Editor es verschluckt...

bart0190

Hi perezma,
Bin auch kein Experte in Arduino, jedoch kann es leicht sein, dass bei der Installation von Arduino bzw. (besser gesagt) der Libraries etwas schief gegangen ist.
Probier mal das leere Beispiel zu kompilieren. Wenn das klappt, dann nimm dir das nächste (einfache) Beispiel und lade es runter. Wenn beide schon nicht klappen, einfach das Arduino deinstallieren.
Ich selber hab Arduino in einem Verzeichnis ohne Sonderzeichen installiert, sollte eigentlich nichts machen, aber naja... :)
Dann ist die Installation der Libraries wichtig, dass das korrekt gemacht wird. Ich habe immer das zip entpackt und in den Library Folder kopiert.

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

bart0190

Hi,
Hab noch mal aktualisiert. Mit Wetter-Vorschau und Wetter-Icons. Bild davon auch hier:
https://forum.fhem.de/index.php/topic,87778.msg953828.html#msg953828

Wiki kommt dann sobald ich etwas mehr Zeit habe. :)

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

perezma

Hallo bart0190,

ich habe es vorhin noch einmal auf meinem Laptop probiert (Windows 7). Arduino IDE neu installiert und dann das Worddokument abgearbeitet. Hat geklappt. Liegt dann anscheinend echt an der Installation auf dem anderen Rechner.

Trotzdem Danke.

DavidR

Hallo Zusammen,

erst einmal vielen Dank für die sehr gute Anleitung. So konnte auch ich als Arduino-Beginner mir so ein schönes Display für meine Wohnung bauen :)
Es läuft alles (Bild wird generiert, übertragen und auch angezeigt) aber ich kämpfe noch mit dem andauernden Refresh des Displays...
Konfiguration habe ich exakt so gemacht wie im Word bart und auch im Web-Interface den Production Mode auf true und sleep time auf 600s gesetzt. Funktioniert nur eben nicht.
Gibt es eventuell ein kleiner Hinweis, wie ich die Refreshrate sinnvoll einstellen kann? Ich hab gesehen, dass in dem DoorsignEPD programm auch eine Möglichkeit für die Übergabe der Variablen per Addresse gibt - hat das zusällig schon einmal jemand ausprobiert und könnte mir da Tipps geben?

Vielen Dank im Voraus!
David

bart0190

Funktioniert der Refresh mit (z.B. 120) im Entwicklungsmodus? Ich kann mich nicht erinnern, dass ich da noch etwas zusätzlich eingestellt hätte.
Flasht das Display oder bleibt es einfach an mit den alten Werten? Leuchten die LEDs am ESP32?

Lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

DavidR

Guten Morgen,

der Refresh funktioniert schon wie er soll - in FHEM kann man ja die png Generierung auch manuell anstoßen.. Ich hab einen Zeitstempel auf dem Bild, ähnlich deinem Beispiel, da ich es auch sinnvoll finde die Info dabei zu haben. Er läd dann auch immer das aktuelle Bild. Insofern funktionert ja alles "wie es soll" - er ignoriert nur die Einstellung für den Sleep-Modus.

Auch ein Test mit Einstellung der Sleeptime auf 60 und Production Mode false im Web-Interface hat nicht geholfen - er refresht fleißig vor sich hin.

VG
David

bart0190

Im Dev Mode macht er bei mir auch kein Sleep. Beim ersten Mal hatte es bei mir auch nicht gleich geklappt. Da hatte ich dann aber einfach alles nochmal resetet, dann nochmal mit Arduino den ESP programmiert, in der Oberfläche alles gesetzt und (gleich) auf Production Mode true.
Was es da genau hatte, oder ob ich einfach nur in den Prozessschritten was falsch gemacht hatte, weiß ich nicht.
Lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3

DavidR

#44
Danke für die schnelle Reaktion.. ich hab mal den Serial Monitor Auszug (kannte ich bis dato noch gar nicht..) angehangen, dort sagt er, dass er nicht in den Deep Sleep geht weil noch eine Verbindung besteht. Sprich er bricht die Verbindung zum Server nicht "sauber" ab.
Hat dazu evtl jemand noch einen Tipp?
Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:928
ho 0 tail 12 room 4
load:0x40078000,len:8424
ho 0 tail 12 room 4
load:0x40080400,len:5868
entry 0x4008069c

Basecamp V.0.1.6
MAC-Address: XXXXXXXX, Hardware MAC: XXXXXXXX
*******************************************
* ACCESS POINT PASSWORD: ,.2UUNFM
*******************************************

.
.
.
.
.
.
.
Wait till the client is connected
Not going to deep sleep. Reason: Connection setup in progres
OnConnect

OnData: 1436 Bytes
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sun, 15 Sep 2019 08:29:50 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 30720
Connection: close
ProductionMode: 1
Printing 1276 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 1436 Bytes
Printing 1436 Bytes to the screen
OnData: 724 Bytes
Printing 724 Bytes to the screen
OnDisconnect
Not going to deep sleep. Reason: Ongoing connection
Not going to deep sleep. Reason: Ongoing connection
E (10396) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (10396) task_wdt:  - async_tcp (CPU 0/1)
E (10396) task_wdt: Tasks currently running:
E (10396) task_wdt: CPU 0: IDLE0
E (10396) task_wdt: CPU 1: IDLE1
E (10396) task_wdt: Aborting.
abort() was called at PC 0x400fc578 on core 0

Backtrace: 0x4008ccb4:0x3ffbe160 0x4008cee5:0x3ffbe180 0x400fc578:0x3ffbe1a0 0x40081869:0x3ffbe1c0 0x401863db:0x3ffbc4a0 0x400fa4e2:0x3ffbc4c0 0x4008ab51:0x3ffbc4e0 0x40088c51:0x3ffbc500



DavidR

#45
Ich hab mal etwas rumexperimentiert - Das Problem scheint nicht die noch bestehende Verbindung zu sein, sondern viel mehr der Watchdog, der den Reset auslöst.
Wenn ich das display.update in der Funktion onDisconnectHandler auskommentiere geht er wie geplant in Deep Sleep und wartet auch relativ genau die eingestellte 60s ab. Klar, ohne das Display Update macht die ganze Funktion keinen Sinn aber offensichtlich dauert dies zu lange, so dass der Watchdog ausgelöst wird.

Hat hier eventuell jemand Erfahrungen wie man das auslösen verhindern kann oder zumindest zu verlängern?


void onDisconnectHandler(void *r, AsyncClient *client){
  Serial.println("OnDisconnect");
  /** display.update(); */
  transmitDone();
}

max333

#46
Hallo,

ich habe mich auch an die docx gehalten, nur bekomme ich die Wettericons nicht angezeigt. Ich sehe nur die Buchstaben.

Was habe ich da falsch gemacht?


Die hier verlinkte Schriftart funktioniert https://forum.fhem.de/index.php/topic,80337.msg725801.html#msg725801

Den laufenden Reset habe ich auch noch, aber das scheint ein anderes Problem zu sein: https://github.com/jamct/DoorsignEPD/issues/5

LarsLWO

#47
Hallo ihr,

ich versuche jetzt seit Tagen, mein epaper Display ans Laufen zu kriegen, aber es passiert halt nichts - das Display bleibt weiß. Ansonsten habe mich weitgehend an diese Anleitung gehalten, hatte aber dennoch einige Hürden zu nehmen, aber was solls, ich glaube jetzt ist der ESP richtig konfiguriert. Habe mich bei den Versionsständen an die Angaben aus dem doorsignepd Projekt auf Github gehalten.

Dann mit dem WLAN des ESP verbunden, meine W-Lan Config eingetragen, hat auch geklappt, dann mein Script auf einem Server abgelegt, lässt sich per Browser super aufrufen (ct-Beispiel-Grafik).

Aus dem Serial Monitor:
Zitat10:03:38.295 -> OnData: 574 Bytes
10:03:38.295 -> HTTP/1.1 302 Moved Temporarily
10:03:38.295 -> Date: Sat, 12 Oct 2019 08:03:38 GMT
10:03:38.295 -> Content-Type: text/html
10:03:38.295 -> Content-Length: 138
10:03:38.295 -> Connection: close
10:03:38.295 -> Location: https://(hostname)/?debug=false&content=static_image&display=7.5
10:03:38.295 -> Server: nginx
10:03:38.295 -> Referrer-Policy: strict-origin-when-cross-origin
10:03:38.295 -> Strict-Transport-Security: max-age=172800
10:03:38.295 -> X-Content-Type-Options: nosniff
10:03:38.295 -> X-Xss-Protection: 1; mode=block
10:03:38.295 -> X-Frame-Options: SAMEORIGIN
10:03:38.295 -> ProductionMode: 0
10:03:38.295 -> Printing 138 Bytes to the screen
10:03:38.295 -> OnDisconnect
10:03:40.165 -> Not going to deep sleep. Reason: Not in production mode
10:03:40.165 -> Ongoing connection

Aufgrund der Ausgabe, und dass das Bild im Browser richtig angezeigt wird (wenn debug=true; vielen Dank übrigens für den Hinweis), gehe ich davon aus, dass eigentlich alles funktionieren müsste.

ABER: Das Display bleibt halt weiß. Übrigens, ebenso bei dem GxEPD Example. Dort erhalte ich im Serial Monitor immer nur etwas wie "DrawingBitmap" und ansonsten "Busy Timeout".

Ich habe ein Waveshare 7,5" s/w Display, und als ESP32 verwende ich:
E-Paper ESP32 Driver Board (https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board)

Hat jemand eine Idee? Pinbelegung oder sowas?

Wäre schön, wenn noch jemand hier vorbeischaut und vielleicht einen Tipp geben kann :)

LarsLWO

Kleiner Zusatz: Waveshare gibt die Pinbelegung für das Display im Manual an, aber wo kann ich die ändern? Denke immer mehr, dass das der Grund sein dürfte...

max333

in der doorsignEPD ist folgendes zu ändern:

#define CHIP_SELECT 15

GxIO_Class io(SPI, CHIP_SELECT, 27, 26);
GxEPD_Class display(io, 26, 25);

und in der AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\variants\esp32\pins_arduino.h

static const uint8_t SS    = 15;
static const uint8_t MOSI  = 14;
static const uint8_t MISO  = 12;
static const uint8_t SCK   = 13;

ABER es funktioniert bei mir nur das Setup, danach wird das Display aktualisiert, alles invertiert, und dann RESET...

LarsLWO

Sehr geil, es funktioniert! Besten Dank :D

Aus Interesse: Warum musste ich das PIN-Mapping anpassen? Sind die speziell bei diesem Board (E-Paper ESP32 Display Driver) anders als bei den anderen?

max333

#51
Der SPI-Bus ist bei dem Waveshare über andere PINs realisiert.

Damit der ESP32 läuft, muss man sich unbedingt an das halten was bei doorsignEPD angegeben wird:

Tested dependencies
This project was tested with the following Library versions:

GxEPD v3.0.4 from github
Basecamp v0.1.8 via Arduino library manager
Adafruit_GFX v1.3.6 via Arduino library manager
AsyncTCP from github (ac551716aa655672cd3e0f1f2c137a710bccdc42, v1.0.3) https://github.com/me-no-dev/AsyncTCP/tree/ac551716aa655672cd3e0f1f2c137a710bccdc42
ESPAsyncWebServer from github (95dedf7a2df5a0d0ab01725baaacb4f982dedcb2, v1.2.0) https://github.com/me-no-dev/ESPAsyncWebServer/tree/95dedf7a2df5a0d0ab01725baaacb4f982dedcb2
ArduinoJson v5.13.4 via Arduino library manager
ESP32 Arduino core by espressif: version 1.0.1

LarsLWO

#52
Hat denn jemand dieses Projekt in letzter Zeit zum Laufen bekommen? Ich habs jetzt mit 2 unterschiedlichen Boards probiert: Waveshare ESP32 Driver Board, und ESP32 Devkit v1. Bei beiden funktioniert das GxEPD Beispiel (Display wird also richtig angesprochen). Aber bei beiden funktioniert nicht das DoorsignEPD Projekt. Es lässt sich zwar flashen, die Konfiguration einstellen, aber statt einer grafischen Ausgabe blinkt das Display nur schwarz weiß.

Die Ausgabe vom Serial Monitor lässt darauf schließen, dass das Bild richtig abgerufen wird - korrekte HTTP Header sind da zu sehen. Wenn ich bewusst eine ungültige URL angebe, etwa google.de, dann zeigt das Display immerhin ein paar kryptische Zeichen ;-)

Ich glaube, dass es einfach schwierig ist, zum jetzigen Zeitpunkt noch den Versionsstand für ein funktionierendes Setup herzustellen. Probiert hab ich zuletzt hiermit:

* Arduino IDE 1.8.8
* ESP32 Arduino Core by Espressif, 1.0.1
* GxEPD v3.0.4 from github
* Basecamp v0.1.8 via Arduino library manager
* Adafruit_GFX v1.3.6 via Arduino library manager
* AsyncTCP from github (ac551716aa655672cd3e0f1f2c137a710bccdc42, v1.0.3)
* ESPAsyncWebServer from github (95dedf7a2df5a0d0ab01725baaacb4f982dedcb2, v1.2.0)
* ArduinoJson v5.13.4 via Arduino library manager

Nach einem neuen Setup meckert er grundsätzlich, dass ihm die Library "async-mqtt-client" fehlen würde - das sollte er wohl eigentlich nicht tun. Der Fehler legt sich, wenn man die Library einfügt, aber wie gesagt, das Endergebnis stimmt einfach nicht. Angefordert wird die Library wohl durch ESPAsyncWebServer, aber dessen Version ist mit Commit-Hash genau beim doorsign-Projekt angegeben.

Hab auch mal probiert, vom doorsignEPD eine Version aus der Zeit 02/2018 (Erscheinen des c't-Artikels) zu nehmen. Löste bei mir auch kein einziges Problem...

Vielleicht hat noch jemand einen hilfreichen Tipp?

EDIT: Hier nochmal ein bisschen Ausgabe vom Serial Monitor
Zitat23:55:15.047 -> Not going to deep sleep. Reason: Not in production mode
23:55:15.047 -> Ongoing connection
23:55:16.965 -> transmitDone
23:55:17.068 -> Not going to deep sleep. Reason: Not in production mode
23:55:19.059 -> Wait till the client is connected
23:55:19.059 -> Not going to deep sleep. Reason: Not in production mode
23:55:19.059 -> Connection setup in progres
23:55:19.059 -> OnConnect
23:55:19.059 ->
23:55:19.093 -> OnData: 591 Bytes
23:55:19.093 -> HTTP/1.1 302 Moved Temporarily
23:55:19.093 -> Date: Tue, 15 Oct 2019 21:55:19 GMT
23:55:19.093 -> Content-Type: text/html
23:55:19.093 -> Content-Length: 138
23:55:19.093 -> Connection: close
23:55:19.126 -> Location: https://domain/index.php?debug=false&content=weather_station&display=7.5&display=7.5
23:55:19.126 -> Server: nginx
23:55:19.126 -> Referrer-Policy: strict-origin-when-cross-origin
23:55:19.126 -> Strict-Transport-Security: max-age=172800
23:55:19.126 -> X-Content-Type-Options: nosniff
23:55:19.126 -> X-Xss-Protection: 1; mode=block
23:55:19.126 -> X-Frame-Options: SAMEORIGIN
23:55:19.126 -> ProductionMode: 0
23:55:19.126 -> Printing 138 Bytes to the screen
23:55:19.164 -> OnDisconnect
23:55:21.044 -> Not going to deep sleep. Reason: Not in production mode
23:55:21.044 -> Ongoing connection
23:55:23.042 -> Not going to deep sleep. Reason: Not in production mode
23:55:23.042 -> Ongoing connection
23:55:24.958 -> transmitDone
23:55:25.065 -> Not going to deep sleep. Reason: Not in production mode
23:55:27.048 -> Wait till the client is connected
23:55:27.048 -> Not going to deep sleep. Reason: Not in production mode
23:55:27.048 -> Connection setup in progres
23:55:27.083 -> OnConnect
23:55:27.083 ->
23:55:27.117 -> OnData: 591 Bytes
23:55:27.117 -> HTTP/1.1 302 Moved Temporarily
23:55:27.117 -> Date: Tue, 15 Oct 2019 21:55:27 GMT
23:55:27.117 -> Content-Type: text/html
23:55:27.117 -> Content-Length: 138
23:55:27.117 -> Connection: close

LarsLWO

#53
Okay, jetzt geht alles. Hier die Auflösung:

Der Webserver darf die Inhalte nicht gzip-komprimiert ausliefern. Das ist inzwischen aber bei vielen Linux Distributionen, wenn man den Apache2 installiert, direkt vorkonfiguriert. Normalerweise ist auch vorkonfiguriert, dass etwa Bilder nicht komprimiert werden sollen (die gängigen Bildformate sind alle bereits komprimiert). Aber das Raw-Bild, das für den ESP32 ausgegeben wird, wenn debug=false eingestellt ist, geht eben nicht als Bild durch, sondern als Textdokument.

Zusammengefasst läuft es bei mir unter folgenden Umständen:
* Arduino IDE 1.8.10

Die Versionen der Arduino Libraries entsprechen bei mir denen aus dem DoorsignEPD Projekt:
* GxEPD v3.0.4 (github)
* Basecamp v0.1.8 (Arduino library manager)
* Adafruit_GFX v1.3.6 (Arduino library manager)
* AsyncTCP v1.0.3 (github)
* ESPAsyncWebServer v1.2.0 (github)
* ArduinoJson v5.13.4 (Arduino library manager)

Die ESP32 Core Library, wie hier in der Anleitung (Word-Dokument, Posting 1) beschrieben:
* ESP32 Arduino core by espressif: version 1.0.2, URL: https://dl.espressif.com/dl/package_esp32_index.json

Und folgende Library ist nötig:
* AsyncMqttClient, v. 0.8.2

Diese Library steht hier in der Anleitung (Word-Dokument, Posting 1) mit drin; im Doorsign-Projekt und im heise-Artikel steht sie nicht drin, und in den Forenbeiträgen auf heise.de zu dem Artikel wird sogar fälschlicherweise darauf verwiesen, dass dieses Plugin nur beim ESP8266 nötig wäre (oder zumindest lässt die Formulierung der Antwort darauf schließen), was aber definitiv nicht so ist. Mit der Verwendung von ESPAsyncWebServer wird auch dieses Plugin benötigt. Auch beim ESP32.

Und für den Webservice, der mit DoorsignEPD mitgeliefert wird (falls man ihn denn benutzen möchte, und den ESP32 nicht anders mit Content befeuert):
* PHP 7.2.19
* Apache Webserver mit deinstalliertem deflate-Modul (damit wird nicht gzip-komprimiert; gibt natürlich noch andere Wege, das zu unterbinden)
* PHP-GD-Library 2.2.5

Vielleicht helfen diese Infos jemandem weiter, der sie noch gebrauchen könnte. Vielen Dank und viel Spaß weiterhin :D

UPDATE 10.11.2019:
Die ESP32 Arduino core Library nicht wie oben beschrieben in Version 1.0.2 verwenden, sondern in der neuesten Version (bei mir: 1.0.4). Ich hatte Stabilitätsprobleme, insbesondere beim Ansprechen der Touch-PINs und der Verwendung dieser als Sleep Interrupt. Es funktioniert gut mit 1.0.4.

max333

Wesentlich flexibler kann man die Anzeige gestalten, wenn man z.B. die Datei weather_station.php so anpasst, dass diese direkt die Daten aus fhem per telnet abfragt und darstellt. Auch die Textfarbe lässt sich dann entsprechend anpassen, z.B. rot bei Frost.

Midrag

Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

Damit das neuere Display mit der hier geposteten Anleitung geht ist folgendes zu tun:

Sketch DoorsignEPD anpassen
Zeile 8/9

//#define BASECAMP_NOOTA 1
//#define BASECAMP_NOMQTT


Zeile 65/66 anpassen

#if DISPLAY_TYPE == '7.5'
//#include <GxGDEW075T8/GxGDEW075T8.h>      // 7.5" b/w
#include <GxGDEW075T7/GxGDEW075T7.h>        // 7.5" b/w 800x480
bool hasRed = false;
String displayType = "7.5";
#endif

kkoeniger

Zitat von: Midrag am 06 März 2020, 10:48:49
Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

...

Danke - nach so etwas habe ich schon gesucht.
Ich habe mir erlaubt, auf Dein Gehäuse in einem anderen Thread hinzuweisen, wo es auch um Waveshare-Displays geht: https://forum.fhem.de/index.php/topic,104171.msg1029840.html#msg1029840
LG,
Karl

maltejahn

Zitat von: max333 am 12 Oktober 2019, 00:29:39
Hallo,

ich habe mich auch an die docx gehalten, nur bekomme ich die Wettericons nicht angezeigt. Ich sehe nur die Buchstaben.

Was habe ich da falsch gemacht?


Die hier verlinkte Schriftart funktioniert https://forum.fhem.de/index.php/topic,80337.msg725801.html#msg725801

Den laufenden Reset habe ich auch noch, aber das scheint ein anderes Problem zu sein: https://github.com/jamct/DoorsignEPD/issues/5

Ich muss das aufgreifen da ich wohl zu doof bin das aus den "Buchstaben" die entsprechenden Symbole werden.

Wenn ich das ganze im TabletUI teste mit
                <div class="weather">
                    <div data-icon="R" class="weather-icon meteocons"></div>
                </div>

so wird auch das passende Symbol für "R" auf der Webseite dargestellt. -> also sollte der Font richtig installiert sein
Auf dem Display erscheint dann nur der Buchstabe.

Im Dummy steht der richtige State, also z.B. "B". Also das ersetzen des Wetterstatus mit der Funktion klappt
Das reading lautet z.B. WetterIcon_fc0_morning_dy:state Entsprechend wird der Eintrag im Template auch richtig ersetzt, allerdings erscheint eben nur der Buchstabe "B"

Was mache ich falsch?

Grüße
Malte


bart0190

Hallo,
Nach genau 2 Jahren musste ich das Display tauschen und hoffe, dass ich nun nicht mehr alles neu erfinden muss.

Zitat von: Midrag am 06 März 2020, 10:48:49
Hallo zusammen,

ich habe die Anzeige mit dem neueren Waveshare 7,5" 800x480 Display nachgebaut.
In dem Rahmen habe ich ein Gehäuse designt. Vielleicht ist das für den einen oder anderen Interessant:
https://www.thingiverse.com/thing:4204655

Damit das neuere Display mit der hier geposteten Anleitung geht ist folgendes zu tun:

Sketch DoorsignEPD anpassen
Zeile 8/9

//#define BASECAMP_NOOTA 1
//#define BASECAMP_NOMQTT


Zeile 65/66 anpassen

#if DISPLAY_TYPE == '7.5'
//#include <GxGDEW075T8/GxGDEW075T8.h>      // 7.5" b/w
#include <GxGDEW075T7/GxGDEW075T7.h>        // 7.5" b/w 800x480
bool hasRed = false;
String displayType = "7.5";
#endif


@Midrag,
Da ich nur mehr ein 7.5" b/w 800x480 bekam, ist das ganze natürlich sehr relevant für mich. :)
Ich hab nun die Library wie von dir oben beschrieben eingefügt (Zeile 65/66). Das mit Zeile 8/9 ist mir nicht ganz klar, da es #define BASECAMP_NOOTA 1 ja gar nicht gibt zum Auskommentieren. Mit oder ohne das Auskommentieren kommt jetzt zwar was an, es ist aber so 5x ein überlagertes Bild. :(

Muss man an einer anderen Stelle auch noch was ändern?

lg
bart
Raspberry Pi 4 - FHEM, Homematic HM-CFG-LAN, ESP32 mit ePaper Display, Raspberry Pi 3 - BT Lokalisierung, PC - Squeezebox Server, Raspberry Pi 2 +HifiBerry - SB Player1, Raspberry Pi 2 +AVReceiver - SB Player2, nVidia Shield TV +AVReceiver - SB Player3, 2x Logitech Harmony Hub, echo dot Gen3