Wyświetlacz TFT 3,5" do ESP32

Witajcie. Mam problem z podłączeniem wyświetlacza TFT 3,5". Na wyświetlaczu jest napis sterownika ST7796. W opisie sprzedawcy z Chin napisane jest natomiast, że to ST7789V/ST7796S. Kompilacje na wszystkie sposoby nie dają pozytywnego rezultatu. Najczęściej ESP32 zawiesza się po wgraniu kompilacji z tymi sterownikami. Udało mi się tylko po wielu próbach uzyskać obraz na połowie wyświetlacza. Wklejam kod i proszę o pomoc.

  name: wyswietlacz-co
  friendly_name: wyswietlacz_CO

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "StMPHxPzBRnFXK7EgHWuncl49IvbI2nk74JMeYrrNw8="

ota:
  - platform: esphome
    password: "e81aca5b79d6110a0a758a609a142a9e"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Sterownik-Kotla"
    password: "488Awp9vjt8Y"
spi:
  clk_pin: GPIO18  
  mosi_pin: GPIO23  


font:  
  - file: "fonts/Roboto-Regular.ttf"
    id: font3
    size: 80

display:
  - platform: ili9xxx
    model: TFT_2.4R
    dc_pin: GPIO25
    reset_pin: GPIO21
    invert_colors: false
    rotation: 90  
    lambda: |-
      it.fill(Color::BLACK);
      it.printf(10, 20, id(font3), Color::WHITE, "Kot: %.1f C", id(temperatura_kotla_sensor).state);
      it.printf(10, 100, id(font3), Color::WHITE, "CWU: %.1f C", id(temperatura_CWU_sensor).state);

sensor:
  - platform: homeassistant
    entity_id: sensor.sterownik_kotla_temperatura_kotla   
    id: temperatura_kotla_sensor
  - platform: homeassistant
    entity_id: sensor.sterownik_kotla_temperatura_cwu
    id: temperatura_CWU_sensor

captive_portal:



Skoro mówisz, że to

to czemu zdefiniowałeś go jako

a nie ST7796?

kolejna rzecz - nie widzę zdefiniowanego
dimensions

trzecia kwestia - kolorowy wyświetlacz o dużej rozdzielczości może wymagać MCU z PSRAM
(tak w ciemno to trudno zgadnąć jaki jest problem, bo konfiguracja jest na oko zła, ale możesz dodać sobie sensory debugowania to będzie mniej więcej wiadomo jak masz wykorzystane zasoby sprzętowe)

jeśli się okaże, że brak RAMu to

  1. zdefiniuj viewport mniejszy od wyświetlacza
  2. zmniejsz głębię koloru

poczytaj też dokumentację od starej wersji komponentu wyświetlacza dla ST7789V

(gdyby to był ST7789V to możesz też testowo użyć komponent st7789v zamiast ili9xxx licząc się z tym, że nie jest rozwijany i przy jakiejś aktualizacji może wylecieć z zestawu obsługiwanych)

Próbowałem chyba wszystkich sterowników dostępnych w ESPHome, ST7796 również. Dimensions to rozdzielczość np: width: 240 i height: 320 ?
Wyniki testów:
• ILI9341 wchodzi ale połowa wyświetlacza
• ILI9342 wchodzi trochę więcej
• ILI9481 nie wchodzi
• ILI9481-18 (ILI9481 in 18 bit, i.e. 262K color, mode) nie wchodzi
• ILI9486 nie wchodzi
• ILI9488 nie wchodzi
• ILI9488_A (alternative gamma configuration for ILI9488) nie wchodzi
• MSCORE wchodzi ale 1/3 ekranu czarnobiałe
• M5STACK wchodzi połowa ekranu kolor odbicie lustrzane
• S3BOX wchodzi jakby dwa lustrzane kolorowe odbicia
• S3BOX_LITE wchodzi ale dwa lustrzane odbicia
• ST7735 wchodzi, ale dwa dwa odbicia i trzecie malutkie
• ST7796 nie wchodzi
• ST7789V ¾ i lustrzane odbicie
• TFT 2.4 wchodzi, ale nie na całość
• TFT 2.4R wchodzi na 1/2 ekranu
• WAVESHARE_RES_3_5 (Waveshare Pico-ResTouch-LCD-3.5)

