ESP8266 mit OLED Display in Blinddeckel

Begonnen von tomster, 11 März 2016, 13:52:13

Vorheriges Thema - Nächstes Thema

tomster

#105
Also ich krieg Deinen Sketch nicht an's Laufen. Er kompiliert und flasht zwar wunderbar, aber nach dem Neustart des ESP's hab ich nur eine wie wild blinkende LED und einen schwarzen Bildschirm. Das WebIf ist leider auch nicht erreichbar...

--edit--
Hab grad nochmal geflasht und gesehen dass das Flöashen mit folgender Meldung endet:

Ungültige Bibliothek C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master in C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master gefunden


--edit's edit--

Ich Vollpfosten. Hab natürlich vergessen Arduino IDE neu zu starten... Nun bootet er durch.

wingfighter

#106
Hallo tomster

Wenn Du etwas Zeit hast, würde ich Dich gern bitten wollen, dass Du Dich mal mit dem Font für die kleinen Schrift (Datum, Zeit, Überschriften etc. ) beschäftigst.
Ich habe das Sketch so umgebaut, dass Du das Ergebnis des Tools DotFactory direkt nutzen kannst. Am besten Du ersetzt nur den Bereich im Array - also alles zwischen { und }; .
Im Anhang findest Du die Version V 0.31 des Sketches und einen Screenshot, wie ich das Tool momentan eingestellt habe.
Getestet habe ich mit Roboto 14pts. Mir gefällt aber die Umsetzung des Tools nicht. Die Zeichen stehen teilweise am rechten oder linken Rand der genutzten Breite. Das führt dazu, dass zwischen den Zeichen unregelmäßige Lücken enstehen.

Vielleicht findest Du eine Einstellung, mit der eine konstante Laufweite umsetzbar ist.

Das Template ESP8266_Basic ist unverändert.

Vielen Dank für Deine Unterstützung
wingfighter

Aktuelle Version auch hier=> https://github.com/wingfighter/ESP8266_OLED_NHD-1.69-160128UGC3

tomster

Hab grad ein bissl mit den Schriftarten gespielt. Dummerweise ist mir nun auch mein anderes Display fast abgekackt. Das hat plötzlich soviele schwarze Streifen, dass man die Schriften nicht mehr vernünftig erkennen kann. Ich denke, ich muss die Dinger ertsmal einschicken um weiter testen zu können...

wingfighter

Ich habe mir am Sonntag zwei neue bestellt. Sind heute per UPS angekommen. ;-)

tomster

Ich mir vorsichtshalber heute nachmittag auch ;-)

tomster

So, Displays sind gestern auch gekommen. Jetzt sieht's wieder fein aus. Allerdings verstehe ich jetzt Deine Aussage mit den unregelmäßigen Lücken zwischen den Buchstaben.
Nachdem ich den Sketch über Nacht durchlaufen hab lassen ist mir aber gerade aufgefallen, dass der Screen-Aufbau stellenweise "schlampig" erfolgt.
Ich hab dann beim Wechsel der Screens noch Artefakte vom vorhergehenden Screen. Das ist dann zwar spätestens beim nächsten Wechsel wieder weg, aber dennoch.

Am Wochenende versuch ich Mal mit den Schriftarten ein bisschen zu Probieren.

tomster

#111
Hmm, irgendwas passt da wirklich noch nicht...

Ich bekomme mit dem Tool noch nicht einmal die gleiche Ausgabe wie Du hin. Wenn ich Deine Einstellungen verwende und eine 14pt Roboto-Font "codieren" lasse, dann sind meine Zeichen nur 19 Zeilen hoch. Deine 20. Damit stimmt natürlich auch das Mapping überhaupt nicht mehr...
Mach ich da was falsch?

