Adafruit_GFX und ILLI9341 display

Beim Anschluß eines Illi9341 240x320 displays komme ich nicht recht weiter. Meine Umgebung: WIN10, ESP32 und Arduino IDE 2.2.0, in der ich das graphicstest.ino Beispiel zum testen verwende. Das Ergebnis: das display wird angesprochen und zeigt die erwarteten Testbilder, allerdings stimmen Breite und Höhe der Darstellung nicht. Das zeigt sich auch in Diagnostik Ausgabe des Programms:

ILI9341 Test!
Display Power Mode: 0x0
MADCTL Mode: 0x0
Pixel Format: 0x0
Image Format: 0x0
Self Diagnostic: 0x0
Benchmark Time (microseconds)
Screen fill 200221
Text 25994
Lines 252818
Horiz/Vert Lines 18314
Rectangles (outline) 11986
Rectangles (filled) 416251
Circles (filled) 73321
Circles (outline) 112478
Triangles (outline) 55928
Triangles (filled) 154869
Rounded rects (outline) 46621
Rounded rects (filled) 423091
Done!

Verdrahtung und settings ---------------------------------

#define _cs 17 // violet TX2/CS
#define _dc 16 // blue DC
#define _mosi 23 // orange MOSI
#define _sclk 18 // green SCK/CLK
#define _rst 5 // brown RESET
#define _miso // Not connected
// 3.3V // Goes to TFT LED
// 5v // Goes to TFT Vcc
// Gnd // Goes to TFT Gnd
*/

#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ILI9341.h> // include Adafruit ILI9341 TFT library

#define TFT_CS 17 // TFT CS pin is connected to arduino pin 8
#define TFT_RST 5 // TFT RST pin is connected to arduino pin 9
#define TFT_DC 16 // TFT DC pin is connected to arduino pin 10
// initialize ILI9341 TFT library
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

Hat Jemand eine Idee was bei mir geändert werden muß?
Vielen Dank

Du könntest ja mal den genauen Type deines Displays posten. Ein Link zum Händler wird da helfen.

Anbei die vorhandenen Infos.



Das ILLI9341 gibt es, soweit ich das übersehe, in -zig verschiedenen Variationen. Irgend wo, igend wie (Pixel horiontial/vertikal etc.) muß ich doch definieren welche Vatiante benutzt wird. Keine Ahnung wo, was ... aber das Display ist doch sicherlich -zig tausend mal im Einsatz.

Hallo,
bei dem Display habe ich mit diesem Treiber die besten Erfahrungen gemacht.
Allerdings habe ich auch mit der von dir genutzten Library bisher keine Probleme gehabt.
Ein zweites Display könnte evtl. Aufklärung schaffen.

Hi HotSystems,
danke für die Hinweise👍
Tatsächlich mache ich mit einem 2. Display die gleichen Erfahrungen :disappointed:
Mein erster Versuch war auch das display mit der TFT_eSPI anzusteuern. Da musste ich mich erst einmal in die lib reinfummeln bis es schließlich geklappt hat und das auch nur indem ich die settings per compiler direktive gesetzt habe da sie bei mir nicht von der IDE (PlatformIO ) aus dem header-file übernommen werden.

=> https://github.com/Bodmer/TFT_eSPI/discussions/2815
Kannst du mir bei Gelegenheit mal mitteilen wie du das display bei dir zum laufen gebracht hast. Ich denke du arbeitest mit der Arduino IDE und einem AVR-Prozessor.

Danke

Hallo MHz,
richtig, ich verwende die Arduino IDE und als Controller AVR sowie ESP32/ESP8266. Im aktuellen Fall den ESP32 mit dem TFT 2,8 oder 3,5 Zoll.
Ich werde später vom PC auch die angepasten Einstellungen für das TFT posten.
Die entsprechende user_setup liegt bei mir im Library-Ordner.
Mit PlatformIO kenne ich mich leider nicht aus.

