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.

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


 

 

 

3 Kommentare:

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

    AntwortenLöschen
    Antworten
    1. Hallo Lorenzia, könntest Du mir bitte auch diese ino schicken falls Du sie bekommen hast, Dankeschön im voraus, bitte an michaelsenftleben@yahoo.de

      Löschen
  2. Hallo, hier ist der link zur Edzelf-Software:
    https://github.com/Edzelf/ESP32-Radio
    Es gibt aber inzwischen die Version 2.

    AntwortenLöschen