Im Übrigen bekomme ich https://github.com/wingfighter/ESP8266_OLED_NHD-1.69-160128UGC3/tree/master/NHD-1.69-160128UGC3_WebConfigLib_ESP8266 nicht kompiliert. Er mosert immer wegen einer ungültigen Bibliothek in der arduino-esp8266fs-plugin-master Library.

Bibliothek Arduino-Temperature-Control-Library-master in Version 3.7.6 im Ordner: C:\Programme\Arduino\libraries\Arduino-Temperature-Control-Library-master  wird verwendet
exit status 1
Fehler beim Kompilieren.
Ungültige Bibliothek C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master in C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master gefunden
Ungültige Bibliothek C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master in C:\Programme\Arduino\libraries\arduino-esp8266fs-plugin-master gefunden


Was spräche eigentlich dagegen, die Ziffern als Images zu hinterlegen? Ich werde das Gefühl nicht los, dass die Wetter-Icons deutlich "sauberer" aufgelöst wirken, als die Schriftarten...

wingfighter

Hallo tomster

Den Fehler kann ich nicht genau nachvollziehen. Diese Library gibt es an der Stelle bei mir auch nicht.
Wenn Du die Daten aus GitHub verwendest, hast Du sicher die ESP8266_Basic-Dateien auch wieder in das libraries-Verzeichnis kopiert. Die habe ich nur wegen der Versionszugehörigkeit in dem Unterverzeichnis abgelegt.
Ich weiß, GitHub möchte eigentlich eine ReadMe haben. Das werde ich gelegentlich nachholen. ;-)

Du kannst die Arrays, die das Tool erzeugt, auch nicht ganz 1:1 verwenden. Darum hatte ich empfohlen, nur die Inhalte der Arrays (In der Version auf GitHub sind die in Datei Font.h ausgelagert) zu kopieren. Dann sollten aber zumindest die korrekte Metrik aus dem zweiten Array gelesen werden. Auch wenn die Position der Ziffern auf dem Display nicht ganz mittig ist, weil die Höhe nicht passt.

Bezüglich des Bildaufbaus habe ich eigentlich inzwischen überall Bereichslöschungen eingebaut, damit keine Pixel stehen bleiben. Ich hatte in einer der letzten beiden Versionen bei der Anzeige der per MQTT übertragenden Werte noch einen Fehler, der dazu geführt hat, dass das Display mit Zufallspixeln gefüllt wurde und des Sketch neu startet. Das ist zumindest in der Version auf GitHub behoben. Und im Post vom 25.04. sollte auch die korrekte Version liegen.

In dem Zusammenhang hätte ich eine Bitte.
Bei vielen Threads werden die aktuellen Dateien im ersten Post hinterlegt, weil jemand, der sich für ein Thema interessiert, immer dort anfängt zu lesen und im Zweifel auch nach neuen Versionen sucht.
Kannst Du Deinen Beitrag eventuell mal editieren und ein paar Screenshots und den Link zu GitHub dort hinterlegen?

Die unterschiedliche Darstellung zwischen den Wetter-Icons und der Schrift rührt übrigens daher, dass in den Bildern sehr viel mehr Farbabstufungen verwendet werden. Das führt am Rand der Symbole zum Antialiasing-Effekt. Daher sind dort keine Treppenstufen zu erkennen. Die Buchstaben werden ja digital Bit für Bit auf das Display geschrieben. Bit an oder Bit aus. Und da macht sich im Randbereich der Treppeneffekt bemerkbar.
Natürlich kann man die Zeichen auch als BMP hinterlegen. Wenn man in PS beim Text Antialiasing einstellt, werden im Randbereich Graustufen verwendet. Und dann sehen die Zahlen sicher schöner aus.

Ich werde das mal testen.

Gruß wingfighter


tomster

Klar, ich hab die Library an die richtige Stelle kopiert. Das IDE jammert ja auch nicht wegen dieser Lib, sondern anscheinende wegen dem FileSystem-Plugin. Ich glaub ich schmeiß das IDE Mal runter und installiere von vorne. Vielleicht wäre das auch gleich der richtige Moment um eine Art Howto zu schreiben ;-)
Vielleicht löst das auch ein paar Probleme, die mir heute aufgefallen sind:

