Hľadal som kompaktnú PCB, ktorá by obsahovala TFT LCD displej aspoň 2,4" s podporou touch funkcie, spolu s WiFi mikrokontrolérom ESP32 na jednom plošnom spoji, pričom som potreboval minimálne 4 GPIO pre vstupno-výstupné riadenie externej PWM jednotky motora od ZD-motor pre smer otáčania a signály pre zapnutie / vypnutie cyklusu z externého tlačidla, na ktoré mikrokontróler zareaguje. Požiadavky na kompakt boli teda jasné. Tákéto all-in-one kompakty ponúka firma Elecrow pod názvom: ESP32 Display HMI Module Series.
Ponúkané displeje existujú s rôznymi uhlopriečkami, od 2,4, až do 7". Nakoľko žiadny slovenský/český e-shop nemal tieto dosky skladom a z Číny by to trvalo dlhšie, zvlášť cez prichádzajúce vianočné obdobie. Urgentne som potreboval použiť takýto kompakt pre jedno prototypové zariadenie. V tomto prípade je displej umiestnený do krabičky, pričom je ovládaný zhora. Hľadal som teda aj iné alternatívy, ktoré boli v e-shopoch dostupné.
V podstate jediným riešením, ku ktorému som dospel bol e-shop Laskakit, ktorý dobre poznám a mal som u nich už pár objednávok. Daný kompakt som na ich stránkach našiel pod názvom LaskaKit ESPD-35 ESP32 3.5 TFT ILI9488 Touch (ponúkajú aj shield, kde si môžete dať displeje iných uhlopriečok). Je to custom PCB (doska plošný spojov), ktorú sami navrhli. Tento kompakt (vo verzii 2.1, ktorú mám), ponúka TFT LCD grafický displej 3,5", rozlíšenie 480 x 320 px, s driverom ILI9488. PCB má USB-C konektor, čo určite ocenia tí, ktorí pripájajú USB na 3 krát.
Priamo na dosku je možné dať aj Li-pol batériu, PCB má aj nabíjací obvod, ale pre moju aplikáciu som to nepotreboval. Ak som tomu správne pochopil, tak displej samotný nie je dotykový, ale má na sebe touch panel, ktorý rozmerovo displej presahuje na jednej zo strán, avšak priehľadná časť - dotyková plocha plne korešponduje s plochou displeja. Touch vrstva je kapacitná, nie rezistívna ako na väčšine displejov. Displej tak dokáže reagovať aj na jemný dotyk, rovnako ako smartfón, funguje fakt dobre.
Páčila sa mi aj integrácia do existujúcej knižnice TFT eSPI, ktorú používam aj s inými displejmi, kedy je pre tento displej vytvorený custom User Setup, ktorý definuje rozlíšenie, jednotlivé piny, driver a pod. Zmenu medzi displejmi urobíte jednoduchým odkomentovaním riadka s prislúchajúcim setupom daného displeja v hlavičkovom súbore User_Setup_Select.h knižnice TFT_eSPI. Pre ESP32 bolo možné zvoliť modul s integrovanou PCB anténou, alebo externou prostredníctvom u.FL konektora. Zvolil som s externou anténou. Kompakt je osadený modulom ESP32-WROOM-32UE, čo je klasický dual-core WROOM modul, ale bez PCB antény.
Z hľadiska urgencie sme teda daný displej zakúpili u Laskakitu. Kompakt prišiel v peknej plastovej krabičke, nepamätám si už, či bol displej aj v ochrannej fólii, či extra balení, ale myslím si, že áno. Displej má ochrannú fóliu, ktorú je možné stiahnuť, dotyk funguje aj cez ňu. Pri úvodnom teste však prišiel šok po porozumení jeho hardvérovej konštrukcie a procesu zapínania... Po pripojení napájania sa rozsvietila indikačná LED dióda na zadnej strane PCB a to bolo všetko. Displej sa nerozsvietil.
V Arduino IDE som nevidel dostupný COM port a tak som uvažoval, či hardvér nie je chybný, prípadne či nahratý program v ESP32 neobsluhuje len jeho backlight pin. Preštudoval som spätne produktovú stránku displeja. Doinštaloval som preto driver prevodníka CH9102 (ch343), avšak COM port sa neobjavil. Následne som zistil, že je na doske PWR ON/OFF tlačidlo (pushbutton), ktorým sa celá sústava zapne, displej sa rozsvieti a spustil sa testovací program, ktorý bol v zostave prednahratý (umožňuje aj I2C test, SD card test, grafický test, ale taktiež aj dynamický výpis 2D súradníc, kde ste urobili posledný dotyk), taktiež USB-UART prevodník nabehne, z čoho mi bolo jasné, že zrejme ani ESP32 sa nezapne. Krátkym stiskom tlačiadla sa zostava zapne a dlhým stiskom (vyše sekundu) sa vypne.
Toto je teda celý problém. Nepochopili ste, o čo ide? Tak polopate... :-) Váš program, ani ESP32 sa nespustí, kým zakaždým nestlačíte tlačidlo pre spustenie po pripojení napájania do PCB, museli by ste tak mať záložné napájanie, aby sa vám nikdy zostava nevypola. Tlačidlo na doske odpovedá za zapnutie, aj vypnutie, má teda 2 režimy, pričom sa líšia iba dĺžkou stlačenia, riadi to hardvérový obvod. To bude ale dosť otravné zakaždým stláčať tlačidlo, však? Áno, bude a neminie vás to bez hardvérovej úpravy.
Tento problém z môjho pohľadu znemožňuje displej zakomponovať do krabičky, nakoľko sa pri pripojení napájania displej nespustí a vyžaduje sa krátky stisk tlačidla, ktoré je situované zboku displeja, čo by bolo už dnu v krabičke za zápustnou hranou mimo dosahu používateľa. Krabička by tak musela mať extra dieru, ktorou by sa tlačidlo mohlo stlačiť napr. perom (na štýl reset tlačidla na routroch a pod.), alebo paralelne na dané tlačidlo pripojené extra tlačidlo vytiahnuté von z krabičky. Používateľ by ale stále musel tlačidlo stlačiť po pripojení napájania.
Tento problém s vynúteným stlačením tlačidla pôjde vyriešiť nabastlením súčiastky (rozumej, týmto zásahom zrejme záruka OFF). Tranzistor s ESP32 nemožno využiť, nakoľko ani ESP32 nie je napájané, takže možnými riešeniami bude napr. NE555 časovač, ktorý ten "stisk" nasimuluje po pripojení napájania, prípadne aj neustále krátke pulzy z neho by ten displej nevypli, ak by tam medzi nimi bola prestávka. Takto nám bude fungovať aj kondenzátor, ako jednoduchý generátor pulzov, ktorý sa ku tlačidlu pripojí paralelne a zaberať bude málo miesta.
Vyskúšal som s 1 μF (mikrofarad) keramickým kondenzátorom, ktorý som paralelne k tlačidlu priložil. Po pripojení napájania sa displej (aj ostatný hardvér) spustí a ostane spustený. Krátke vybíjacie pulzy, ktoré kondenzátor generuje už displej nevypnú, nakoľko by výstup musel byť aktívny až cca sekundu, čo sa nikdy nestane. Možno do verzie 2.2 kompaktu ESPD-35 bude dobré pridať 2 pady, kde sa môže kondenzátor dodatočne napájkovať a vyrieši sa daný problém, ak by niekto vyžadoval takýto operačný režim zariadenia, prípadne pady na jeho SMD verziu, ktorú však bežný laik doma v takej veľkosti nezapájkuje.
K dispozícii je na doske po pripojení napájania len 5V z USB, nakoľko je toto napätie prítomné na tlačidle. 3V3 pin, respektíve celá 3V3 vetva nie je napájaná, pokým sa tlačidlo nestlačí. Nabíjací obvod funguje aj bez zapnutej zostavy, iba s pripojeným napájaním. Naprázdno je na nabíjacom konektora Li-pol batérie 4,15V. Fyzickú prepojku namiesto PWR tlačidla dať nemôžete, nakoľko sa displej po pripojení napájania zapne a za niečo vyše sekundu vypne, keďže tlačidlo má dve funkcie s identickým spúšťacom. Je žiadúce, aby sa obvod zopol na krátku chvíľu a následne ostal rozopnutý po celú dobu fungovania, alebo boli "stistky" krátke aj po celú dobu operačného režimu, ktoré ničomu nevadia.
Adresoval som dotaz aj na Laskakit podporu ohľadom tohto problému, pán Frajdl zo zákazníckeho servisu potvrdil, že toto správanie displeja je plánované a nepočítali s funkciou spsutenia natvrdo po pripojení napájania, teda vždy je fyzicky nutné displej, i ESP32 zapnúť tlačidlom. Je mi to fakt divné, že doteraz sa na túto "featuru" nešťažoval do verzie 2.1. a všetci, ktorí si daný displej zakúpili boli OK s tým, že zakaždým je potrebné displej zapínať tlačidlom, možno som len ja ten pohodlý :-).
Displej sa mi konštrukciou, typom dotykového panelu, aj možnosťami veľmi páči, ale tento hardvérový problém ma priam šokoval, lebo pre produkčný hardvér je skrátka nepoužiteľný (na druhú stranu i Laskakit sa môže ohradiť popisom na produktovej stránke klauzulou "Tento výrobek není samostatně funkčním celkem a může vyžadovat odbornou montáž.").
Nahral som aj video, pre lepšiu predstavu daného problému
Na záver
Možno by som mal ešte výtku k rozširujúcemu GPIO konektoru, ktorý ponúka voľné GPIO, VSPI GPIO, v zadnej časti displeja. Nie je tam žiadna možnosť zaistenia káblov, je to len pinová dupont lišta. Dupont káble, ktoré tam vložíte sa môžu ľahko vytiahnuť, zvlášť, keď máte displej umiestnený tak, že sa na neho zhora pozeráte, vtedy tie káble vytiahne sama gravitácia bez väčšej námahy, nieto ešte ak sa s krabičkou zatrasie. Potešili by ma tu svorkovnice, alebo typ zaistenia na pružinku "Screwless spring terminal", ako na obrázku nižšie.
Na zadnej strane PCB sú umiestnené aj 2 μŠup (mikrošup) konektory (konektory kompatibilné so senzormi z produkcie od Laskakitu), ktoré sa voči sebe líšia len orientáciou o 90°, jeden konektor je priamy, druhý pravouhlý. Vedel by som si tu predstaviť vytiahnuté obe I2C zbernice ESP32, nie iba jednu na oba konektory (minimálne by to navýšilo 2 GPIO možné pripojiť cez kábel priamo na konektor, aj keby sa nevyužívala I2C periféria). Na Githube je k danému kompaktu ESPD-35 schéma zapojenia na Githube od Laskakitu pre verziu 2.0. Neviem, aké rozdiely boli medzi verziami 2.1 a 2.0, možno úplne minimálne. I keď daná schéma pre 2.0 je tam už 11 mesiacov. Z toho, čo som dohľadal v demo softvéri, tak (V2.0 používa FT6234 a V2.1 používa FT5436 touch panel), program väčšinou obsahuje makro, ktoré sa odkomentuje s reprezentáciou verzie, podľa toho sa nalinkuje hlavičkový súbor knižnice touch panelu.
Pre testovací (hobby) hardvér na stole je teda displej dostatočný, avšak bude to dosť otravné ho zakaždým spúšťať (aj s ohľadom na životnosť tlačidla), ak sa tam neurobí hardvérový zásah popísaný vyššie. Urobil som na ňom prototyp, ktorý som potreboval, ale ak by šlo o nejakú sériu zariadení, toto by bol fakt veľký problém. Toto obmedzenie by bolo neakceptovateľné do produkčného hardvéru. Do budúcna využijem určite Elecrow displeje, kde podľa dohľadaných informácii nie je POWER switch, ani tento spôsob zapínania. Taktiež mi Elecrow za násobne nižšiu cenu ponúka možnosť mikrokontrolérov z rady ESP32-S3 s podporou low-power, BLE 5.0, či PSRAM u niektorých verzií s veľkým displejom.
ESPD-35 má aj slot na SD kartu, čo môžete využiť najmä pri objemných obrázkoch, ktoré chcete na displej vykresliť, ale taktiež ju môžete používať aj na logovanie dát z pripojených senzorov. Taktiež sa mi páčia montážne otvory v rohoch PCB, taktiež že Laskakit dáva zdarma k dispozícii aj 3D model krabičky pre displej, ktorú si môžete vytlačiť, alebo si ju ako hotovú zakúpiť v ich e-shope.
Tip na záver: S TFT displejmi môžete využiť aj LVGL knžinicu, ktorá vám umožní ešte krajšie grafiky v spojitosti s TFT eSPI knižnicou. Prostredníctvom SquareLine Studio si dokážete vytvoriť naozaj krásne grafiky pre ovládanie systémom drag n drop, ktoré viete exportovať a následne importovať do ESP32. Od Admin panelov, cez Nest termostaty, po pokročilé grafiky, ktoré poznáte aj z komerčných systémov pre ovládanie vzduchotechniky, kotlov. Elecrow priamo k tomu má aj návody: https://www.elecrow.com/blog/create-a-stunning-ui-with-squareline-studio-for-esp32-display-lvgl-tutorial.html. Danú knižnicu môžete použiť aj so spomenutým ESPD-35 displejom od Laskakitu.
Linky k ESPD-35:
Edit 12-15. Marca 2024:
Na základe spätnej väzby od jedného z producentov danej PCB v skratke: Myslel si, že doska nefunguje týmto štýlom, ktorý som popísal a sám to preto aj testoval. Následne to priznal, že táto funkčnosť môže byť nevyhovujúca a dodal, že nová verzia ESPD-35 (pravdepodobne 2.2) by mala tento problém vyriešiť vhodnejším hardvérovým návrhom.
Riešenie bude zrejme obsahovať môj fix, teda kondenzátor a prepojku (jumper), ktorou bude možné zapnúť napájanie kondenzátora, čím bude možné hardvér zapnúť, prípadne pri rozpojenej prepojke to ostane tak, ako teraz, t.j. bude stále nutné zapínať manuálne.
Nikto sa mi ale nepoďakoval za túto opravu :-(