XIAO ESP32S3(sense) With Zephyr(RTOS)

このwikiでは、Seeed Studio XIAO ESP32S3のZephyrサポートについて説明します。このガイドの支援により、ボードで利用可能な機能セットを活用できるようになります。
Zephyrとは

Zephyr OSは、リソース制約のある組み込みシステムでの使用を目的として設計された小フットプリントカーネルに基づいています:シンプルな組み込み環境センサーやLEDウェアラブルから、高度な組み込みコントローラー、スマートウォッチ、IoTワイヤレスアプリケーションまで対応します。
Zephyrは、サポートされている各デバイスに対して、ボードとその機能を記述するdevicetreeファイルを持っています。Xiao ESP32S3 Zephyrボードページでは、現在利用可能なサポート機能について説明されており、これはボードのdtsファイルによって定義されています。
参考: Zephyr Project
はじめに
Zephyrを使用する最初のステップは、ローカル開発用のSDKとツールチェーンをセットアップすることです。お使いの環境に必要な関連セットアップ手順については、Zephyr入門ガイドを参照してください。
Zephyrツールチェーンがセットアップされ、関連するSDKがダウンロードされたら、アプリケーション開発を開始できます。
Xiao ESP32S3については、さらなるセットアップ情報としてボード説明ファイルを参照できます。
ESP32S3の使用に必要なblobを取得するには、以下のコマンドを実行してください:
west blobs fetch hal_espressif
この後、サンプルをビルドしてボードにフラッシュできます。
最も簡単な例は、ボード上で「Hello World」サンプルを実行することです。Zephyrインストールのディレクトリに移動した後、以下のコマンドを実行してください。
west build -p always -b xiao_esp32s3 samples/hello_world
west flash
west espressif monitor
最後のコマンドで、「Hello World!」の挨拶を表示するレスポンスが確認できるはずです。
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
Hello World! xiao_esp32s3
Xiaoとその拡張ボードでZephyrを使用するプロセスを支援するため、ここで使用されるいくつかのオーバーレイと設定を含むリポジトリが構築されています。このwiki記事に含まれるコマンドは、zephyrルートに対して相対的に../applications/xiao-zephyr-examples
に配置されていることを前提としています。以下のコマンドでパスを更新することで、代替パスを提供できます。
git clone https://github.com/Cosmic-Bee/xiao-zephyr-examples
ハードウェア準備
Seeed Studio XIAO ESP32S3 Sense | Seeed Studio Expansion Board |
---|---|
![]() | ![]() |
開発者向け知識
XIAO拡張ボード
Seeed Studio XIAO ESP32S3でGroveモジュールを使用するために、Seeed Studio Expansion Base for XIAOを使用し、その上にXIAO ESP32S3を接続します。
その後、ボード上のGroveコネクタを使用してGroveモジュールを接続できます

ピン定義
GroveモジュールをSeeed Studio XIAO用GroveシールドのGroveコネクタに接続する際は、以下の図に従って適切な内部ピン番号を使用する必要があります。

