Przedstawię tutaj kolejny ciekawy moduł oparty o ESP32‑S3. Waveshare ESP32‑S3‑LCD‑1.28, jak sama nazwa wskazuje, oferuje 1.28‑calowy, okrągły wyświetlacz IPS 240×240 pikseli, sterowany układem GC9A01, zapewniający żywe barwy i dobre kąty widzenia. Moduł wyposażono także w QMI8658 – 6‑osiowy IMU (akcelerometr + żyroskop) do wykrywania gestów i ruchu. Całość jest do kupienia za około 70 zł.
Na pokładzie mamy:
- ESP32‑S3 – dwurdzeniowy procesor Xtensa LX7 (do 240 MHz) z 2 MB PSRAM, 512 KB SRAM i 16 MB flash
- QMI8658 – 6‑osiowy IMU (akcelerometr + żyroskop) – do wykrywania gestów i ruchu
- ETA6096 do ładowania baterii Li‑ion (złącze MX1.25)
- do 40 wyprowadzonych pinów, zasilanie, masa, GPIO, w tym I²C, SPI, ADC itd.
- port USB‑C do zasilania i programowania (sterownik USB‑UART CH343P)
- przyciski BOOT/RESET
Schemat:
Wymiary PCB:
Fabrycznie wgrany program - prezentacja:
Uruchomienie z ESP-IDF w Visual Code
Na stronie producenta jest zbiór gotowych przykładów do uruchomienia dodatkiem ESP-IDF w Visual Code:
https://www.waveshare.com/wiki/ESP32-S3-LCD-1.28
Uruchomienie z ESP32_Display_Panel w PlatformIO
Przykłady producenta łatwo jest uruchomić, ale sam chciałem spróbować jakiegoś wyzwania, więc postanowiłem dodać wsparcie tej płytki do projektu ESP32_Display_Panel.
https://github.com/esp-arduino-libs/ESP32_Display_Panel
Przede wszystkim musimy skonfigurować piny i sterowniki dla naszej płytki. Robi się to w esp_panel_board_custom_conf.h. Trzeba tam wpisać GPIO używane do komunikacji z wyświetlaczem (patrz schemat), z kontrolerem dotykowym (tutaj nieobecne - więc po prostu go wyłączymy) oraz z pobocznymi funkcjonalnościami takimi jak podświetlenie wyświetlacza. Dodatkowo trzeba skonfigurować format pikseli i sam sterownik wyświetlacza.
Poniżej odchudzona konfiguracja specjalnie pod płytkę z tematu:
Kod: C / C++
Te ESP_PANEL_BOARD_LCD_COLOR_INEVRT_BIT to literówka z ich projektu. Potrzebę włączenia lustra (ESP_PANEL_BOARD_LCD_MIRROR_X ) odkryłem eksperymentalnie. Z formatem kolorów podobnie (ESP_PANEL_LCD_COLOR_BITS_RGB565), ale to nie wszystko.
Musiałem jeszcze włączyć LV_COLOR_16_SWAP, inaczej barwy nie były poprawne. To wykonuje się w platformio.ini. Załączyłem odpowiednie flagi do BOARD_CUSTOM, na którym operuje.
[spi_qspi_lcd]
build_flags =
; LVGL related:
-DLV_COLOR_16_SWAP=1
;
; Here are the available board envs
;
[env:BOARD_CUSTOM]
build_flags =
${common.build_flags}
; Add custom build flags here:
; ${rgb_mipi_lcd.build_flags}
${spi_qspi_lcd.build_flags}
board = BOARD_CUSTOM
Ostatecznie uruchomiłem demo z kształtami w podstawowych kolorach (to ułatwia diagnozowanie problemów) i poruszającym się napisem:
Kod: C / C++
Obsługa QMI8658
QMI8658A to zintegrowany, niskoprądowy 6-osiowy czujnik ruchu produkowany przez firmę QST (QST Microelectronics). Składa się z:
- 3-osiowego akcelerometru (mierzy przyspieszenie liniowe, czyli też przyspieszenie ziemskie, więc pozwala określić orientacje wyświetlacza)
- 3-osiowego żyroskopu (mierzy prędkość kątową, czyli obroty wokół osi)
Do QMI8658 udało mi się znaleźć bibliotekę na Githubie: https://github.com/ALICHOUCHENE/Qmi8658c
Miałem jednak problem z przełączeniem pinów, ostatecznie zmodyfikowałem konstruktor klasy QMI8658.
Ostatecznie wyszło tak:
Kod: C / C++
Teraz bieżąca orientacja wyświetlacza jest pokazywana na ekranie. Spójrzmy jak to działa w praktyce.
Na zdjęciu powyżej wyświetlacz leży płasko na stole, Z jest bliskie wartości -1, X i Y są zbliżone do zera.
Obróćmy go.
Teraz wyświetlacz jest na boku, i to wartość X zbliża się do 1. I na drugim boku X jest ujemne:
Jeszcze jeden przykład:
W ten sposób można by nawet sterować prostą aplikacją - użytkownik wychyla w daną stronę by wybrać odpowiednią opcję.
Podsumowując, to była dość prosta i przyjemna do uruchomienia płytka. Oprócz wsparcia LVGLa oferuja ona też QMI8658, co również tu zaprezentowałem. Troszkę brakuje tu ekranu dotykowego, ale w razie potrzeby można przerzucić się na pokrewny moduł ESP32-S3-Touch-LCD-1.28, który też wkrótce pokażę.
Jakie widzicie zastosowania dla tej płytki? Zastanawia mnie zwłaszcza brak wsparcia ekranu dotykowego połączony z obecnością QMI8658, co tu można by z tego zrobić... nawigacja po menu sterowana gestami?
Fajne? Ranking DIY Pomogłem? Kup mi kawę.