Display TFT ILI9341

www
Odpovědět
Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3332
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Display TFT ILI9341

Příspěvek od Pete30 »

Mám tu něco pro bastlíře ESPhome :lol:
Pokud chcete mít dohled nad Home Assistant vizuálně na malém zobrazovadle jako já protože informací není nikdy dost lze použít display
ILI9341 TFT. Jeho zvláštností je že má dotekovou vrstvu a její ovladač byl před nedávnem přidán do ESPhome.
A teď se to pokusíme trochu rozebrat:
Doporučuji použít desku ESP32 protože bude potřeba více pinů
ILI9341 pracuje klasicky na SPI:

Kód: Vybrat vše

spi:
  clk_pin: 18
  mosi_pin: 23
  miso_pin: 19
Nakonfigurujete display:

Kód: Vybrat vše

display:
  - platform: ili9341
    model: TFT 2.4
    cs_pin: 13
    dc_pin: 27
    led_pin: 32  
    reset_pin: 33
Připravíte si dotekovou vrstvu na kalibraci:

Kód: Vybrat vše

xpt2046:
  id: touchscreen
  cs_pin: 17
  irq_pin: 16
  dimension_x: 240
  dimension_y: 320
  on_state:
    - lambda: |-
        if (touched)
          ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%d",
              id(touchscreen).x,
              id(touchscreen).y,
              id(touchscreen).x_raw,
              id(touchscreen).y_raw
              );
Zkompilujete a přiloženým perem se do dotknete v rozích displeje, začínáte horní levý roh - pravý horní - levý spodní - pravý spodní, v každém rohu klikněte několikrát
Výsledek si zapište nebo zkopírujte, budete potřebovat surovou hodnotu raw .
A teď to pdstatné:
Kalibrují se souřadnice plochy doteku a to X a Y.
Souřadnice X je vždy levý horní roh pohledem na display a je horizontálně, souřadnice Y je vertikální.
Dostanete tento výsledek:
kalibrace raw min max.png
Ve výpisu vyberte hodnoty raw: x min, x max, y min, y max a ty zadejte do konfigurace dotekové vrstvy.
Například:

Kód: Vybrat vše

xpt2046:
  id: touchscreen
  cs_pin: 17
  irq_pin: 16
  update_interval: 50ms
  report_interval: 1s
  threshold: 400
  dimension_x: 240
  dimension_y: 320
  calibration_x_min: 279
  calibration_x_max: 3824
  calibration_y_min: 416
  calibration_y_max: 3839
  swap_x_y: False
  on_state:
    - lambda: |-
        if (touched)
          ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%d",
              id(touchscreen).x,
              id(touchscreen).y,
              id(touchscreen).x_raw,
              id(touchscreen).y_raw
              );
A teď si připravte pevné nervy a než to celé rozmlátíte :lol: , srovnejte si v hlavě polohu obrazovky.
Představte si to tak že je to obdélník s rozlišením 240x320, ale nechcete ho na výšku a tak ho otočíte o 90°a tím už nemáte osu x vlevo nahoře, ale vlevo dole nebo vpravo nahoře podle toho jak ho natočíte :o
Pokud ještě stíháte tok mých myšlenek :lol: :lol: tak můžeme pokračovat.
Pokud potřebujete prohodit osy x a y můžete použít:

Kód: Vybrat vše

  swap_x_y: True
Pokud vám souřadnice chodí z prava do leva můžete prohodit hodnoty x min x max to samé u Y.
A pokud jste ještě neskočili z okna :lol: máte srovnané osy a chcete to dotáhnou do konce stačí vytvořit virtuální tlačítka a binární senzory u kterých zadáte souřadnice pro jednotlivá tlačítka, v HA vytvoříte nějakou automatizaci kterou budou ovládat virtuální doteková tlačítka a máte hotovo :roll:
Pokud to někdo dočetl až do konce a rozhodl se že bude bojovat, netuší jak vytvořit virtuální tlačítko, použít font, barvu a stvořit binární senzor virtuálního tlačítka neváhejte se ozvat protože to bude další příběh :roll:
Konečný výsledek který funguje a pro test zatím jen zvoleno on/off světlo na chodbě.
display tft.jpg
Pokud nejsem přítomen tak jsem na rybách ;)

Odpovědět

Zpět na „ESPHome“