Zumindest bei mir (auf einem Wemos D1 mini) ist weder Port 80 noch 81 per Browser erreichbar.
Testweise hab ich auch probiert das clear-icon.bmp mit dem ESP8266FS-Tool gegen ein BMP-File mit Text auszutauschen. Eben wegen dem Anti-Aliasing. Leider zeigt er dann nur einen schwarzen Screen an.

Ich kann zwar auch wunderbar mit den "gepixelten" Fontsets leben (kann ja locutus auch: https://forum.fhem.de/index.php/topic,52403.msg443552.html#msg443552 ), aber eine Überlegung sind die Graphiken sicher wert.
Wenn wir beispielsweise ein Feld für die Überschrift auf jeder Seite mit z.B. 32x160 Pixel festlegen würden, dann kann man eben diesen Teil selbst nach Belieben Photoshoppen und Hochladen (z.B. Display_1_Header.bmp). Dann kann sich jeder seine Schriftart, Farbe oder was auch immer aussuchen.
Die Aufteilung des Screens vertikal könnte dann
32px
64px
32px
aussehen.
Die dynamischen Werte würden dann aus einzelnen Ziffer-BMPs zusammengesetzt. Graphisch sicher die schönere Lösung, wenn auch nicht mehr ganz so flexibel.

Ach ja, den Link zu deinem GIT Repository hab ich im Eingangsthread eingefügt. Ist sicher mehr als sinnvoll.

LG,
Tom


wingfighter

Ich habe mich mal mit der Idee der BMP je Ziffer beschäftigt.
Ich halte das aus zwei Gründen für kein ganz so gute Idee.
Es ist recht aufwändig, für jede Ziffer ein BMP zu bauen. Das Bild muss dann eine weiße oder farbige Ziffer auf schwarzem Grund haben. Dabei muss das schwarz dem des Displays entsprechen, sonst erkennt man die Kante des Bildes.  Das ist z.B. bei dem Wind-Symbol der Wetter-Icons zu erkennen.
Möchte jemand einen farbigen Hintergrund, wird es mit der Gleichheit der Bild- und Displayfarbe noch schwieriger.
Zudem wird der Bildaufbau langsamer, weil die BMP's bei jeder Anzeige-Runde aus dem Speicher geladen werden müssen.

Das zweite Argument ist die Auflösung unseres Sehvermögens.
Der Mensch hat eine Winkelauflösung von einer Bogenminute. Das sind 0,0167°. Daraus ergibt sich, dass er bei einem Betrachtungsabstand von z.B. 30cm Punkte mit einem Abstand von 0,087mm erkennen kann. Unser Display hat in der Senkrechten genau ein Zoll. Bei 128 Pixeln ergibt das einen Abstand von 0,19mm.
Wenn man das umrechnet, kommt man auf 0,68 m, ab der man keine einzelnen Pixel mehr erkennt. Die Treppenstufen erkennt allerdings man aus einem größeren Abstand, weil die aus 2-3 Pixeln bestehen.
Und nun hängt es natürlich vom Anwendungsfall ab, ob man das Display üblicherweise aus einer kleineren Entfernung abliest oder eben doch eher vom Sofa aus. ;-)
Und: Es kann auch nicht jeder mit PhotoShop oder ähnlichen Grafikprogrammen umgehen um sich seine individuellen Zeichen zu bauen.

Ansonsten habe ich auch mal versucht, die Übergänge zwischen den Anzeigen etwas weicher zu gestalten. Aber da speilt das Display nicht mit. Man kann die Helligkeit des Displays über drei Register steuern. Aber sie verändert sich nicht linear bis Null, sondern bleibt bis zum Wert 1 (von 255) recht hoch und schaltet dann auf aus. Ein softes FadeIn und FadeOut gelingt damit leider nicht. Eventuell gibt es aber dafür noch andere Register. Da muss ich mir die Doku noch einmal anschauen.

