Uhrzeit auf externem LED-Display anzeigen

  • Gemäss Schema ist der 5V Ausgang auf dem Heltec direkt mit 5V vom USB - Port verbunden. 2020-01-15_21-22-29.png

    Damit hängt der maximale Strom auf dem 5V - Leitung alleine von der Leistungsfähigkeit der USB - Speisung ab. Somit ist auch klar, dass die Spannung bei höherer Strombelastung auf deutlich unter 5V fallen kann. Falls diese Spannung zu tief fällt, stellt der 3.3V Spannungsregler seinen Dienst ein und der Prozessor wird nicht mehr laufen.


    Gruss

    René

  • Hallo Kai,


    die "unsichtbaren Steckbrücken" sind eine gute Idee, das macht den Aufbau übersichtlicher.


    Das Heltec Board hat einen 5V Ausgang. Ich werde nochmals den Gesamtstrom messen und dann evt. diesen Ausgang nutzen.


    Gruß Jürgen

  • Hallo Jürgen,


    ich hatte seinerzeit, als ich untenstehenden Beitrag schrieb, den ESP über die USB Schnittstelle meines Laptops mit Strom versorgt und versucht das Display am 5V Ausgang des NodeMCU Boards zu betreiben. Das hat nicht funktioniert.

    Ich bin der Sache aber nicht auf den Grund gegangen. Vielleicht war einfach der Gesamtverbrauch für die Schnittstelle zu groß.


    Ob dieses Heltec Board so einen 5V Ausgang hat, weiß ich nicht. Laut Datenblatt des ESP (5.2 Recommended Operating Conditions) sind max. 40mA (High level souce current) und max. 28mA (Low level sink current) bei 3,3V möglich.


    ESP Datenblatt

    ESP32 Pinout Reference


    Was das Bild in meinem Beitrag betrifft, 3,3V und GND sind über Steckbrücken (nicht sichtbar) unter dem NodeMCU-Board in die Mitte des Breadboards geführt. Die Spannung und GND wird über die, im Bild sichtbaren, Drahtbrücken am Levelkonverter wieder abgegriffen.


    Gruß Kai

    Das Reh springt hoch. Das Reh springt weit. Warum auch nicht? Es hat ja Zeit. 8o

  • Hallo Kai,

    ich bin leider erst jetzt dazu gekommen die Schaltung aufzubauen.

    Es hat funktioniert.


    Hatte anfangs Schwierigkeiten, da ich auf deinem Bild nicht erkennen konnte, wie GND am ESP32 angeschlossen ist.


    Ich habe auch eine externe Stromversorgung mittels Arduino benutzt (hatte gerade keine andere Möglichkeit) .


    Für das Display habe ich einen Strom von ca. 20-25 mA gemessen (5V).


    Wie hoch kann der 5V Anschluss des ESP32 belastet werden?


    Gruss Jürgen


    Bild vom Aufbau

    Display_mod.jpg

  • Hallo Christian,


    deine Idee gefällt mir sehr gut. Dein Code entschärft das Problem beträchtlich. Mit Umlauten und dem Grad - Symbol lassen sich bereits vernünftige Darstellungen realisieren.


    Da uns im Kurs die Datenbeschaffung (Wettervorhersage) noch eine Weile beschäftigen wird, werde ich das Display - Problem etwas hinten anstellen. Das nächste Mal geht es um den Bezug von Wetterdaten über einen Webservice. Man merkt dabei sehr schnell, dass das eingebaute OLED viel zu klein ist. Um doch damit arbeiten zu können wird später das Programm so erweitert, dass es seine Daten auf eine Webseite ausgeben kann. Das verschafft beinahe unendlich viel Platz zum Experimentieren.


    Gruss

    René

  • Hallo zusammen,


    mit den Displaytreibern und den Umlauten ist die Situation ja tatsächlich nicht ganz so zufriedenstellend. Man kann das Thema sehr grundlegend angehen und eigene Schriftarten/-zeichen im ROM des Mikroprozessors ablegen. Dazu muss man allerdings Micropython eigens kompilieren. Wer sich damit beschäftigen will, der findet unter https://github.com/peterhinch/micropython-font-to-py einen guten Startpunkt.


    Wem nur die Umlaute und beispielsweise das Gradsymbol fehlen, der kann sich auch anders helfen. Ausgangspunkt ist die text_line-Funktion von René.



    Ich habe nur ein paar Sonderzeichen behandelt und der Code lässt sich vermutlich auch noch optimieren. Wer mag, kann das ganze ja erweitern oder ändern.


    pasted-from-clipboard.png

  • Hallo René,


    das Display war vorhanden und zumindest funktioniert es rudimentär.


    Leider muß ich Dir recht geben was die Unterstützung vom µPython und Displays angeht.


    Gruß

    Gerhard

  • Hallo Gerhard,


    leider ist der Standardtreiber für den SSD1309 sehr schwach. Bereits die Darstellung von Umlauten macht Probleme. Der relativ hohe Preis für ein grosses OLED wäre nur zu rechtfertigen, wenn der Treiber alle Möglichkeiten eines Grafikdisplays ausnützen würde. Dazu gehören zum Beispiel Umlaute, verschiedene Fonts und Bitmaps. Ich hoffe, dass ich hier eine Möglichkeit finden werde. Leider ist Micropython in dieser Hinsicht etwas schwach.


    Momentan liegt der Schwerpunkt eher bei der Kommunikationsfähigkeit. Hier sind ESP32 und Micropython sehr stark.


    Gruss

    René

  • Hallo,


    eine andere Alternative wäre vielleicht ein OLED mit 2,42Zoll mit SSD1309 Treiber.

    Ist aber nicht ganz billig. Kostet so um die 30€.

    Es ist 1:1 kompatibel mit dem 0,96Zoll mit SSD1306 Treiber.

    Leider kann ich noch keine Bilder und Dateien hochladen.


    MfG

    Gerhard

  • Hallo Jürgen,


    gern geschehen. Ich habe nur meine eigenen Neugier befriedigt ;-).


    Statt eines Levelkonverters, habe ich gerade einen einfachen Spannungsteiler aus zwei Widerständen (pro Leitung) ausprobiert. Das haut nicht hin.


    Gruß Kai

    Das Reh springt hoch. Das Reh springt weit. Warum auch nicht? Es hat ja Zeit. 8o

  • Hallo Kai,


    vielen Dank für deine sehr ausführliche Antwort.


    Ich werde die Schaltung nach deinem Beispiel aufbauen, einen Levelconverter habe ich auch noch gefunden. Den Strom kann ich mal Messen, hatte das Display schon an einem Arduino verwendet.


    Gruss Jürgen

  • Hallo Jürgen,


    die Sache mit dem LCD ist ziemlich einfach. Lade die Dateien esp8266_i2c_lcd.py (nicht vom Dateinamen irritieren lassen, der Code funktioniert auch auf dem ESP32) und lcd_api.py auf den ESP. Ich habe es mal mit den PINs 21 (SDA) und 22 (SCL) probiert. Im Quellcode müssen die Pins eingegeben werden. Ein Beispiel:


    Da ich kein 2x16er Display habe, musste ich ein 4x20 Display benutzen. Aber das macht im Prinzip keinen Unterschied. Bei einem 2x16 LCD muss der Befehl lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 4, 20) in lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) geändert werden. Je nachdem was man für ein Backpack auf dem Display hat, unterscheidet sich die I2C Adresse. Oft ist sie 0x27, in meinem Fall ist sie 0x3F. Das ist wichtig für die Definition "DEFAULT_I2C_ADDR", welche auch in dem vorgenannten Befehl benutzt wird.


    Mit dem Aufruf der Methode lcd.move() wird die Cursorpostition bestimmt. Der erste Wert ist die Zeichenposition in der Zeile. Der zweite Wert gibt die Zeile an. Es wird bei 0 angefangen zu zählen. Die Methode lcd.putstr() gibt einen gegebenen Textstring, an der vorher gesetzten Cursorposition aus.


    Es gibt noch einige Befehle mehr, die kann man sich in den Beispielcodes auf der von René angegebenen Seite anschauen, bzw. dem dort angegebenen Link auf Github LCP Micropython Code.


    Ich habe die zwei notwendigen Systemdateien und die Testdatei hier angehangen: ESP32-Micropython-LCD.zip


    Hier ein Bild vom Aufbau:

    ESP32-LCD.jpg


    Das kleine blaue Teil links im Hintergrund ist ein Levelconverter. Hier wird die 5V Spannung vom LCD Display auf 3,3V (und umgekehrt) geregelt, damit man sich nicht den ESP zerstört. Ein Spannungsteiler (z.b. 4,7kΩ zu 9,1kΩ oder ähnlich) könnte auch klappen, habe ich aber noch nicht ausprobiert. Das LCD hat auch eine eigene Stromversorgung (es braucht um die 35-40mA). Der 5V Ausgang vom ESP bringt das nicht. Das kleinere 2x16er Display wird weniger brauchen. Wie viel genau, kann ich nicht sagen, weil ich keins habe um das nachzumessen. Es kommt auch etwas darauf an, wie hell man das Backlight einstellt. Evtl. ist der Verbrauch gering genug, dass der ESP das noch schafft.


    So ... falls Du dein LCD Display doch noch benutzen willst, hast Du jetzt eigentlich alles was Du dafür brauchst.


    Gruß Kai


    PS: Wer das fehlende „a“ findet, darf es behalten ;-).

    Das Reh springt hoch. Das Reh springt weit. Warum auch nicht? Es hat ja Zeit. 8o

  • Hallo René,

    danke für deine Antwort und die Warnung.

    Leider bin ich mit der Information aus dem Forum noch nicht weiter gekommen.

    Ich weiß noch nicht an welchen Pins ich SCL und SDA anschließen muß bzw. im Programm festlegen kann.

    Werde noch weiter recherchieren.


    Das mit dem grafischen LCD finde ich eine gute Idee. Werde mir eines besorgen.

    Ich hoffe du gehst in einem deiner Videos auf dieses Thema ein.


    Gruss

    Jürgen

  • Hallo Jürgen,


    das kann ich dir leider im Moment auch nicht sagen, da ich mich noch nie damit beschäftigt habe. Du kannst aber schauen, ob dir die Informationen im Micropython - Forum weiterhelfen. Leider sind diese in englischer Sprache.

    Ich selbst würde grafische LCDs mit einer Auflösung von mindestens 480x320 Pixel vorziehen, da diese auch Grafiken darstellen könnten. Ich habe mich aber noch nicht für ein bestimmtes Produkt entschieden.


    https://forum.micropython.org/viewtopic.php?t=5353


    Noch eine Warnung: die LCDs laufen mit 5V, der ESP32 mit 3.3V. Wenn du nicht vorsichtig bist, überlebt das dein ESP32 nicht.


    Gruss

    René

  • Hallo René,

    die Darstellung von Datum und Uhrzeit auf dem OLED-Display hat funktioniert.


    Da das Display jedoch recht klein ist, würde ich gerne ein „externes“ LED-Display (2x16) mit I2C-Schnittstelle benutzen.

    So wie du es in der letzten „Plauderei am Donnerstag“ für den Arduino gezeigt hast.


    Welche Module muß ich hierzu importieren und mit welchen Befehlen wird das Display in Micropython angesprochen?


    Gruß Jürgen