Displej bez dokumentace na ESP32: identifikace a zprovoznění

návod · chytrá domácnost

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.

01

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) a T_* 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.
02

2. Piny E32R35T

signál GPIO
SCLK (sdílené) GPIO14
MOSI (sdílené) GPIO13
MISO (sdílené) GPIO12
LCD CS GPIO15
LCD DC GPIO2
LCD BL GPIO27
LCD RESET na EN (sdílený s ESP32)
Touch CS GPIO33
Touch IRQ GPIO36
03

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.

04

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ě.

05

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í.

06

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.

07

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.

08

Na co si dát pozor

  • RESET je na EN – nesahat na něj softwarově.
  • DC je 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.

← zpět na Objevuj