@tomster
Warum das Wemos D1 mini nicht per Port 80 oder 81 erreichbar sein soll, verstehe ich allerdings nicht. Den  der Kern des Boards ist ja auch ein ESP8266. Und in dem läuft der Sketch und wird das W-Lan gesteuert.
Ich hab' mir mal so ein MiniModul bestellt. Passt sicher besser hinter das Display. Vielleicht kann ich den Effekt nachvollziehen.



wingfighter

Ich habe mal eine aktualisierte Version V 0.32 auf github hoch geladen.


  • Der roboto Standard Font ist jetzt mit 22 Bit Höhe eingebunden.
  • Bei den Einstellungen der einzelnen Screens können jetzt Anzeigedauern in Sekunden vorgegeben werden.
  • Wie im vorigen Post beschrieben, habe ich mal testweise das Fading zwischen den Screens eingebaut - beurteilt selbst!
  • Kleine Schönheitskorrekturen (u.a. automatisches Zentrieren der blauen Texte).

Gruß wingfighter


tomster

#116
Uii, super. Werd ich gleich einmal ausprobieren.

Ich habe übrigens das 1. Posting dieses Threads um ein kleines HowTo erweitert. Das macht es wohl einfacher die einzelnen Libraries zusammenzusuchen.

--edit--

Das Fading fände ich eigentlich ganz gut, aber ist wohl in der Praxis nicht sauber umzusetzen. Ab einem gewissen Wert erfolgt wohl kein Fade mehr, sondern das Dispaly wird schlichtweg schwarz...

Ausserdem kommt es bei mir nach einigen erfolgreichen Screenwechseln plötzlich zum Ausfall der Anzeige mit spontanen Fehlern, respektive "Reboots". Hier Mal ein Auszug aus dem seriellen Monitor:

read config

mounting FS...
mounted file system
reading config file
opened config file
json success

Exception (28):
epc1=0x4000bf3c epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont
sp: 3fff95a0 end: 3fff9830 offset: 01a0

>>>stack>>>
3fff9740:  3fff874c 3fffaf88 3fff6950 4020f1cc 
3fff9750:  3ffeeb48 00000000 000003e8 40215175 
3fff9760:  3fffaf04 3fffaf54 3ffec200 40215175 
3fff9770:  3fffaf7c 00000200 3fffa184 402182a0 
3fff9780:  3ffef70c 3fff874c 3fff874c 3fff8808 
3fff9790:  3fffdad0 3fff874c 3fff6950 4020fe90 
3fff97a0:  3ffebae4 3ffef70c 3fff874c 4020eba0 
3fff97b0:  00400000 00000002 40215a48 3fff8810 
3fff97c0:  4020153a 00000005 00000005 3fff8808 
3fff97d0:  3fffdad0 3fff8450 3fff6950 40210131 
3fff97e0:  3fffdad0 3fff874c 00000000 40208e49 
3fff97f0:  feefeffe feefeffe feefeffe feefeffe 
3fff9800:  feefeffe feefeffe feefeffe feefeffe 
3fff9810:  3fffdad0 00000000 3fff8801 40215a8c 
3fff9820:  feefeffe feefeffe 3fff8810 40100958 
<<<stack<<<

ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld

============================================
Flash real id:   001640E0
Flash real size: 4194304
Flash ide  size: 4194304
Flash ide speed: 40000000
Flash ide mode:  DIO
Flash Chip configuration ok.
============================================


Dieses Spielchen wirderholt sich dann quasi bis zum Sanktnimmerleinstag. Wenn ich dann den data-Ordner neu flashe funktioniert es wieder ein paar Mal, danach geht es aber wieder in den obigen Loop.

