電子工作

Xiao Round DisplayをLovyanGFXで描画する

Arduino LovyanGFX

Seeed StudioのXiaoマイコン用円形ディスプレイ研究室から強奪手に入れたので、使い方をメモしておきます。

マイコンは、とりあえずSeeed Xiao ESP32S3を使用。

外観

正面
正面
後ろ(Xiaoは別売りです)
後ろ(Xiaoは別売りです)

LCDの他にSDカードスロットとRTC、リポバッテリー用のコネクタがあるっぽい?

LovyanGFXで表示

M5Stack系でよくM5Unifiedを使うので、使い慣れたLovyanGFXで表示してみます。

ディスプレイ定義は以下のような感じで動くはずです:

#include <LovyanGFX.h>

class LGFX_RoundDisplay : public lgfx::LGFX_Device {
  private:
    lgfx::Panel_GC9A01 _panel;
    lgfx::Bus_SPI _bus;

  public:
    LGFX_RoundDisplay() {
        {
            auto cfg = _bus.config();

            // Seeed Studio Round Display for XIAO
            // LCD SPI: XIAO のハードウェア SPI を使用
            cfg.spi_host = SPI2_HOST;
            cfg.spi_mode = 0;
            cfg.freq_write = 40000000;  // 40 MHz
            cfg.freq_read = 16000000;
            cfg.spi_3wire = true;
            cfg.use_lock = true;
            cfg.dma_channel = SPI_DMA_CH_AUTO;
            cfg.pin_sclk = D8;
            cfg.pin_mosi = D10;
            cfg.pin_miso = -1;
            cfg.pin_dc = D3;

            _bus.config(cfg);
            _panel.setBus(&_bus);
        }

        {
            auto cfg = _panel.config();

            cfg.pin_cs = D1;
            cfg.pin_rst = -1;
            cfg.pin_busy = -1;
            cfg.panel_width = 240;
            cfg.panel_height = 240;
            cfg.memory_width = 240;
            cfg.memory_height = 240;
            cfg.offset_x = 0;
            cfg.offset_y = 0;
            cfg.offset_rotation = 0;
            cfg.dummy_read_pixel = 8;
            cfg.dummy_read_bits = 1;
            cfg.readable = false;
            cfg.invert = true;
            cfg.rgb_order = false;
            cfg.dlen_16bit = false;
            cfg.bus_shared = false;

            _panel.config(cfg);
        }

        setPanel(&_panel);
    }
};

Arduino IDEで、実際に何か表示してみます:

constexpr uint8_t LCD_BL = D6; // バックライト制御用ピン

LGFX_RoundDisplay display;

void setup() {
    pinMode(LCD_BL, OUTPUT);
    digitalWrite(LCD_BL, HIGH);

    display.init();
    display.setRotation(1);
    display.setBrightness(255);

    display.fillScreen(TFT_BLACK);
    display.setTextColor(TFT_WHITE);
    display.setFont(&fonts::Font4);

    display.setCursor(0, 0);
    display.println("Hello, World!");
}

void loop() {
    delay(10000);
}
動いた!
動いた!

さて、何作ろうかな〜〜……

© 2026 Chimonakiko