Skip to main content
note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

XIAO SAMD21 と Zephyr(RTOS)

RTOSとは

今日の組み込みシステムにおいて最も重要なコンポーネントの1つがRTOS、つまりリアルタイムオペレーティングシステムです。RTOSはタスクスケジューリングからアプリケーションの実行までを担います。

RTOSは予測可能な実行モードを提供するよう設計されています。処理がシステムの時間制限を満たす必要がある場合にRTOSが使用されます。そのため、GPOS(汎用オペレーティングシステム)と比較して、RTOSは通常軽量で小型であり、特定のハードウェア上で特定の種類のアプリケーションを実行するために必要な機能のみを提供します。場合によっては、開発者が既存のRTOSを変更し、特定のアプリケーションに必要な機能のみを提供するように縮小したり、その機能や性能特性をカスタマイズすることができます。

Zephyrとは

Zephyr OSは、小型カーネルを基盤としており、リソースが制約された組み込みシステムでの使用を目的としています。これには、シンプルな組み込み環境センサーやLEDウェアラブルから、高度な組み込みコントローラー、スマートウォッチ、IoT無線アプリケーションまでが含まれます。

特徴

Zephyrは多くの機能を提供しており、その数は増え続けています。

豊富なカーネルサービス

Zephyrは開発において馴染みのある多くのサービスを提供します:

  • マルチスレッドサービス:協調型、優先度ベース、非プリエンプティブ、プリエンプティブスレッドに対応し、オプションでラウンドロビンタイムスライスを提供。POSIX pthreads互換APIサポートを含む。
  • 割り込みサービス:割り込みハンドラのコンパイル時登録。
  • メモリ割り当てサービス:固定サイズまたは可変サイズのメモリブロックの動的割り当てと解放。
  • スレッド間同期サービス:バイナリセマフォ、カウントセマフォ、ミューテックスセマフォ。
  • スレッド間データ転送サービス:基本的なメッセージキュー、拡張メッセージキュー、バイトストリーム。
  • 電源管理サービス:包括的なアプリケーションまたはポリシー定義のシステム電源管理と、ドライバー定義の細かいデバイス電源管理。

複数のスケジューリングアルゴリズム

Zephyrは包括的なスレッドスケジューリングの選択肢を提供します:

  • 協調型およびプリエンプティブスケジューリング
  • 最早期限優先(EDF)
  • 割り込みボトムハーフまたはタスクリット動作を実装するMeta IRQスケジューリング
  • タイムスライシング:同じ優先度のプリエンプティブスレッド間でのタイムスライスを可能にする
  • 複数のキューイング戦略:
    • シンプルなリンクリスト準備キュー
    • 赤黒木準備キュー
    • 従来のマルチキュー準備キュー

Bluetooth Low Energy 5.0対応

Bluetooth 5.0準拠(ESR10)およびBluetooth Low Energyコントローラーサポート(LEリンク層)。BluetoothメッシュおよびBluetooth認定準備済みBluetoothコントローラーを含む。

  • 汎用アクセスプロファイル(GAP):すべての可能なLEロールに対応
  • 汎用属性プロファイル(GATT)
  • ペアリングサポート:Bluetooth 4.2のセキュアコネクション機能を含む
  • クリーンなHCIドライバー抽象化
  • Zephyrをコントローラーとして実行するためのRaw HCIインターフェース(フルホストスタックではなく)
  • 複数の人気コントローラーで検証済み
  • 高い構成可能性

メッシュサポート:

  • リレー、フレンドノード、低電力ノード(LPN)、およびGATTプロキシ機能
  • 両方のプロビジョニングベアラーに対応(PB-ADV & PB-GATT)
  • 高い構成可能性:少なくとも16k RAMを持つデバイスに適合

参考: Zephyr Project

はじめに

このウィキでは、ZephyrXIAO SAMD21 Zephyr(RTOS) Getting Startedをサポートする方法について説明します。このガイドを利用することで、ボードで利用可能な機能セットを活用することができます。

Zephyrを使用する最初のステップは、ローカル開発用にSDKとツールチェーンをセットアップすることです。環境に必要なセットアップ手順については、Zephyrの入門ガイドを参照してください。

Zephyrツールチェーンがセットアップされ、関連するSDKがダウンロードされたら、アプリケーション開発を開始できます。