No to możesz zgłosić issue (tylko jeśli znasz prawdziwe parametry kontrolera wyświetlacza, a nie jakieś domysły), jak sam widzisz te kontrolery są podobne, ale jednak różne.

Poza tym nie wiadomo czy prawidłowo zdefiniowałeś samą platformę sprzętową…
bo każdy sterownik “uniwersalny” wymaga definiowania rzeczywistych parametrów sprzętu.

W ogóle warto pokopać po istniejących issues, bo można się czasem dowiedzieć coś ciekawego.

Te 2 ostatnie typy i “s3boxy” są pod jakieś konkretne modele wyświetlaczy zapewne o mniejszej rozdzielczości.

A na dzisiaj to kup jakiś obsługiwany.

Chińczycy prowadzący tanie sklepy mają centralnie wylane na klienta i w ogóle nie biorą od uwagę różnic w budowie technicznej (z opisem oferty w którym są takie nieścisłości i nie wiadomo co się kupuje to ja bym sobie darował takie zakupy).

Wracam do wyświetlacza 1,8" i okularów :slightly_smiling_face:. Daję sobie spokój z tym chińskim wyświetlaczem. Dziękuję za pomoc i pozdrawiam.

Pokaż konfigurację w której działa częściowo, bo ja szklanej kuli nie mam żeby wiedzieć czy zdefiniowałeś wszystko co konieczne.

Skoro pytasz to chyba nie zdefiniowałeś wszystkiego co trzeba?

  name: wyswietlacz-co
  friendly_name: wyswietlacz_CO

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "StMPHxPzBRnFXK7EgHWuncl49IvbI2nk74JMeYrrNw8="

ota:
  - platform: esphome
    password: "e81aca5b79d6110a0a758a609a142a9e"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Sterownik-Kotla"
    password: "488Awp9vjt8Y"
spi:
  clk_pin: GPIO18  
  mosi_pin: GPIO23  


font:  
  - file: "fonts/Roboto-Regular.ttf"
    id: font3
    size: 80

display:
  - platform: ili9xxx
    model: TFT_2.4R
    dc_pin: GPIO25
    reset_pin: GPIO21
    invert_colors: false
    rotation: 90  
    lambda: |-
      it.fill(Color::BLACK);
      it.printf(10, 20, id(font3), Color::WHITE, "Kot: %.1f C", id(temperatura_kotla_sensor).state);
      it.printf(10, 100, id(font3), Color::WHITE, "CWU: %.1f C", id(temperatura_CWU_sensor).state);

sensor:
  - platform: homeassistant
    entity_id: sensor.sterownik_kotla_temperatura_kotla   
    id: temperatura_kotla_sensor
  - platform: homeassistant
    entity_id: sensor.sterownik_kotla_temperatura_cwu
    id: temperatura_CWU_sensor

captive_portal:

To już widzieliśmy, ale OK nie doprecyzowałem, chodzi mi o sterownik uniwersalny dla danego chipsetu, a nie jakiś dedykowany pod jeden konkretny wyświetlacz (którego na 99.9% nie masz w ręce)

i przy okazji spytam co to znaczy

Wrzuć linka do tej oferty oraz zdjęcia makro sprzętu - tych miejsc umożliwiających identyfikację (kontroler często jest na flexipcb, no nie wiem czy akurat w tym co masz w ręce)

Nie rozumiem.

Nie wchodzi to znaczy próba kompilacji kończy się trybem offline płytki.
Oferta:


A to, udało mi się uzyskać:

W platformie sprzętowej ili9xxx
są zarówno

  • sterowniki pod konkretny jeden model wyświetlacza (i one nie wymagają kompletnej konfiguracji), z tych co wymieniłeś to MSCORE, M5STACK, S3BOX, S3BOX_LITE, TFT 2.4, TFT 2.4R, WAVESHARE_RES_3_5 (oczywiście “psim swędem” mogą też czasem pasować do czegoś innego jeśli tylko trafisz na wyświetlacz zbudowany identycznie ze wskazanymi)
  • sterowniki uniwersalne dedykowane od konkretny model chipsetu (pasują do każdego wyświetlacza na bazie danego układu scalonego nie ważne jakie kluczowe parametry ma sam wyświetlacz) i do ich użytku musisz sam zdefiniować w pełni sprzęt wyświetlacza (tj. one chyba też mają jakieś defaulty, ale stawiam, że nie pasują do tego wyświetlacza skoro nie miałeś sukcesu na żadnym), a to jest właśnie cała reszta wymienionych wyżej
  • sterownik uniwersalny CUSTOM bazujący w swojej konfiguracji na dokumentacji dowolnego zgodnego z tą platformą sterownika, wtedy sam decydujesz jak zainicjalizować scalaczek

i te sterowniki uniwersalne wymagają podania parametrów - zajrzyj w dokumentację
dimensions
pixel_mode
a czasem też
invert_colors
transform (by np. odwrócić lustro, ale nie można wtedy wykorzystać srzętowego obracania)
zobacz na końcowe przykłady z dokumentacji (tam są konfiguracje pod jakieś konkretne płytki prototypowe z fabrycznie montowanymi wyświetlaczami)

natomiast jeśli chodzi o custom i wyświetlacz, który nie daje się odpalić na żadnym gotowym sterowniku to szukaj po issues - może już ktoś trafił na takie cudko jak masz w ręce i wie jakie komendy mu wydać…

Czasem dokumentacja jest zbyt uboga, więc jeśli znajdziesz braki lub masz jakieś informacje, które mogą pomóc innym, to powinieneś ją uzupełnić.

to tak dość nieprecyzyjne
czyli kompilacja się udała, logów z niej nie czytałeś, a finalnie flaszowanie “ucegla” płytkę?
ale masz logger odpalony więc są jakieś logi bootowania… w końcu chyba łączysz się z nią przez USB!

A na pudełeczku w którym przyszedł ten wyświetlacz co jest napisane, bo sprzedawca raczej renomowany…

Na tym drugim zdjęciu masz fajną kaszkę, na której można “łatwo” policzyć piksele na węższym boku (sorry ja nie mam zdrowia na takie zabawy), ale na moje oko to jest raczej rozdzielczość 320x480 a nie 240x320
więc po pierwsze musisz ją zdefiniować
a po drugie pewnie RAMu braknie

Na pudełeczku: 3,5" TFT
320(RGB)x480
41101
Dołożyłem do kodu:
dimensions: 320x480
i teraz mam kaszkę na całym wyświetlaczu. Da się za to odczytać logi po kompilacji.
Na razie bawię się z rozdzielczością. “Widzę” coraz więcej wyświetlacza. :ok_hand:
320x340 to koniec moich możliwości.
Compiling .pioenvs/wyswietlacz-co/src/main.cpp.o
Linking .pioenvs/wyswietlacz-co/firmware.elf
RAM: [= ] 12.5% (used 40864 bytes from 327680 bytes)
Flash: [===== ] 53.9% (used 988777 bytes from 1835008 bytes)
Building .pioenvs/wyswietlacz-co/firmware.bin
Creating esp32 image…
Successfully created esp32 image.
esp32_create_combined_bin([“.pioenvs/wyswietlacz-co/firmware.bin”], [“.pioenvs/wyswietlacz-co/firmware.elf”])
Wrote 0x102cf0 bytes to file /data/build/wyswietlacz-co/.pioenvs/wyswietlacz-co/firmware.factory.bin, ready to flash to offset 0x0
esp32_copy_ota_bin([“.pioenvs/wyswietlacz-co/firmware.bin”], [“.pioenvs/wyswietlacz-co/firmware.elf”])
======================== [SUCCESS] Took 100.73 seconds ========================
INFO Successfully compiled program.
INFO Resolving IP address of wyswietlacz-co.local in mDNS
INFO Connecting to 192.168.1.75 port 3232…
INFO Connected to 192.168.1.75
INFO Uploading /data/build/wyswietlacz-co/.pioenvs/wyswietlacz-co/firmware.bin (994544 bytes)
Uploading: [============================================================] 100% Done…

