2.2" Farb-TFT am ESP8266-12

  • Hallo zusammen,
    im Zuge meiner Experimente mit dem ESP8266 hatte ich mir in den Kopf gesetzt folgendes 2.2" TFT Display anzusteuern:


    [Blocked Image: http://dreamshader.bplaced.net/Downloads/TFT22_SD.jpg]


    Dabei handelt es sich um ein QVGA Farb-Display mit 240x320 Pixeln Auflösung.


    Ich bin da anfangs in ein paar kleinere Fallen getappt, was ich Euch gerne ersparen würde.
    Damit das Zusammenspiel zwischen Display und ESP reibungslos klappt ist nämlich eine speziell angepassten ILI9340-Bibliothek nötig (siehe: https://github.com/glennirwin/Adafruit_ILI9340 ).


    Also, was wird benötigt?

    • die aktuelle Arduino-IDE mit ESP8266-Unterstützung
    • die Libraries "Adafruit_GFX.h" und "Adafruit_ILI9340.h"
    • ein ESP8266-12
    • ein 2.2" TFT-Display


    Wenn wir schon so ein schickes Display verbauen, dann sollten wir das auch im Rahmen eines einigermassen sinnvollen Klein-Projektes machen.
    Ich habe mir dazu einen Status-Monitor überlegt, der die aktuellen "Lebensdaten" eines Raspi per WLAN übermittelt bekommt und sie optisch einigermassen ansprechend darstellt.


    Die Anzeige soll folgende Werte umfassen:

    • Datum
    • Wochentag
    • Uhrzeit
    • CPU-Temperatur
    • System-Load
    • IP-Adresse des Raspi
    • freier RAM in MB
    • freier Platz auf der SD-Karte in MB


    Tja, dann verdrahten wir das ESP-Modul mal mit dem TFT Display.
    Die Verbindungen müssen wie folgt hergestellt werden (siehe auch Schaltplan im Anhang):


    TFT_DC -> ESP-D5
    TFT_CS -> ESP-D4
    TFT_MOSI -> ESP-D13
    TFT_CLK -> ESP-D14
    TFT_RST -> ESP-D16
    TFT_MISO -> ESP-D12
    TFT_LED -> ESP-D2
    TFT_VCC -> ESP-VCC
    TFT_GND -> ESP-GND


    Und das war's dann auch schon. Überprüft die Verbindungen sicherheitshalber noch einmal.
    Im Anhang findet ihr zwei sketches: ESP8266_22TFT_DUMMY.zip und ESP8266_22TFT_NET.zip.
    ESP8266_22TFT_DUMMY.zip ist ein Demoprogramm, das die Daten nur simuliert.
    ESP8266_22TFT_NET.zip ist der sketch mit Netzwerk-Unterstützung.


    Tipp zur Datenanzeige:
    Die Refresh-Funktionen können mit einem Parameter für die Vordergrund-Farbe aufgerufen werden:
    z.B. tft_TempRefresh( 1000, ILI9340_GREEN, ILI9340_BLACK, ...
    Ihr könnt z.B. abhängig von der CPU-Temperatur auch
    tft_TempRefresh( 1000, ILI9340_YELLOW, ILI9340_BLACK, ...
    oder
    tft_TempRefresh( 1000, ILI9340_RED, ILI9340_BLACK, ...
    aufrufen und damit die Temeratur auch optisch als kritisch oder zu hoch darzustellen.


    Es gibt ESP-Module, bei denen sind GPIO4 und GPIO5 vertauscht!


    Falls das bei Euch also nicht klappt, und ihr nur grau-weisses Gegrissel auf dem Display angezeigt bekommt, dann habt ihr eventuell auch ein solches Modul erwischt. Dann einfach die Verbindungen von GPIO4 und GPIO5 tauschen.


    [hr]
    [an=History]History:[/an]
    19.05.2016: Erste Version fertiggestellt
    22.05.2016: Netzwerk-Version fertiggestellt
    22.05.2016: Server daemon dazugepackt
    25.05.2016: Hinweis auf die vert. GPIOs eingefügt


    [hr]


    Na dann wünsche ich Euch mal viel Spass beim Nachbauen,
    -ds-

  • Sehr interessantes Projekt, bin schon auf die Netzanbindung gespannt.


    Mir ist dabei eingefallen ob es eine Möglichkeit gibt, eine einzige festeingestellte Webseite auch so darzustellen?


    Ich denke dabei an eine Wetterseite, oder Diagramme aus dem Volkszähler Web- Frontend. Oder das Bild einer IP- Cam.


    Anwendungen gibt es da viele.


    Wie ist es mit der Skalierbarkeit des Displays? Muss der Sketch z. B. für 3,5 Zoll komplett angepasst werden?

    Edited once, last by rmjspa ().

  • Hi,
    naja ... für andere Displays muss der sketch zwangsläufig angepasst werden, allein schon, weil die andere Controller haben.
    Erschwerend kommt hinzu, dass für den einen oder anderen Controller manchmal eine speziell für den ESP angepasste Version einer Library nötig ist.


    Das mit der Webseite verstehe ich jetzt nicht ... :s
    Sicher kannst Du ein (gezeichnetes oder gespeichertes) Bild als Seite anzeigen. Und dann? Du hast da keine sensitiven Bereiche drin, die auf einen Klick reagieren würden. Bringt als irgendwie nix ...


    Eine Wetterseite, Diagramme oder Bilder einer IP- Cam gingen schon ... allerdings hat das Display nur 240 x 320 Pixel Auflösung - da wirst Du nicht weit kommen.


    cu,
    -ds-

  • Die geringe Pixelzahl stellt dann ein Problem dar, für das was mir so vorschwebte.


    Mit der Webseite meinte ich:


    Du hast ja im Augenblick ein dummy für die Daten erzeugt. Ich vermute mal, dass später die verschiedensten Werte auf einem Webserver liegen und diese dann als html Seite vom ESP mit Display aufgerufen werden.


    Dann müsste ja auch möglich sein, z.B. das Web-Frontend vom Volkszähler aufzurufen. Mit einem entsprechenden refresh, sollte so der Graph kontinuierlich angezeigt werden.


    Ich meine damit, dass eine fest vorgegebene Webpage kontinuierlich aufgerufen wird und somit immer die aktuelle Seite angezeigt wird. Auf ein wechseln zu anderen Seiten wie in einem Browser, kommt es bei etlichen Anwendungen gar nicht darauf an.


    Aber vielleicht stelle ich mir das alles zu einfach vor. Bin auf jeden Fall gespannt wie es weiter geht.

  • Naja ... das mit dem Status-Monitor ist ja auch nur eine Beispiel-Anwendung, damit das Ganze Sinn und optisch wenigsten etwas hermacht.
    Die Daten soll später z.B. ein Raspi per WLAN an das Modul übermitteln. Damit könnte man sich den Status-Monitor an die Wand in der Küche hängen und die Lebensdaten des Raspi im Heizungskeller dort anzeigen.


    Aber - wie gesagt - das ist nur mal als Beispiel gedacht.
    Ich könnte mir auch vorstellen so eine Art Dia-Show auf einem ESP Ablaufen zu lassen und die Bilder ebenfalls per WLAN zu übermitteln.


    Na mal sehen, was da noch so alles kommt.
    Das mit einer Webpage auf dem ESP läuft ein bisschen anders, weil Du auf dem Modul kein OS (im Sinne von z.B. Linux) hast und demzufolge auch keinen Apache ...
    Da kannst Du aber mal meine ESP-Threads hier durchflöhen ... da ist alles mögliche dabei: vom Abspeichern variabler Daten im EEPROM bis zur Eingabemaske für Zugangsdaten.


    cu,
    -ds-

  • Hallo zusammen,
    die netzwerkfähige Version habe ich im Ursprungs-Beitrag ( -> hier <- ) in den Anhang gepackt.


    Das Modul wird jetzt über http-Requests mit Daten versorgt.
    Wie die Schnittstelle aussieht ist im sketch beschrieben.
    Dadurch kann der Monitor z.B. mit cURL-Aufrufen aktuell gehalten werden.
    Einen einfachen daemon, der das übernimmt reiche ich demnächst noch nach.


    Viel Spass damit,
    -ds-

  • So, um das Ganze jetzt rund zu machen habe ich Euch, wie versprochen, den Server-daemon im Ausgangs-Beitrag ( -> hier <- ) in den Anhang hochgeladen.
    Dazu gibt es nicht viel zu sagen.
    Ladet Euch das zip-File herunter und entpackt es in einem Ordner Eurer Wahl.
    Achtung, wichtig: in diesem Ordner ein Verzeichnis "bin" anlegen. Das wird später zum Übersetzen benötigt.


    Es macht natürlich Sinn dem ESP jetzt eine IP zu reservieren, sonst müsst ihr dauernd nachschauen, welche IP das Teil gerade hat.
    Am Anfang des daemon-programms sind einige Konstanten mit folgender Bedeutung:

    Code
    CPU_TEMP_FILE


    das steht für die Datei des procfs, die die CPU-Temperatur beinhaltet.
    Beim Raspi ist das "/sys/class/thermal/thermal_zone0/temp"

    Code
    IP_INTERFACE


    Da muss auf den Namen des Netzwerk-Adapters gesetzt werden, über den das ESP-Modul zu erreichen ist.
    Meist ist das "eth0" oder "wlan0".

    Code
    ESP_IPADDR


    Hier tragt ihr die IPv4 Adresse ein, die das ESP-Moduls in Eurem Netzwerk hat.

    Code
    ESP_PORT


    Schliesslich muss dieser Wert noch auf den Port gesetzt werden, auf dem das ESP-Modul den WWW-Server gestartet hat.
    Die beiden letzten Werte müssen mit den Einstellungen im ESP-sketch identisch sein.


    Jetzt einfach noch make aufrufen. Das ausführbare Programm steht dann im Unterverzeichnis ./bin/.
    Das Programm startet als daemon. D.h. es geht von sich aus in den Hintergrund. Vorher wird Euch aber die PID ausgegeben. Die braucht ihr, um den daemon mit kill zu beenden.


    Da das nur eine Art "Machbarkeits-Studie" ist, sind Fehlerchecks und andere Feinheiten sind so gut wie nicht vorhanden.



    Na jetzt aber viel Spass,
    -ds-

  • Was mir noch einfiel:


    Es gibt ESP-Module, bei denen sind GPIO4 und GPIO5 vertauscht!


    Falls das bei Euch also nicht klappt, und ihr nur grau-weisses Gegrissel auf dem Display angezeigt bekommt, dann habt ihr eventuell auch ein solches Modul erwischt. Dann einfach die Verbindungen von GPIO4 und GPIO5 tauschen.


    cu,
    d-s-

  • Yao, ich habe heute ein solches Display an einem NodeMCU V3 (LoLin) Betrieb genommen..


    War etwas (sehr) hakelig, da die Pin-Bezeichnungen mit dem ESP8266-12e nur sehr entfernt was zu tun haben...


    Ich habe nun die folgende Pin-Definition am Start (hier aus dem ...default.ino von dreamshader):



    Der Chip-Select auf GPIO 4 wollte gar nicht... hab ihn fix auf 3.3V geklemmt (demnächst mit VW von 1k)...


    Der NodeMCU ist schon etwas "merkwürdig", für mich ideal, da er die 3.3V Versorgung mitbringt... ich versorge das Display direkt von Board aus...


    Da ich noch 3 DS18xx anschliessen will, wird da wohl noch etwas Umgruppieren notwendig sein... einen Ausgangs-Port (für SSR) brauch ich auch noch... nu, mal sehen


    das Zen
    (das musste mal gesagt werden! ) :lol:

  • Moin!
    Danke an dreamshader und Zentris für ihre Beiträge!


    Ich habe auch einen NodeMcu v3 von LoLin und ein "baugleiches" Display genommen und es nachgebaut.
    Bei mir wollte es absulut nicht laufen. Zentris Änderungen haben sehr geholfen. Aber mein esp8266 wollte so nicht anlaufen.
    Erst als ich NodeMcu D4 von LED getrennt habe lief er hoch. Also habe ich TFT_LED an 3,3 gelegt.
    Aber es wollte immer noch nicht richtig. Der Hinweis in Zentris Mail hat mich stutzig gemacht.
    Bei meinen Display ist TCF_CS negativ active. Darum habe ich diesen Port permanent auf G gelegt.


    Und siehe da, alles funktioniert.


    Abwohl wir, Zentris und ich, die gleichen Sachen nutzen, gibt es trotzdem Unterschiede.


    Dies ist nur als Hinweis gemeint.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Hi dreamshader,


    Jetzt einfach noch make aufrufen. Das ausführbare Programm steht dann im Unterverzeichnis ./bin/.


    Könntest Du mir mal bitte helfen.


    Ich bekomme das Programm nicht compiliert.


    Es kommt immer:
    root@raspberrypi-i:~# cd /root/espmonitor
    root@raspberrypi-i:~/espmonitor# make
    gcc -Wall -o ./bin/espMonitorDaemon espMonitorDaemon.c -lcurl -lconfuse -lpthread -lrt
    espMonitorDaemon.c:19:24: fatal error: curl/curl.h: Datei oder Verzeichnis nicht gefunden
    compilation terminated.
    Makefile:20: recipe for target 'bin/espMonitorDaemon' failed
    make: *** [bin/espMonitorDaemon] Error 1
    root@raspberrypi-i:~/espmonitor#


    System ist ein Rasbian Jessie

    cu C-3po

    Edited once, last by C-3po ().

  • Servus,
    ah ok, da fehlt Dir die curl und die confuse-Library.


    Also curl wäre


    Da kann ich jetzt gar nicht sagen, welche Du da nehmen musst. :s
    Ich hatte das auf meinem Ubuntu Laptop laufen und da ist libcurl4-gnutls-dev installiert. Also würde ich jetzt die mal probieren ...
    Die Confuse-Lib bekommst Du auch direkt mit apt-get

    Code
    pi@pi-robot:~$ sudo apt-get install libconfuse-dev


    Und jetzt klappt's auch mit dem make:

    Code
    pi@pi-robot:~$ make                                                             
    gcc -Wall -o ./bin/espMonitorDaemon espMonitorDaemon.c  -lcurl -lconfuse -lpthrt
    /usr/bin/ld: cannot open output file ./bin/espMonitorDaemon: Datei oder Verzeicn
    collect2: error: ld returned 1 exit status                                      
    Makefile:20: recipe for target 'bin/espMonitorDaemon' failed                    
    make: *** [bin/espMonitorDaemon] Error 1                                        
    pi@pi-robot:~$ mkdir bin                                                        
    pi@pi-robot:~$ make                                                             
    gcc -Wall -o ./bin/espMonitorDaemon espMonitorDaemon.c  -lcurl -lconfuse -lpthrt
    pi@pi-robot:~$


    Evtl. musst Du noch das bin-Verzeichnis (so wie bei mir) anlegen ...


    cheers,
    -ds-

  • Hi



    curl ist aktuell

    Code
    sudo apt-get install libconfuse-dev


    hat allein nichts gebracht,
    erst nach dem

    Code
    sudo apt-get install libcurl4-gnutls-dev


    ist make durchgelaufen.


    nach dem Start kommen auch Werte auf dem Display an.


    THX

    cu C-3po

  • Hi dreamshader,


    habe es eben mal auf ein BananaPi installiert.


    für die Temp Anzeige muss:


    Code
    #define CPU_TEMP_FILE "/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input"


    eingetragen werden.


    THX

    cu C-3po

    Edited once, last by C-3po ().