主要機能
- Bluetooth
- Wi-Fi
- TFLite
Bluetooth
このセットアップをテストするために、Zephyrの既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/bluetooth/observer
west flash
west espressif monitor
You will see a console available for sending commands to the board:
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
Starting Observer Demo
Started scanning...
Exiting main thread.
Device found: EC:11:27:22:AF:D2 (public) (RSSI -77), type 0, AD data len 31
Device found: 02:96:58:9A:B4:64 (random) (RSSI -78), type 3, AD data len 31
Device found: 66:A5:E1:CF:8C:35 (random) (RSSI -58), type 0, AD data len 17
Device found: 62:09:50:DB:85:D0 (random) (RSSI -92), type 0, AD data len 14
Device found: C4:5A:95:A7:96:7D (random) (RSSI -78), type 0, AD data len 20
Device found: E5:44:60:88:DB:99 (random) (RSSI -82), type 0, AD data len 27
Device found: 66:18:ED:DD:74:1C (random) (RSSI -71), type 0, AD data len 17
Device found: 37:D2:FC:F8:FA:B8 (random) (RSSI -75), type 3, AD data len 31
Device found: 40:B8:84:E5:5F:A4 (random) (RSSI -70), type 2, AD data len 28
Device found: 44:EB:7C:AA:89:0B (random) (RSSI -83), type 0, AD data len 18
Device found: 71:AC:4A:98:5E:73 (random) (RSSI -72), type 2, AD data len 4
Device found: 60:D9:62:70:EF:4C (random) (RSSI -95), type 2, AD data len 4
Device found: D8:7D:FC:AE:37:F0 (random) (RSSI -67), type 3, AD data len 8
Device found: 48:1F:C0:29:77:C2 (random) (RSSI -73), type 2, AD data len 4
Device found: 46:B7:35:F5:D7:BE (random) (RSSI -86), type 3, AD data len 17
Device found: E5:4A:F1:1C:3C:39 (random) (RSSI -88), type 3, AD data len 8
CONFIG_BT=y
CONFIG_BT_OBSERVER=y
こちらのconfファイルは、Zephyrビルド用のBluetooth関連機能を有効にします。
Wi-Fi
このセットアップをテストするために、Zephyrの既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/net/wifi
west flash
west espressif monitor
ボードにコマンドを送信するためのコンソールが利用可能になります:
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
uart:~$
ローカルネットワークを表示および接続するためのいくつかのコマンドが存在します。詳細についてはサンプルreadmeを参照してください。
uart:~$ wifi scan
Scan requested
Num | SSID (len) | Chan (Band) | RSSI | Security | BSSID | MFP
1 | Zephytopia 10 | 6 (2.4GHz) | -42 | WPA2-PSK | | Disable
2 | Maceronia 9 | 6 (2.4GHz) | -43 | WPA2-PSK | | Disable
この例を少し詳しく見て、なぜ動作するのかを理解しましょう:
&wifi {
status = "okay";
};
アプリのオーバーレイファイルは、様々なボードコンポーネントをセットアップするために使用されます。このファイルを使用することで、オーバーレイがサンプルロジックにWi-Fiを有効にするよう指示するため、例を活用することができます。
CONFIG_WIFI=y
CONFIG_NETWORKING=y
CONFIG_NET_L2_ETHERNET=y
CONFIG_NET_IPV6=n
CONFIG_NET_IPV4=y
CONFIG_NET_DHCPV4=y
CONFIG_ESP32_WIFI_STA_AUTO_DHCPV4=y
CONFIG_NET_LOG=y
conf ファイルは、Zephyr ビルドのためのいくつかのネットワーク関連機能を有効にします。
TFLite - Hello World
Zephyr で TFLite を有効にして更新します:
west config manifest.project-filter -- +tflite-micro
west update
サンプルをビルドしてボードにフラッシュします:
west build -p always -b xiao_esp32s3 samples/modules/tflite-micro/hello_world
west flash
west espressif monitor
コンソールから返される結果が表示されます:
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
x_value: 1.0*2^-127, y_value: 1.0*2^-127
x_value: 1.2566366*2^-2, y_value: 1.4910772*2^-2
x_value: 1.2566366*2^-1, y_value: 1.1183078*2^-1
x_value: 1.8849551*2^-1, y_value: 1.677462*2^-1
x_value: 1.2566366*2^0, y_value: 1.9316229*2^-1
x_value: 1.5707957*2^0, y_value: 1.0420598*2^0
x_value: 1.8849551*2^0, y_value: 1.9146791*2^-1
x_value: 1.0995567*2^1, y_value: 1.6435742*2^-1
x_value: 1.2566366*2^1, y_value: 1.0674761*2^-1
x_value: 1.4137159*2^1, y_value: 1.8977352*2^-3
TFLiteに関する追加情報はこのガイドの範囲外ですが、この例はデバイスの機能とTFLiteセットアップの実行に必要なコンポーネントのガイドとして役立ちます。
追加コンポーネント
- Grove - Expansion Board - I2Cディスプレイ
- Grove - Expansion Board - ボタン
- Grove - Expansion Board - ブザー
- Grove - Expansion Board - SDカード
- Grove - Temperature and Humidity Sensor (SHT31)
- 1.69inch LCD Display Module, 240×280 Resolution, SPI Interface
- Round Display for Xiao
Grove - Expansion Board - I2Cディスプレイ

