logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658

p.kaczmarek2 11 Lip 2025 09:28 930 3

TL;DR

  • Waveshare ESP32-S3-LCD-1.28 łączy okrągły wyświetlacz IPS 1,28″ 240×240 z ESP32-S3 i czujnikiem QMI8658 do obsługi gestów oraz orientacji.
  • Płytkę uruchomiono w ESP32_Display_Panel przez własną konfigurację esp_panel_board_custom_conf.h, ustawienie pinów LCD, wyłączenie dotyku i korektę LV_COLOR_16_SWAP oraz odbicia osi X.
  • Moduł ma ESP32-S3 240 MHz, 2 MB PSRAM, 16 MB flash, sterownik GC9A01 i kosztuje około 70 zł.
  • Działa demo z kolorowymi kształtami i przewijanym napisem, a orientację ekranu pokazują odczyty QMI8658; brakuje jednak ekranu dotykowego.
REKLAMA
📢 Słuchaj (AI):
  • Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    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ł.
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658 Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658 Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    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:
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    Wymiary PCB:
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658 Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    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
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658 Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658

    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++
    Zaloguj się, aby zobaczyć kod

    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++
    Zaloguj się, aby zobaczyć kod








    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)
    Ulotka informacyjna układu QMI8658A z listą właściwości technicznych, zastosowań i krótkim opisem.
    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.
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    Ostatecznie wyszło tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Teraz bieżąca orientacja wyświetlacza jest pokazywana na ekranie. Spójrzmy jak to działa w praktyce.
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    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.
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    Teraz wyświetlacz jest na boku, i to wartość X zbliża się do 1. I na drugim boku X jest ujemne:
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    Jeszcze jeden przykład:
    Waveshare ESP32-S3-LCD-1.28 czyli malutki okrągły wyświetlacz z czujnikiem inercyjnym QMI8658
    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ę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14649 postów o ocenie 12661, pomógł 655 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • REKLAMA
  • #4 21603974
    TechEkspert
    Redaktor
    Posty: 7184
    Pomógł: 16
    Ocena: 5563
    Z okrągłymi wyświetlaczami mam taki problem, że interfejs trzeba bardzo dokładnie zaprojektować aby sensownie wykorzystać powierzchnię lepiej niż kwadrat wpisany w okrągły wyświetlacz. Natomiast w wielu projektach okrągły wyświetlacz będzie wyglądał ładnie i to jest wystarczający powód aby go zastosować.
📢 Słuchaj (AI):
REKLAMA