Dienstag, 5. Januar 2021

Konfiguration 2,4" SPI display an Edzelf-Software

 ein 2,4" Display mit ILI9341 Chipsatz:


Die Verdrahtung erfolgt analog zu anderen SPI-Display. Es gibt nur 2 abweichende Pin-Bezeichnungen:

LED - 3,3V
SCK - GPIO18
SDA - GPIO23
A0 - GPIO2
RESET - EN
CS - GPIO15
GND - Ground
VCC - 3,3V 

 in der ESP32-radio.ino wird der Typ ILI9341 aktiviert (alle anderen auskommentiert):

// Define (just one) type of display.  See documentation.
//#define BLUETFT                        // Works also for RED TFT 128x160
//#define OLED                         // 64x128 I2C OLED
//#define DUMMYTFT                     // Dummy display
//#define LCD1602I2C                   // LCD 1602 display with I2C backpack
//#define LCD2004I2C                   // LCD 2004 display with I2C backpack
#define ILI9341                      // ILI9341 240*320
//#define NEXTION                      // Nextion display. Uses UART 2 (pin 16 and 17)

mehr wäre grundsätzlich nicht zu tun. Wir wollen aber die 8-Pixel hohe Schrift um 2 Stufen vergrößern und müssen dazu an mehreren Stellen in die Software eingreifen.

 
Wir können an dieser Stelle in der ESP32-radio.ino die Schriftgöße stufenweise von 1 auf 2 oder gar auf 3 einstellen:

dsp_setTextSize ( 1 ) ;                            // Small character font

ein Wert von 2:

und ein Wert von 3:

jetzt ist die Uhrzeit aus dem Bild gerutscht, und die Formatierung insgesamt muss angeglichen werden. Dazu gehen wir jetzt erst mal in die ILI9341.h.

Um die Uhrzeit nach links zu verschieben ändern wir den Wert TIMEPOS:

// Position (column) of time in topline relative to end
#define TIMEPOS -160

er ist negativ, weil vom rechten Rand ausgehend die Startposition wieder abgezogen wird.

(Originalwert= -52)

Ich ziehe die Ziffern der Uhrzeit weiter auseinander in der ILI9341.h mit der Einstellung:

pos += 18 ;                                   // Next position

(Originalwert = 6)


für 1 Sekunde passt es jetzt. Die rectangles, mit denen die Ziffern vor dem Neuschreiben gelöscht werden, müssen ebenfalls verschoben werden:

dsp_fillRect ( pos, 0, 16, 24, BLACK ) ;     // Clear the space for new character

(Originalwerte: 0, 6, 8)

damit ist die Uhrzeit schon mal ansehnlich:

 


jetzt kommen wir zu den devidern (Balken).

Der unterste Balken ist die Lautstärkeanzeige. Den mache ich breiter in der ILI9341.h, indem ich an 4 Stellen die 2 durch eine 8 ersetze:

dsp_fillRect ( 0, dsp_getheight() - 8,
                    len, 8, RED ) ;                    // Paint red part
     dsp_fillRect ( len, dsp_getheight() - 8,
                    dsp_getwidth() - len, 8, GREEN ) ; // Paint green part

 

jetzt muss noch die Definition der Segmente, in die der Bildschirm aufgeteilt ist, angepasst werden:
 

 

// Data to display.  There are TFTSECS sections
#define TFTSECS 4
scrseg_struct     tftdata[TFTSECS] =                        // Screen divided in 3 segments + 1 overlay
{                                                           // One text line is 8 pixels
 { false, WHITE,   0,  24, "" },                            // 1 top line
 { false, CYAN,   40,  96, "" },                            // 8 lines in the middle
 { false, YELLOW, 140, 96, "" },                            // 4 lines at the bottom
 { false, GREEN,  140, 96, "" }                             // 4 lines at the bottom for rotary encoder
} ;

jetzt passt alles. Keine Überschreibungen mehr, kein Überlauf, keine Zeichenfragmente mehr die sich nicht löschen.


 auch die encoder-Meldungen machen keine Probleme mehr:


btw: der Text, der links ober scheinen soll, kann in der ESP32_radio.ino editiert werden:

tftset ( 0, "IVAN" ) ;                     // Set screen segment text top line


 

 

 

1 Kommentar:

  1. Hallo,
    könntest du mir die esp32_radio.ino schicken?
    Danke
    lorenzia@web.de

    AntwortenLöschen