super HotSystems, das hilft mir bestimmt weiter, danke! Lass dir Zeit, ich werde erst später wieder meine mails anschauen können. Bitte sende mir doch neben der angepassten user_setup auch noch deine Verkabelung IllI <=> ESP32.
Wohin schiebe ich die user_setup? Sorry wenn ich auch das noch fragen muss (library folder oder sketch folder).
Ich bin schon vor langer Zeit von der Arduino IDE auf VScode mit PlatformIO umgestiegen. VScode mit PlatforIO ist anfangs stark gewöhnungsbedürftig, lohnt sich aber ganz bestimmt :flushed::+1::blush: Falls du es mal probieren möchtest, kann ich dir gerne ein paar Tipps geben, auch wenn ich immer noch auf newbee level bin.

Hallo,
das mit PlatformIO muss ich mir mal durch den Kopf gehen lassen und komme gern darauf zurück.

Hier die entsprechenden Änderungen, nicht die komplette Datei.

User_Setup.h ( liegt in ***\libraries\TFT_eSPI\ )

Je nach Treiber aktivieren, der Rest bleibt deaktiviert (auskommentiert):

Für den ILI9341 im 2,8" TFT
#define ILI9341_DRIVER       // Generic driver for common displays

Für den ILI9486 im 3,5" TFT
#define ILI9486_DRIVER


// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins

// läuft auch bei mir mit dem 3,5" TFT und ILI9486_DRIVER

#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC    2  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)

Weitere Verkabelung:
VDD = 3,3 Volt evtl. 5 Volt (abhängig vom TFT)
GND = GND
BL  = 3,3 Volt

Bei der User_Setup.h ,
#define ILI9341_2_DRIVER // Alternative ILI9341 driver,
auswehlen habe das gleiche Display und funktioniert mit TFT_eSPI 1A
und
#define TOUCH_CS 5// Chip select pin (T_CS) of touch screen
auskommentieren dan meckert der Compiler nicht und ist 3 Sek schneller :wink:
Bodmer hat in der TFT_eSPI.h drei Sek dellay eingebaut um uns aufmerksam machen :wink:

@fony
Was ist an dem alternativen Treiber besser ?

Wie Meinen? TFT_eSPI ist viel besser als Ada, nur wie du auch weist ziemlich schwierig wen man den nicht kennt
Es gibt zwei Versionen vom ILI 9341, bei dem Altem mit SPI Verbindung sind die Farben ein wenig verblasst, bei 8Bit tretet das nicht auf wird ja direkt angesprochen.

Bei allen, die geantwortet haben, bedanke ich mich für ihre Beiträge. Ich glaube aber, mich in meiner ursprünglichen Frage nicht hinreichend klar ausgedrückt zu haben. Es geht mir darum ein ILLI9341 display mit der Adafruit_GFX.h library und dem Adafruit_ILI9341.h driver zum laufen zu bringen, so hatte ich es im ersten Beitrag geschildert.

wie dort so beschrieben.

#include <Adafruit_GFX.h> // include Adafruit graphics library #include <Adafruit_ILI9341.h> // include Adafruit ILI9341 TFT library

was ich leider nicht geschrieben habe - sorry - war, dass ich es schon mit der TFT_eSPI library von Bodmer versucht habe. Das Problem hier war, dass in meiner VScode/PlatformIO Umgebung die Werte aus der header-datei nicht für's kompilieren übernommen werden. So hat es auch Bodmer vermutet.

Wenn also jemand ein ILLI9341 mit Adafruit_GFX und Adafruit_ILI9341 betreibt, würde es mir helfen zu erfahren, wie er/sie es macht. Irgendwie stehe ich im Augenblick völlig verwirrt auf'm Schlauch und komme nicht weiter.

p.s. HotSystems: nurzu, ein PlatformIO Versuch lohnt sich bestimmt. Hast Du TeamViiewer installiert?

Hallo MHz,
ja, ich habe die Kombi am ESP8266 laufen.
Hier meine Einstellungen dazu:

#include <Adafruit_GFX.h>                   // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_ILI9341.h>               // https://github.com/adafruit/Adafruit_ILI9341

#define TFT_CS    D2                        // TFT CS  pin is connected to NodeMCU pin D2
#define TFT_RST   D3                        // TFT RST / RES pin is connected to NodeMCU pin D3
#define TFT_DC    D4                        // TFT DC  pin is connected to NodeMCU pin D4

// initialize ILI9341 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
// BLK an 3,3V VCC

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

Allerdings verwende ich die IDE Arduino V1.8.19

p.s. aktuell fehlt mir die Zeit, hier etwas umzustellen.

Hallo HotSystems dank deiner Anleitung bin ich nun einen Schritt weiter, aber noch nicht ganz am Ziel angekommen. Die Auflösung des displays ist laut Aufdruck 240x320, dargestellt werden aber in x-Richtung deutlich weniger.

tft.fillScreen(ILI9341_BLACK);lässt geschätzte 80 Pixel in x-Richtung aus.

Auch stimmt die Farbzuordnung nicht, blau wird rot dargestellt.
Schwarz bleibt aber schwarz.

tft.invertDisplay(0); Egal ob 0 oder 1, bei 1 wird der Hintergrund weiß

In meinem Sketchbook liegen im library folder Adafruit_GFX und _ILI9341.
Im folder Adafruit_ILI9341 liegt AdafruitILI9341.h und darin finde ich:

  • This library depends on
  • Adafruit_GFX being present on your system. Please make sure you have
  • installed the latest version before using this library.
    ...
    #define ILI9341_TFTWIDTH 240 ///< ILI9341 max TFT width
    #define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height

    Habe ich was versäumt?
    Danke für deine Geduld👍

#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_ILI9341.h> // https://github.com/adafruit/Adafruit_ILI9341

#define TFT_CS 4 //D2 // vi Chip select control pin
#define TFT_RST 0 //D3 // br
#define TFT_DC 2 //D4 // bl Data Command control pin

// initialize ILI9341 TFT library with hardware SPI module
// SCK (CLK) gn---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) or---> NodeMCU pin D7 (GPIO13)
// BLK an 3,3V VCC

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

void setup(void) {
Serial.begin(115200);
delay(200);
Serial.printf("\n\nCompiled from: %s at: %s %s", FILE, DATE, TIME);

tft.begin();
tft.invertDisplay(0);
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(20, 20);
tft.setTextSize(3);
tft.setTextColor(ILI9341_BLUE);
tft.print("Hello world");
}

void loop() {
}

</>

Hallo,
das Problem sieht mir nach einem falschen Treiber aus. So habe ich es auch schon bei anderen Displays gesehen.
Hast du mal den Treiber für das ST7789 getestet ?
Oder einen anderen Treiber-Chip ?

Warum machst du

tft.invertDisplay(0);

du wilst wahrscheinlich die Ausrichtung einstellen dazu nimt man

tft.setRotation(0);

0 = Portrait
1= Landscape
2= Portrait 180°
3= Landscape 180°

Mit

tft.invertDisplay(0);

wird die Farbe invertiert = Schwarz zu Weiß usw.
und ob die "0" da drinnen stimmt weis jetzt nicht habe noch nie benutzt.

Bingo!
Du hast den Nagel auf den Kopf getroffen👍 Chapeau!
Nun nur noch die Farbzuordnung umkehren und das wars schon. Na noch nicht ganz, denn ich möchte noch die Touch-Funktion aktivieren.
Der Anfang ist auf jeden Fall gemacht.
Vielen Dank.

p.s. VScode/PlatformIO kann warten, lohnt sich aber auf jeden Fall. Melde dich bei Bedarf😊

Ok, danke....werde ich machen.
Schreib doch bitte noch, welcher Treiber es jetzt ist.

Und du kannst das Thema als gelöst markieren.

tft.invertDisplay(1);

Sollte funktionieren. jedoch nicht im Setup setzen :wink: dort kann man direkt richtige Farben setzen