Terminal ESP32 ze zintegrowanym wyświetlaczem ILI9488
Od dłuższego czasu staram się zrobić porządek ze wszystkim urządzeniami IoT, które mam w domu i spiąć je w jeden ekosystem za pomocą Home Assistant. Oczywiście wszystko idzie powoli i rodzi się w bólach.
Sam Home Assistant już działa dawno, ale urządzeń za dużo nie przybyło, ponieważ brakowało mi brami BLE, dzięki której mógłbym wpiąć, chociażby czujniki wilgotności i temperatury od Xiaomi, ale to się właśnie się zmieniło dzięki ESP32 Terminal od Elecrow.
Jest to mały terminal oparty na mikrokontrolerze ESP32 z obsługą Wi‑Fi 2,4 GHz i Bluetooth 5.0 i ze wbudowanym 3,5‑calowym ekranem dotykowym o rozdzielczości 320x480. A dzięki obsłudze LVGL (najpopularniejszej otwartoźródłowej bibliotece graficznej) możemy stworzyć z łatwością interfejs użytkownika przy użyciu, chociażby Squareline studio.
Z tyłu tego terminala wyprowadzono 4 interfejsy Crowtail, do których można podłączyć czynniki, które opisywałem przy okazji recenzji laptopa CrowPi L. Dodatkowo wyposażony jest również w gniazdo kart SD, brzęczyk (buzzer), piny do połączenia baterii i USB‑C do komunikacji i zasilania.
Podłączając świeżo wyciągnięty z pudełka terminal do prądu, włączy się on w trybie demonstracyjnym biblioteki LVGL, gdzie będziemy mieli okazję przetestować kontrolki i widgety oferowane przez nią.
Poza samym urządzeniem Elecrow dostarcza obszerną dokumentację ze specyfikacjami poszczególnych komponentów i schematem połączeń IO. Ponadto na Wiki producenta znajdziemy aż 16 lekcji, dzięki którym nawet mniej doświadczeń użytkownicy zapoznają się z możliwościami terminala i jego wstępną konfiguracją krok po kroku.
Pierwsza lekcja z samouczka jest bardzo ważna, prezentuje ona wymagane ustawienia w Arduino IDE, abyśmy mogli zacząć rozmawiać z terminalem. Zawiera również wszystkie potrzebne paczki, jak i przykładowy kod źródłowy do przetestowania czy komunikacja działa prawidłowo. Lekcja ta jest uniwersalna dla kilkunastu różnych produktów z oferty Elecrow, więc niektórzy użytkownicy mogą czuć się zagubieni, dlatego też warto zerknąć na dedykowane artykuł dla tego terminala, które znajduje się pod linkiem i zawiera dedykowaną konfigurację.
Mój pierwszy kod, jaki uruchomiłem na terminalu Elecrow to było kombo z przykładów załączonych przez producenta. Od razu chciałem przetestować kilka rzeczy naraz:
- kompatybilność z elementami Crowtail — dioda mruga kiedy nie ma połączenia z routerem
- łączność Wi-Fi
- i wypisywanie informacji na wyświetlaczu
Teraz przyszedł moment na podłączenie do Home Asistanta, według informacji na stronie projektu ESPHome zarówno użyty w terminalu mikrokontroler (ESP32-S3) jak i sterownik wyświetlacza (ILI9488) są obsługiwane, więc powinno pójść gładko.
Moja instancja Home Asisstanta uruchomiona została na Proxmoxie, więc wcześniej musiałem wywłaszczyć jeden port USB dla maszyny wirtualnej, abym mógł podłączyć bezpośrednio do niej terminal w celu wgrania pierwszy raz kodu.
Etap konfiguracji terminala z Home Asisstanta to dosłownie kilka kroków. Przede wszystkim musimy doinstalować rozszerzenie ESPHome, które umożliwia komunikację z "płytkami" opartymi na tym kontrolerze.
Pakiet ESPHome możemy zainstalować spod menu Ad-ons, które znajduje się w sekcji ustawień (z ang. Settings). Dalej pozostaje dodać nowe urządzenie i wybrać jego typ, w naszym przypadku będzie to oczywiście ESP32-S3. Dalej pozostaje konfiguracja pliku YAML, w którym ustawimy urządzenie, aby działało w trybie bramki BLE i wysyłało zebrane dane z sensorów do naszego Home Asisstanta.
Do tego momentu szło gładko. Udało mi się zestawić połączenia z wcześniej przygotowanymi sensorami "Xiaomi Mi Temperature And Humidity Monitor 2", a także z sensorem bezpośrednio wpiętym w terminal, który również monitoruje temperaturę i wilgotność pomieszczenia.
Jak już wspomniałem, pierwsze wgraniu oprogramowania wymaga połączenia przez USB, kolejne zmiany konfiguracji były możliwe „drogą lotniczą" przy użyciu połączenia Wi‑Fi.
Problem napotkałem dopiero w momencie kiedy do pliku YAML dopisałem kilka linijek instrukcji, które pozwolą wyświetlić informacje na wbudowanym w terminal wyświetlaczu. Jednak przeliczyłem się, a tak naprawdę nie doczytałem wymagań aktualnej implementacji modułu ILI9xxx dla ESPHome. Komponent ten potrzebuje deklaracji interfejsu SPI do komunikacji, ale mój terminal nie używa go do połączenia z wyświetlaczem a z czytnikiem kart SD, więc połączenie aktualnie jest niemożliwe.
Gdybym wiedział to wcześniej, wybrałbym do testów inny model z oferty Elecrow, tylko 5$ droższy, który nie dosyć, że ma podłączony ekran przez SPI, to dodatkowo posiada wbudowaną kamerkę OV2640 i więcej portów do wpięcia elementów Crowtail.
Na ten moment, pozostaje mi mieć nadzieję, że w najbliższym czasie znajdzie się jakiś pasjonata, który dopisze kawałek kodu i tym samym umożliwi obsługę wyświetlaczy z rodziny ILI9xxx połączonych równolegle, a nie przez interfejs SPI.