Displej bez specifikace a datasheetu se dá rozchodit, ale nejvíc času nezabere zapojení, nýbrž zjištění, co to vlastně je. Tenhle se nakonec podařilo určit jako E32R35T (ESP32-WROOM-32E, 3,5″ 320×480) s řadičem ST7796S a dotykem XPT2046.
1. Zjistit, co to je
- Nápisy na desce a konektoru: označení modulu (tady E32R35T), názvy pinů (
SCK,SDI/MOSI,CS,DC/RS,RST,BL/LED) aT_*piny dotyku. - Velikost a rozlišení: 3,5″ displeje bývají 320 × 480 bodů.
- Řadič: u 3,5″ SPI jsou nejčastější ILI9488 a ST7796; tady ST7796S. Bez označení pomůže zkoušet ovladače postupně – špatný řadič se pozná podle chybných barev nebo posunutého obrazu.
- Dotyk: odporová vrstva má vlastní řadič XPT2046 na téže SPI sběrnici s vlastním
CS.
2. Piny E32R35T
3. Reset patří na EN (častá past)
RESET displeje je svázaný s EN ESP32, takže se nemá ovládat softwarově. Původní pokus měl TFT_RST = -1 a přitom volal pinMode(TFT_RST, ...) – práce s neexistujícím GPIO shodila a resetovala program hned po hlášce „Resetování displeje…“. Displej přitom zůstal bílý: podsvícení jelo, ale řadič nebyl inicializovaný. Řešení: reset v softwaru neřešit a na TFT_RST nevolat pinMode.
4. Inicializační sekvence ST7796S
Generická inicializace ST7796 z TFT_eSPI nemusí stačit; spolehlivější je výrobcem dodaná sekvence pro E32R35T: registry 0x11 (sleep out), 0x36 (orientace/MADCTL), 0x3A (barevný formát), dále 0xF0, 0xB4, 0xB7, 0xC0…, gamma 0xE0/0xE1 a nakonec 0x29 (display on).
Převod původního API na Arduino: LCD_WR_REG(x) → tft.writecommand(x), LCD_WR_DATA(x) → tft.writedata(x), delay_ms() → delay(). LCD_direction() se dá nahradit zápisem registru 0x36 nebo rotací v knihovně.
5. TFT_eSPI User_Setup
#define ST7796_DRIVER #define TFT_WIDTH 320 #define TFT_HEIGHT 480 #define TFT_MISO 12 #define TFT_MOSI 13 #define TFT_SCLK 14 #define TFT_CS 15 #define TFT_DC 2 #define TFT_RST -1 // reset je na EN; NEovládat přes pinMode #define TFT_BL 27 #define TOUCH_CS 33
Ověření zapojení a řadiče: tft.fillScreen() červená, zelená, modrá. Když barvy projdou přes celý displej, piny i řadič sedí.
6. Dotyk XPT2046
Na téže SPI sběrnici, s vlastním CS na GPIO33 a přerušením IRQ na GPIO36. Inicializuje se stejnou sběrnicí, jen s jiným CS.
7. Stahování obrázku a JPEG (otevřený problém)
Po rozběhnutí LCD se řešilo stahování obrázku přes Wi-Fi a JPEG dekódování. HTTP stažení proběhlo (200, ~2,7 kB, validní začátek FF D8), ale dekodér TJpg_Decoder nezjistil rozměry (0×0). To je samostatný problém JPEG parseru/dekodéru, ne inicializace ST7796S.
Wi-Fi údaje patří do konfigurace mimo repozitář, ne do zdrojáku.
Na co si dát pozor
-
RESETje naEN– nesahat na něj softwarově. -
DCje pevně na GPIO2, což je strapping pin: log. 1 při startu brání vstupu do režimu nahrávání firmwaru. Když nahrání selže, ověřit, že GPIO2 při startu nic nedrží v log. 1. - Plné překreslení 320 × 480 přes SPI trvá; překreslovat jen měněnou oblast.
- Obrázky zaberou paměť – velikost přizpůsobit displeji dřív, než se nahrají do firmwaru.