INFO Upload took 7.49 seconds, waiting for result…
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from wyswietlacz-co.local using esphome API
WARNING Can’t connect to ESPHome API for wyswietlacz-co.local: Timeout while connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address=‘192.168.1.75’, port=6053))] (TimeoutAPIError)
INFO Trying to connect to wyswietlacz-co.local in the background

1 polubienie

to może być brak RAMu
zawsze możesz spróbować zawęzić obszar użyteczny
dołóż sobie sensory debugowania, to będzie widać czy w ogóle jeszcze masz jakiś wolny RAM

do wypróbowania swap_xy (może rysujesz w poprzek wyświetlacza, ale to raczej łapanie się brzytwy)

logi to nie przez WIFI tylko po serialu, bo jak nie złapiesz połączenia po WiFi, to się nie dowiesz niczego (a już szczególnie w sytuacji, gdy MCU się wywraca na starcie)

i to jest świetny moment by zrobić doskonałe zdjęcie makro i policzyć na nim piksele (albo nawet lupka w garść, jakiś wskaźniczek, żeby się nie zgubić i heja).

ALE przede wszystkim nie uważam, aby sprzedawca kłamał - po prostu wybrałeś “za ambitny” wyświetlacz o rozdzielczości powyżej możliwości wersji twojego MCU (rozumiem, że masz płytkę prototypową bez PSRAM), więc rozwiązaniem raczej będzie użycie płytki z PSRAM (raczej niedrogo do znalezienie nawet u tego sprzedawcy są konstrukcje na bazie S3 które mają 2, 4 a nawet 8MB PSRAM)

rozdzielczość 320x480pix używa dokładnie 2x więcej pamięci niż wersja 240x320pix
więc o ile ten o mniejszej rozdzielczości byś obsłużył bezproblemowo (jak widać zasobów wystarcza na trochę więcej) to tego nie masz czym uciągnąć.

taki hint
można lambdami sobie rysować linie znanej długości (oczywiście na części wyświetlacza którą jest z kaszką nie narysujesz nic, ale jak zmierzysz węższy bok, to będziesz wiedział ze stosunku długości możesz rysować poziome i pionowe znanej długości (np. przewidywanej połowy długości)
możesz też ustawić viewport ustalając mniejszą rozdzielczość i offsety (jeśli inicjalizuje się poprawnie tj. na ciemno bez kaszki to wykorzystasz z niego taką powierzchnię jak się da i będzie na miarę możliwości MCU.

hint2
jeśli chcesz mieć duży fizycznie wyświetlacz a chcesz go wysterować z MCU o niedużych zasobach to niech ma mało pikseli, albo niech będzie monochromatyczny (ewentualnie jedno i drugie :upside_down_face:) i nie nie mam niczego szczególnego na myśli
(tzn. w sumie miałem na myśli ssd1309 który podobno pracuje na sterowniku dla ssd1306, czyli nawet ESP8266 byłby wystarczający, ale… sprawdziłem i jest jednak sporo mniejszy).
Z drugiej strony gdybyś wybrał wersję 2.8cala ST7789, to by była w rozdzielczości która by była do uciągnięcia na tym co masz.
Fizycznie wręcz ogromne (4 moduły, czyli coś takiego jak na tytułowym zdjęciu to coś koło 13cmx3.5cm) są np. takie wyświetlacze, wprawdzie rozdzielczość jest symboliczna, ale dzięki temu zasoby niewielkie (4 moduły 8x8 pix to 256pikseli, a na piksel starcza 1 bit, bo tu nie ma nawet szarości, czyli 1 zoptymalizowany bufor wyświetlacza zajmie 256bitów, co wystarcza na fragment 4x4pix :smiley: na twoim)

@szopen Zamówiłem wyświetlacz 2,4" 240x320, więc płytka powinna sobie dać radę. Ale Twoje wskazówki co do tych przedstawionych wyświetlaczy są fajne. Trochę mi głupio, że mam tyle pomocy z Twojej strony. Bardzo dziękuję.
Wyświetlacz 2,4" przyszedł i już pięknie działa z moim ESP32.