このセットアップをテストするために、Zephyrの既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/drivers/display -- -DSHIELD=seeed_xiao_expansion_board
west flash
この表示では、複数の黒いボックスと角で点滅するボックスが表示されます。この表示は2色のみをサポートしているためです。
この例がなぜ機能するのかを詳しく見てみましょう:
/ {
chosen {
zephyr,display = &ssd1306;
};
};
&xiao_i2c {
status = "okay";
ssd1306: ssd1306@3c {
compatible = "solomon,ssd1306fb";
reg = <0x3c>;
width = <128>;
height = <64>;
segment-offset = <0>;
page-offset = <0>;
display-offset = <0>;
multiplex-ratio = <63>;
segment-remap;
com-invdir;
prechargep = <0x22>;
};
};
シールドは0x3Cレジスタに SSD1306 OLED スクリーンを設定します。これは chosen セクションで zephyr ディスプレイとして選択されています。
Grove - 拡張ボード - ボタン
このセットアップをテストするために、Zephyr の既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/basic/button -- -DSHIELD=seeed_xiao_expansion_board
west flash
west espressif monitor
ボタンをサンプルで押すと、オンボードLEDが点灯します。
コンソールから結果が返されるのが確認できます:
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
Set up button at gpio@60004000 pin 2
Set up LED at gpio@60004000 pin 21
Press the button
Button pressed at 842621292
Button pressed at 1164489270
Button pressed at 1329015357
Button pressed at 1577684271
Button pressed at 1728636675
Button pressed at 1728755988
Button pressed at 1822426500
この例を少し詳しく見て、なぜ動作するのかを理解しましょう:
/ {
aliases {
sw0 = &xiao_button0;
};
buttons {
compatible = "gpio-keys";
xiao_button0: button_0 {
gpios = <&xiao_d 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "SW0";
zephyr,code = <INPUT_KEY_0>;
};
};
};
シールド/オーバーレイファイルは、さまざまなボードコンポーネントのセットアップに使用されます。このファイルを使用することで、ボタンの例を活用できます。オーバーレイによりZephyrがボタンを設定し、関連するコードで使用できるようになります。
この場合、Xiao ESP32S3のD1です。このオーバーレイでボタンとして動作するように設定され、sw0名にエイリアスされて、この名前を期待するコードを持つサンプルで使用できるようになります。
Grove - 拡張ボード - ブザー
blinky PWMの例を使用してブザーを有効化し、PWM信号を介してその動作を制御します。このために、A3ピンのPWMを有効にするカスタムオーバーレイを使用します。
cd ~/zephyrproject/zephyr
west build -p always -b xiao_esp32s3 samples/basic/blinky_pwm -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/xiao-esp32s3/xiao_expansion_buzzer.overlay"
フラッシュ後、サンプルが実行される過程で音が変化する一連のブザー音が聞こえ始めるはずです。
なぜこれが機能するのかを見てみましょう:
#include <zephyr/dt-bindings/pwm/pwm.h>
/ {
aliases {
pwm-0 = &ledc0;
pwm-led0 = &pwm_buzzer;
};
pwmleds {
compatible = "pwm-leds";
pwm_buzzer: pwm_led_gpio0_4 {
label = "PWM Buzzer";
pwms = <&ledc0 0 1000 PWM_POLARITY_NORMAL>;
};
};
};
&pinctrl {
ledc0_default: ledc0_default {
group1 {
pinmux = <LEDC_CH0_GPIO4>;
output-enable;
};
};
};
&ledc0 {
pinctrl-0 = <&ledc0_default>;
pinctrl-names = "default";
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
channel0@0 {
reg = <0x0>;
timer = <0>;
};
};
オーバーレイは、ESP32S3ピンアウトのA3ピンに対応するピン4のPWMロジックを設定します。
Grove - 拡張ボード - SDカード
ここではファイルシステムサンプルをXiao拡張ボードシールドと一緒に使用して、SPI経由でSDカードリーダーとのインターフェースを試してみます。拡張ボードシールドには、関連する&xiao_d 2
ピン用に設定されたCSピンがあるため、この機能をボードに関連付けるためにシールドを追加する以外に、あなたが行う作業はありません。さらに準備するために、SDカード機能を有効にするカスタム設定を使用しています。
cd ~/zephyrproject/zephyr
west build -p always -b xiao_esp32s3 samples/subsys/fs/fs_sample -- -DEXTRA_CONF_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/xiao_expansion_sd.conf" -DSHIELD=seeed_xiao_expansion_board
次にフラッシュしてモニターします:
west flash
west espressif monitor
次のような応答が表示されるはずです:
*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
[00:00:00.208,000] <inf> sd: Maximum SD clock is under 25MHz, using clock of 24000000Hz
[00:00:00.208,000] <inf> main: Block count 15519744
Sector size 512
Memory Size(MB) 7578
Disk mounted.
Listing dir /SD: ...
[FILE] IMAGE1.JPG (size = 58422)
[FILE] IMAGE2.JPG (size = 97963)
この場合、私のSDカードには2つのファイルがありました。それらの名前とサイズがコンソールに出力されました。
ここで関連する要素を見てみましょう:
CONFIG_SPI=y
CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_GPIO=y
関連する設定では、SPI、SDMMCディスクドライバー、およびGPIOを有効にしています。この設定がないと、サンプルがSDカードを見つけることができないため、オーバーレイがエラーを引き起こします。
Xiao拡張ボードシールドの関連部分を以下に示します:
&xiao_spi {
status = "okay";
cs-gpios = <&xiao_d 2 GPIO_ACTIVE_LOW>;
sdhc0: sdhc@0 {
compatible = "zephyr,sdhc-spi-slot";
reg = <0>;
status = "okay";
mmc {
compatible = "zephyr,sdmmc-disk";
status = "okay";
};
spi-max-frequency = <24000000>;
};
};
前述のように、&xiao_d 2
ピンマッピングは、&xiao_d
ピン設定をサポートしている限り、使用するボードに関係なく D2 ピンを選択できるようにするために使用されます。
Grove - 温湿度センサー (SHT31)
まずピンをはんだ付けし、Xiao ESP32S3 を拡張ボードに接続します。次に、Grove SHT31 と拡張ボード上の I2C ポートの一つの間に Grove コネクタケーブルを接続します。