Xiao SAMD21をプログラムするには、以下の手順を実行します:

  1. サンプルまたはアプリケーションをビルドする
  2. Xiao SAMD21を接続する
  3. RSTピンをGNDにショート(テストポイントを使用)してMCUをブートローダーモードにする(または、拡張ボードに接続されたRESETボタンを素早く2回押す)
  4. west flashを使用してファームウェアをボードにフラッシュする

最も簡単な例は、ボード上で「Hello World」サンプルを実行することです。Zephyrインストールディレクトリに移動した後、以下のコマンドを実行します。

west build -p always -b seeeduino_xiao samples/subsys/usb/console

RESETボタンを2回押すか、RSTピンをGNDにショートしてください:

west flash

USBが接続されたときに表示されるデバイスを確認するために、ls /dev/tty*を入力してデバイスのポートを見つけます。

例として、/dev/ttyACM0が新しく追加されたデバイスとして表示されます。

次に、screenを使用してシリアル応答を監視します:

screen /dev/ttyACM0 115200

以下のような応答が表示されるはずです:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
Hello World! arm
Hello World! arm
Hello World! arm
Hello World! arm

Xiaoおよびその拡張ボードでZephyrを使用するプロセスを支援するために、ここで使用されるいくつかのオーバーレイと設定を含むリポジトリが構築されています。このウィキ記事に含まれるコマンドは、Zephyrルートに対して../applications/xiao-zephyr-examplesに配置されていると仮定しています。以下のコマンドを更新することで、代替パスを指定することができます。

git clone https://github.com/Cosmic-Bee/xiao-zephyr-examples

ハードウェア準備

Seeed Studio XIAO SAMD21Seeed Studio 拡張ボード

開発者向け知識

XIAO 拡張ボード

Seeed Studio XIAO SAMD21でGroveモジュールを使用するために、Seeed Studio Expansion Base for XIAOを使用し、XIAO SAMD21を接続します。

その後、ボード上のGroveコネクタを使用してGroveモジュールを接続できます。

ピン定義

Grove Shield for Seeed Studio XIAOのGroveコネクタにGroveモジュールを接続する際には、以下のグラフィックに従って適切な内部ピン番号を使用する必要があります。

主な機能

  • オンボードLED
  • USB HID
  • LittleFS
  • TFLite

オンボードLED

この例では、オンボードLEDを点滅させるためにblinkyサンプルを使用します。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/basic/blinky

RESETボタンを2回押すか、RSTピンをGNDにショートしてください:

west flash

オンボードの黄色LEDが点滅する様子が確認できます。

この例が動作する理由を少し掘り下げてみましょう。

関連するサンプルコードはled0を参照しています:

#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

これはXiao SAMD21のデバイスツリーコードでエイリアスとして定義されています:

	aliases {
led0 = &led;
};

leds {
compatible = "gpio-leds";
led: led_0 {
gpios = <&porta 17 GPIO_ACTIVE_LOW>;
label = "LED";
};
};

これはボード上のPA17ピンに対応しています。Xiao SAMD21の回路図を確認し、MCUのピンラベルを確認することで見つけることができます。

Xiaoのブレークアウトピンを使用する場合、ボードファイルが提供するXiaoコネクタを使用することで、&portaや&portbのピンマッピングを直接使用する必要がなくなります。

例えば、D0を参照する場合、&porta 2または&xiao_d 0として参照します。

/ {
xiao_d: connector {
compatible = "seeed,xiao-gpio";
#gpio-cells = <2>;
gpio-map-mask = <0xffffffff 0xffffffc0>;
gpio-map-pass-thru = <0 0x3f>;
gpio-map
= <0 0 &porta 2 0> /* D0 */
, <1 0 &porta 4 0> /* D1 */
, <2 0 &porta 10 0> /* D2 */
, <3 0 &porta 11 0> /* D3 */
, <4 0 &porta 8 0> /* D4 */
, <5 0 &porta 9 0> /* D5 */
, <6 0 &portb 8 0> /* D6 */
, <7 0 &portb 9 0> /* D7 */
, <8 0 &porta 7 0> /* D8 */
, <9 0 &porta 5 0> /* D9 */
, <10 0 &porta 6 0> /* D10 */
;
};
};

USB HID

このサンプルアプリケーションでは、USB HID Mouse サンプルを使用して Xiao SAMD21 がホストコンピュータのマウスクリックをトリガーできるようにします。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/subsys/usb/hid-mouse -- -DDTC_OVERLAY_FILE=/home/nineso/zephyrproject/zephyr/boards/shields/seeed_xiao_expansion_board/seeed_xiao_expansion_board.overlay

RESET ボタンをダブルプレスするか、RST ピンを GND にショートしてください:

west flash

Xiao がリセットされた後、拡張ボード上のボタンを使用して左マウスボタンを制御できるようになります。テキストの上にカーソルを合わせ、ボタンを素早くダブルクリックしてみてください。通常のマウスで左クリックした場合と同様に、テキストがハイライトされるのがわかります。また、サンプルがデバイスツリーで設定された LED に依存しているため、ボタンをクリックするとオンボード LED が点灯するのも確認できます。

このサンプルでは、最大4つのボタンを設定して、マウスのボタンや方向をトリガーするように構成することができます。

	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>;
};
};

aliases {
sw0 = &xiao_button0;
};

この例では、&xiao_d 1 が D1 ピンを示すために使用されています。このマッピングは Xiao SAMD21 ボードファイルによって提供されており、基盤となる MCU のマッピングを知る必要がなく、Xiao のピン配置に依存して接続できるため便利です。

HID Mouse サンプルでは、ボタンは compatible = "gpio-keys"; として設定されているかどうか、また関連するキー(マウス用に 0-3)にマッピングされているかどうかによって決定されます。この場合、zephyr,code = <INPUT_KEY_0>; を使用しており、これは左マウスボタンに対応しています。

led0 エイリアスは、前のセクションで述べたように、ボードのデバイスツリーファイルによって設定されています。

LittleFS

この例では、LittleFS Zephyr サンプルを使用して LittleFS パーティションを作成し、ファイルをファイルシステムに保存します。その後、再接続してシリアル出力を通じてファイルがまだ存在することを確認します。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/subsys/fs/littlefs -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/console.overlay" -DEXTRA_CONF_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/console.conf

RESET ボタンをダブルプレスするか、RST ピンを GND にショートしてください:

west flash

フラッシュ後、MCU がリセットされるのを少し待ち、モニターに接続します:

screen /dev/ttyACM0 115200

以下のような出力が表示されます:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
Sample program to r/w files on littlefs
Area 2 at 0x3c000 on nvmctrl@41004000 for 16384 bytes
I: LittleFS version 2.8, disk version 2.1
I: FS at nvmctrl@41004000:0x3c000 is 64 0x100-byte blocks with 512 cycle
I: sizes: rd 16 ; pr 16 ; ca 64 ; la 32
E: WEST_TOPDIR/modules/fs/littlefs/lfs.c:1351: Corrupted dir pair at {0x0, 0x1}
W: can't mount (LFS -84); formatting
I: /lfs mounted
/lfs mount: 0
/lfs: bsize = 16 ; frsize = 256 ; blocks = 64 ; bfree = 62

Listing dir /lfs ...
/lfs/boot_count read count:0 (bytes: 0)
/lfs/boot_count write new boot count 1: [wr:1]
I: Test file: /lfs/pattern.bin not found, create one!
------ FILE: /lfs/pattern.bin ------
01 55 55 55 55 55 55 55 02 55 55 55 55 55 55 55
03 55 55 55 55 55 55 55 04 55 55 55 55 55 55 55
05 55 55 55 55 55 55 55 06 55 55 55 55 55 55 55
07 55 55 55 55 55 55 55 08 55 55 55 55 55 55 55
09 55 55 55 55 55 55 55 0a 55 55 55 55 55 55 55
0b 55 55 55 55 55 55 55 0c 55 55 55 55 55 55 55
screen /dev/ttyACM0 115200

再度シリアルモニターに接続すると、フォーマットやファイル作成が不要であることが確認できます:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
Sample program to r/w files on littlefs
Area 2 at 0x3c000 on nvmctrl@41004000 for 16384 bytes
I: LittleFS version 2.8, disk version 2.1
I: FS at nvmctrl@41004000:0x3c000 is 64 0x100-byte blocks with 512 cycle
I: sizes: rd 16 ; pr 16 ; ca 64 ; la 32
/lfs mount: 0
/lfs: bsize = 16 ; frsize = 256 ; blocks = 64 ; bfree = 59

Listing dir /lfs ...
[FILE] boot_count (size = 1)
[FILE] pattern.bin (size = 547)
/lfs/boot_count read count:1 (bytes: 1)
/lfs/boot_count write new boot count 2: [wr:1]
------ FILE: /lfs/pattern.bin ------
02 55 55 55 55 55 55 55 03 55 55 55 55 55 55 55
04 55 55 55 55 55 55 55 05 55 55 55 55 55 55 55
06 55 55 55 55 55 55 55 07 55 55 55 55 55 55 55
08 55 55 55 55 55 55 55 09 55 55 55 55 55 55 55
0a 55 55 55 55 55 55 55 0b 55 55 55 55 55 55 55
0c 55 55 55 55 55 55 55 0d 55 55 55 55 55 55 55
0e 55 55 55 55 55 55 55 0f 55 55 55 55 55 55 55
10 55 55 55 55 55 55 55 11 55 55 55 55 55 55 55
12 55 55 55 55 55 55 55 13 55