-- edit --
Hab den Sketch testweise auch auf einem nodeMCU geflasht. Nach ein paar Cycles bekomme ich den gleichen Effekt. Der Sketch loopt...

Auch wenn ich nicht glaube, dass es daran liegt möchte ich noch erwähnen, dass ich derzeit kein MQTT-Device auf FHEM angelegt habe. Der Sketch läuft also mit dem Code, ohne dass er Daten von FHEM holt.

wingfighter

Das hatte ich auch ab und zu mal.
Die Fehlermeldung
ets Jan  8 2013,rst cause:2, boot mode:(3,7) sagt aus (http://www.esp8266.com/viewtopic.php?p=2096#p2112), dass Reset betätigt wurde. Das wirst Du sicher nicht in der Häufigkeit tun. ;-)
In verschiedenen Foren habe ich auch gelesen, dass gerade wegen dieses Fehlers über alternative Entwicklungsumgebungen nachgedacht wird. Hier im Forum gibt es dazu auch einen Thread (https://forum.fhem.de/index.php/topic,51356.0.html)

Eventuell löschst Du mal im Temp-Verzeichnis den Ordner, in dem sich die compilierten Daten befinden. Dann übersetzte die Arduino-IDE alle Module neu.

Ich vermute aber eher, dass die Struktur der config.json nicht mehr passt. Ich habe wegen der neu hinzugekommen Felder für die Anzeigedauer einiges an der Struktur geändert.
In der Datei ESP8266_Basic.cpp Zeile 668/669 habe ich das Löschen der vorhandenen config.json eingebaut und auskommentiert.

    if (SPIFFS.exists("/config.json")) {
      //file exists, reading and loading
      Serial.println("reading config file");
//   SPIFFS.remove("/config.json");
//      return readOK;
      File cfgFile = SPIFFS.open("/config.json", "r");


Wenn Du diese Zeilen einkommentierst, das Sketch überträgst und einmal durchlaufen lässt und dann wieder die Zeilen auskommentierst und das Sketch neu überträgst, wird die config.json neu angelegt und enthält alle Variablen, die benötigt werden.

:Fade
Der Übergang von der dunkelsten Darstellung zu schwarz ist übrigens der von 1 zu 0. Dazwischen gibt es leider keine Zwischenschritte. ;-)


Gruß wingfighter

tomster

#118
Eigentlich müssten doch sowieso alle Module neu kompiliert werden, da doch beim Ändern des Boards von Wemos -> nodeMCU die Build-Optionen geändert werden, oder?

Ich hab nun Mal die Stellen in der ESP8266_Basic.cpp einkommentiert. Nun scheint es besser zu Laufen. Hab schon seit einigen Minuten keinen Reset mehr.
Leider nur bedingt. Sobald ich versuche per HTTP auf den ESP zuzugreifen kommt es wieder zum Reboot. Wenn auch augenscheinlich dann nur 1 Mal...

Fade:
Klar, dass der letzte Sprung von 1 auf 0 geht. Ich hab mich da wohl ein bissl ungenau ausgedrückt. Das Faden funktioniert von Screen 1 nach 2 nach 3 recht gut (Anzeige der Werte/ des Icons ca. 6 Sekunden von Fade in->Fade out. Von 3 zurück nach 1 kommt es aber zum beschriebenen Effekt. Es fadet aus bis schwarz (da ist der plötzliche Sprung am Ende) und braucht dann deutlich länger, bis wieder Screen 1 angezeigt wird (~ 12 Sekunden).

wingfighter

Stimmt, wenn Du das Board wechselt, sollte er eh alles neu compilieren.

Du hast nach dem Löschen der config.json aber die beiden Zeilen gleich wieder auskommentiert. Sonst löscht das Sketch beim Aufruf der Webseite die gerade angelegte config.json wieder. ;-)
Und das führt dann zum Absturz.