この設定をテストするために、Zephyr の既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/sensor/sht3xd -- -DDTC_OVERLAY_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/sht31.overlay
west flash
west espressif monitor
コンソールから返される結果が表示されます:
*** Booting Zephyr OS build v3.6.0-1155-g1a55caf8263e ***
SHT3XD: 25.54 Cel ; 53.39 %RH
SHT3XD: 25.58 Cel ; 53.42 %RH
SHT3XD: 25.60 Cel ; 53.57 %RH
SHT3XD: 25.68 Cel ; 53.71 %RH
SHT3XD: 25.68 Cel ; 53.72 %RH
SHT3XD: 25.71 Cel ; 53.67 %RH
SHT3XD: 25.75 Cel ; 53.60 %RH
SHT3XD: 25.76 Cel ; 53.48 %RH
SHT3XD: 25.82 Cel ; 53.31 %RH
SHT3XD: 25.84 Cel ; 53.16 %RH
この例を少し詳しく見て、なぜ動作するのかを理解しましょう:
&xiao_i2c {
sht3xd@44 {
compatible = "sensirion,sht3xd";
reg = <0x44>;
};
};
アプリオーバーレイファイルは、さまざまなボードコンポーネントをセットアップするために使用されます。このファイルを使用することで、SHT31の例を活用できます。オーバーレイがサンプルロジックに対して、私たちのボード用にセンサーを設定する方法を通知するためです。
1.69インチLCDディスプレイモジュール、240×280解像度、SPIインターフェース
この例では、SPIを使用して240x280解像度の1.69インチLCDに接続します。
まず、以下の画像をガイドとして使用してボードをLCDスクリーンに接続してください(この場合はXiao ESP32S3を使用していますが、接続には同じピンレイアウトが使用されます)。
1.69インチLCD SPIディスプレイ | XIAO ESP32S3 |
---|---|
VCC | 3V3 |
GND | GND |
DIN | D10 |
CLK | D8 |
CS | D1 |
DC | D3 |
RST | D0 |
BL | D6 |