TFLite - Hello World

Zephyr で TFLite を有効化し、更新します:

west config manifest.project-filter -- +tflite-micro
west update

この例では、サンプルの TFLite "Hello World" を使用し、コンソールオーバーレイと設定を組み合わせて USB シリアル経由で応答を読み取ります。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/modules/tflite-micro/hello_world -- -DDTC_OVERLAY_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/console.overlay -DEXTRA_CONF_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/console.conf

RESET ボタンをダブルプレスするか、RST ピンを GND にショートしてください:

west flash

フラッシュ後、MCU がリセットされるのを少し待ち、モニターに接続します:

screen /dev/ttyACM0 115200

コンソールから以下のような結果が返されます:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
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

追加コンポーネント

Grove - 拡張ボード - I2C ディスプレイ

このセットアップをテストするには、Zephyr の既存のサンプルを使用できます:

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/drivers/display -- -DSHIELD=seeed_xiao_expansion_board

RESET ボタンを2回押すか、RST ピンを GND に短絡させます:

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 - 拡張ボード - ボタン

このセットアップをテストするには、USB コンソールオーバーレイと設定ファイルを使用して Zephyr の既存のサンプルを使用します。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/basic/button -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/console.overlay" -DEXTRA_CONF_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/console.conf -DSHIELD=seeed_xiao_expansion_board

RESET ボタンを2回押すか、RST ピンを GND に短絡させます:

west flash

フラッシュ後、MCU がリセットされるのを少し待ち、モニターに接続します:

screen /dev/ttyACM0 115200

サンプルでボタンを押すと、オンボード LED が点灯します。

コンソールに以下のような結果が表示されます:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
Set up button at gpio@41004400 pin 4
Set up LED at gpio@41004400 pin 17
Press the button
Button pressed at 420744116
Button pressed at 454208099
Button pressed at 484598863
Button pressed at 518217016
Button pressed at 550754013
Button pressed at 591496990

この例がなぜ動作するのかを少し掘り下げてみましょう:

/ {
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_d コネクタインターフェースを使用して D1 をボタンとして関連付けています。代わりに、MCU 上で D1 に対応するピンである &porta 4 を使用することも可能です。

Grove - 拡張ボード - ブザー

PWM 信号を使用してブザーを制御するために、blinky PWM の例を使用します。このために、A3 ピンの PWM を有効にするカスタムオーバーレイを使用します。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/basic/blinky_pwm -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/xiao-samd21/xiao_expansion_buzzer.overlay"

uf2 ファイルをアップロードすると、サンプルが進行するにつれて音が変化する一連のブザー音が聞こえます。

これがなぜ動作するのかを見てみましょう:

/delete-node/ &pwm_led0;

/ {
aliases {
pwm-led = &pwm_led0;
};

pwm_leds {
status = "okay";
compatible = "pwm-leds";

pwm_led0: pwm_led_0 {
pwms = <&tcc1 1 PWM_HZ(880) >;
};
};
};

&pinctrl {
pwm_default: pwm_default {
group1 {
pinmux = <PA11E_TCC1_WO1>;
};
};
};

&tcc1 {
status = "okay";
compatible = "atmel,sam0-tcc-pwm";
/* 最大周期は 1.4 秒 */
prescaler = <1024>;
#pwm-cells = <2>;

pinctrl-0 = <&pwm_default>;
pinctrl-names = "default";
};

使用されているオーバーレイは、まず既存の pwm_led0 ノードを削除します。このボードはすでにこのエイリアスで構成されているためです。その後、A3 ピンを PWM 用に設定します。

A3 ピンは SAMD21 上の GPIO PA11 に対応しています。その関連する PWM ピンマックスが PA11E_TCC1_WO1 であるため、PWM には tcc1 タイマーを使用します。

Grove - 拡張ボード - SD カード

ここでは、Xiao 拡張ボードシールドを使用して SPI 経由で SD カードリーダーとインターフェースするためにファイルシステムサンプルを使用します。拡張ボードシールドには、CS ピンが &xiao_d 2 ピンに設定されているため、この機能をボードに関連付けるためにシールドを追加する以外に作業は必要ありません。これをさらに準備するために、SD カード機能を有効にするカスタム設定を使用します。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/subsys/fs/fs_sample -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/console.overlay $(dirname $(pwd))/applications/xiao-zephyr-examples/xiao_expansion_sd.overlay" -DEXTRA_CONF_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/console.conf $(dirname $(pwd))/applications/xiao-zephyr-examples/xiao_expansion_sd.conf" -DSHIELD=seeed_xiao_expansion_board

UF2ファイルをアップロードした後、モニターに接続します:

screen /dev/ttyACM0 115200
*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
[00:00:00.197,000] <inf> sd: Maximum SD clock is under 25MHz, using clock of 10000000Hz
[00:00:00.198,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 Expansion Boardシールドの関連部分は、実際には以下に示すように、Xiao SAMD21用に使用されるxiao_expansion_sd.overlayによってオーバーライドされています:

&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 = <10000000>;
};
};