これでファームウェアをビルドしてフラッシュできます:
cd ~/zephyrproject/zephyr
west build -p always -b xiao_esp32s3 samples/drivers/display -- -DDTC_OVERLAY_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/240x280_st7789v2.overlay -DEXTRA_CONF_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/240x280_st7789v2.conf
west flash
新しいファームウェアが配置されると、デバイスは以前に拡張ボードで見たのと同じデモ画面を表示しますが、今度はSPI経由のカラーLCD用に更新されています。

Xiao用ラウンドディスプレイ
このセットアップをテストするために、Zephyrの既存のサンプルを使用できます:
west build -p always -b xiao_esp32s3 samples/drivers/display -- -DSHIELD=seeed_xiao_round_display
ブートローダーモードに入り、デバイスをフラッシュします:
west flash
複数の色付きコーナーと黒いコーナーが点滅している表示が見えます。
別の例では、タッチスクリーンの使用方法を示しています:
west build -p always -b xiao_esp32s3 samples/modules/lvgl/demos -- -DSHIELD=seeed_xiao_round_display -DCONFIG_LV_Z_DEMO_MUSIC=y
ここで示されている音楽デモは実際の画面の一部のみですが、それでもタッチスクリーンの動作を実演しています。ご覧のように、再生ボタンをタッチすると音楽アニメーションがオンになります。
シールドファイルから分かるように、これはSPI経由でGC9A01円形ディスプレイドライバーと、i2c経由でCHSC6Xタッチモジュールとインターフェースすることで動作します。
この例がどのように動作するかを詳しく見てみましょう:
/ {
chosen {
zephyr,display = &gc9a01_xiao_round_display;
};
lvgl_pointer {
compatible = "zephyr,lvgl-pointer-input";
input = <&chsc6x_xiao_round_display>;
};
};
/*
* xiao_serial uses pins D6 and D7 of the Xiao, which are used respectively to
* control the screen backlight and as touch controller interrupt.
*/
&xiao_serial {
status = "disabled";
};
&xiao_i2c {
clock-frequency = < I2C_BITRATE_FAST >;
chsc6x_xiao_round_display: chsc6x@2e {
status = "okay";
compatible = "chipsemi,chsc6x";
reg = <0x2e>;
irq-gpios = <&xiao_d 7 GPIO_ACTIVE_LOW>;
};
};
&xiao_spi {
status = "okay";
cs-gpios = <&xiao_d 1 GPIO_ACTIVE_LOW>, <&xiao_d 2 GPIO_ACTIVE_LOW>;
gc9a01_xiao_round_display: gc9a01@0 {
status = "okay";
compatible = "galaxycore,gc9x01x";
reg = <0>;
spi-max-frequency = <DT_FREQ_M(100)>;
cmd-data-gpios = <&xiao_d 3 GPIO_ACTIVE_HIGH>;
pixel-format = <PANEL_PIXEL_FORMAT_RGB_565>;
width = <240>;
height = <240>;
display-inversion;
};
};
このシールドは以下の機能を提供します:
- 選択されたZephyrディスプレイとしてGC9A01ディスプレイを選択
- CHSC6Xモジュールを使用するようにLVGLポインターロジックを設定
- ピンがバックライトとタッチ割り込みに使用されるためシリアルを無効化(上記の通り:
irq-gpios = <&xiao_d 7 GPIO_ACTIVE_LOW>;
で確認可能) - D1、D2、D3ピンを使用してSPI用の円形ディスプレイを設定
サンプルロジックはLVGLデモサンプルコードに依存しており、さらに詳しく調べることができます。
✨ コントリビュータープロジェクト
- このプロジェクトはSeeed Studioのコントリビュータープロジェクトによってサポートされています。
- Timの努力に感謝し、あなたの作品は展示されます。
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます!弊社では、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。