前述のように、&xiao_d 2ピンマッピングは、使用するボードが&xiao_dピンセットアップをサポートしている限り、D2ピンを選択できるように使用されています。

ここでシールドのオーバーレイを使用せずにオーバーライドしている理由は、シールドによって設定されたspi-max-frequency24000000であり、これが高すぎてSAMD21が失敗するためです。

Grove - 温湿度センサー (SHT31)

まずピンをはんだ付けし、Xiao SAMD21を拡張ボードに接続します。その後、Grove SHT31と拡張ボードのI2Cポートの1つの間にGroveコネクタケーブルを接続します。

このセットアップをテストするために、Zephyrの既存のサンプルを使用し、オーバーレイと設定でUSBコンソールサポートを有効にします。

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao samples/sensor/sht3xd -- -DDTC_OVERLAY_FILE="$(dirname $(pwd))/applications/xiao-zephyr-examples/sht31.overlay $(dirname $(pwd))/applications/xiao-zephyr-examples/console.overlay" -DEXTRA_CONF_FILE=$(dirname $(pwd))/applications/xiao-zephyr-examples/console.conf

RESETボタンを2回押すか、RSTピンをGNDにショートします:

west flash

フラッシュ後、MCUがリセットされるのを少し待ち、モニターに接続します:

screen /dev/ttyACM0 115200

コンソールから結果が返されます:

*** Booting Zephyr OS build v3.6.0-2566-gc9b45bf4672a ***
SHT3XD: 26.13 Cel ; 47.34 %RH
SHT3XD: 26.11 Cel ; 46.93 %RH
SHT3XD: 26.14 Cel ; 46.78 %RH
SHT3XD: 26.17 Cel ; 46.60 %RH
SHT3XD: 26.19 Cel ; 46.25 %RH
SHT3XD: 26.21 Cel ; 46.01 %RH
SHT3XD: 26.21 Cel ; 45.82 %RH
SHT3XD: 26.23 Cel ; 46.28 %RH
SHT3XD: 26.27 Cel ; 47.11 %RH
SHT3XD: 26.27 Cel ; 47.72 %RH

この例がなぜ機能するのかを少し掘り下げてみましょう:

&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>;
};
};

アプリオーバーレイファイルは、さまざまなボードコンポーネントを設定するために使用されます。このファイルを使用することで、SHT31の例を利用できるようになり、オーバーレイがサンプルロジックにセンサーをボード用に設定する方法を通知します。

1.69インチLCDディスプレイモジュール、240×280解像度、SPIインターフェース

この例では、SPIを使用して240x280解像度の1.69インチLCDに接続します。

まず、以下の画像をガイドとして使用して、ボードをLCDスクリーンに接続します(この場合、Xiao SAMD21を使用していますが、ここでの接続に使用されるピンレイアウトは同じです)。

1.69インチLCD SPIディスプレイXIAO SAMD21
VCC3V3
GNDGND
DIND10
CLKD8
CSD1
DCD3
RSTD0
BLD6

次に、ハードウェアを準備した状態でビルドとフラッシュを行います:

cd ~/zephyrproject/zephyr
west build -p always -b seeeduino_xiao 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

RESETボタンを2回押すか、RSTピンをGNDにショートします:

west flash

新しいファームウェアがインストールされると、デバイスは拡張ボードで以前に見たデモ画面を表示しますが、今回はSPI経由でカラーLCDに更新されています。

✨ コントリビュータープロジェクト

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。

Loading Comments...