Seeed Studio XIAO ESP32S3 with NuttX(RTOS)
はじめに
NuttXは、標準準拠と小さなフットプリントで広く認知されている成熟したリアルタイムオペレーティングシステム(RTOS)です。NuttXの主な特徴の一つはスケーラビリティであり、8ビットマイクロコントローラから64ビットシステムまでの環境で使用できます。この柔軟性は、POSIXおよびANSI標準への準拠によって実現されており、異なるアーキテクチャ、ファミリー、半導体ベンダーの幅広いチップで類似のNuttX機能を実験することができます。
さらに、NuttXはUSB、Ethernet、Audio、Graphicsサブシステムなど、多くの高度で有用な機能を提供しています。これらの特性により、NuttXは様々なタイプのハードウェア上で動作可能な汎用性があり、堅牢なRTOSを求める開発者にとって魅力的な選択肢となっています。
NuttXは膨大で継続的に拡張されているボード数をサポートしています。公式ドキュメントでは、アーキテクチャとSystem-on-Chip(SoC)シリーズ別に整理されたサポートボードの包括的なリストを提供しています。
例えば、NuttXドキュメントのSeeed Studio XIAO ESP32S3ページでは、サポートされている各機能の詳細な説明とその利用方法の手順を提供しています。また、NuttXドキュメントにはEspressif ESP32S3シリーズチップ専用のページもあり、サポートされているMCUとペリフェラルのリストを見つけることができます。
インストール
Nuttxドキュメントでは、異なるプラットフォーム向けのガイドを提供しています。Seeed Studio XIAO ESP32S3については、以下の手順に従ってください:
-
Espressif esptoolをダウンロード(https://docs.espressif.com/projects/esptool/en/latest/esp32/):
~/nuttxspace/nuttx$ esptool.py version
esptool.py v4.8.1
4.8.1 -
ワークスペースを作成
mkdir nuttxspace
-
リポジトリをクローン
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps
Apache Nuttxは2つのプロジェクトに分かれています:
- Nuttx: カーネル、ドライバー、サブシステムの実装を含みます。
- Apps: ツール、シェル、ネットワークユーティリティ、ライブラリ、インタープリターのコレクションを含みます。
アプリケーション
アプリケーションを開始するには、以下のコマンドを呼び出してNuttXに設定をロードする必要があります:
./tools/configurate.sh board_name:your_application
また、以下のコマンドを実行してボード対応リストを確認することも可能です:
./tools/configurate.sh -L
-
NuttXをビルドします(ビルドプロセスでnuttx.uf2を含むファームウェアバイナリが生成されます):
cd nuttx
make distclean
./tools/configure.sh xiao-esp32s3:nsh
make V=1 -
RESETボタンとBOOTボタンを使用して「Bootloader」モードに入ることができます。電源投入時にBOOTキーを押し続けてから、RESETキーを一度押します。
-
esptool.pyを使用してファームウェアをロードします:
make flash ESPTOOL_PORT=/dev/ttyACM0 ESPTOOL_BINDIR=./
ハンズオン
実際にNuttXを探索する時間です。このセッションでは、USBNSHとCOMBOの2つのアプリケーションが利用可能です。
NSH
NuttShell(NSH)はNuttXで使用されるシェルシステムで、bashや他の類似オプションと似ています。豊富な内蔵コマンドセット、スクリプト機能、および独自のアプリケーションを「builtin」(同じNuttXバイナリの一部)として実行する機能をサポートしています。NSH設定では115200 bpsを使用してUSBでコンソールを有効にします。
前の設定をクリアしてビルドプロセスを開始できます
cd ~/nuttxspace/nuttx
make distclean
次に、xiao-esp32s3ボードにNSH設定を選択します:
./tools/configurate.sh xiao-esp32s3:usbnsh
Compile the source code.
make -j
ファームウェアをボードにロードし、ボードを再起動して、CDC/ACMシリアルインターフェースを使用してUSB経由でNuttShell(NSH)コンソールに接続します:
picocom -b 115200 /dev/ttyACM0
NuttShellコンソールにアクセス:
NuttShell (NSH) NuttX-12.8.0
nsh> uname -a
NuttX 12.8.0 2c845426da-dirty Apr 6 2025 22:53:57 xtensa esp32s3-xiao
nsh>
?
を入力すると、コマンドと組み込みアプリケーションの利用可能なオプションにアクセスできます。
nsh> ?
help usage: [-v] [<cmd>]
. cp exec ls reboot truncate
[ cmp exit mkdir rm uname
? dirname expr mkrd rmdir umount
alias date false mount set unset
unalias dd fdinfo mv sleep uptime
basename df free pidof source usleep
break dmesg help printf test xd
cat echo hexdump ps time
cd env kill pwd true
Builtin Apps:
getprime hello nsh ostest sh
NuttXに挨拶してみましょう。hello
と入力すると、コマンドが実行されます:
nsh> hello
Hello, World!!
おめでとうございます。NuttXとの最初のやり取りが完了しました。
COMBO
この設定では、gpio と leds の3つのサンプルアプリケーションが有効になります。汎用入出力(GPIO)はマイクロコントローラーの最も基本的な部分であり、外部世界との接続を可能にします。このようにして、NSHを使用してこれらのピンにアクセスし、必要に応じて設定します。しかし、まず前の設定をクリアしましょう。
cd ~/nuttxspace/nuttx
make distclean
Select the combo configuration to the xiao-esp32s3 board.
./tools/configurate.sh xiao-esp32s3:combo
ソースコードをコンパイルします。
make -j
Load the firmware into you board, run a serial communication program such as minicon or picocom:
picocom -b 115200 /dev/ttyACM0
NuttShell (NSH) NuttX-12.8.0
nsh>
このアプリケーションとの対話で受け入れられるオプションを確認するには、gpio -h
と入力してください。パラメータのリストが返されます。
NuttShell (NSH) NuttX-12.8.0
nsh> gpio -h
USAGE: gpio [-t <pintype>] [-w <signo>] [-o <value>] <driver-path>
gpio -h
Where:
<driver-path>: The full path to the GPIO pin driver.
-t <pintype>: Change the pin to this pintype (0-10):
-w <signo>: Wait for a signal if this is an interrupt pin.
-o <value>: Write this value (0 or 1) if this is an output pin.
mation and exit.
Pintypes:
0: GPIO_INPUT_PIN
1: GPIO_INPUT_PIN_PULLUP
IO_INPUT_PIN_PULLDOWN
3: GPIO_OUTPUT_PIN
4: GPIO_OUTPUT_PIN_OPENDRAIN
5: GPIO_INTERRUPT_PIN
6: GPIO_INTERRUPT_HIGH_PIN
7: GPIO_INTERRUPT_LOW_PIN
8: GPIO_INTERRUPT_RISING_PIN
9: GPIO_INTERRUPT_FALLING_PIN
10: GPIO_INTERRUPT_BOTH_PIN
GPIOデバイスファイルが作成されたことを確認するには、ls/dev
と入力してください。入力後、boards/arm/ra/xiao-esp32s3/include/board.hで定義されたいくつかのgpioが宣言されているのを確認できます。これらは以下を表しています:
-
オンボードLED:
- 黄色 -> GPIO21
-
GPIO
- 1 Input -> GPIO1
- 1 Input w/ IRQ -> GPIO3
- 1 Output -> GPIO2
nsh> ls /dev
/dev:
console
gpio0
gpio1
gpio2
null
ttyACM0
ttyS0
userleds
zero
nsh>
以下のコマンドに従って、GPIO1(/dev/gpio1)とGPIO3(/dev/gpio2)を読み取り(割り込み付き)、GPIO2(/dev/gpio0)に書き込みを行います。
NuttShell (NSH) NuttX-12.8.0
nsh> gpio -o 1 /dev/gpio0
Driver: /dev/gpio0
Output pin: Value=0
Writing: Value=1
Verify: Value=1
nsh> gpio -o 0 /dev/gpio0
Driver: /dev/gpio0
Output pin: Value=1
Writing: Value=0
Verify: Value=0
nsh> gpio /dev/gpio1
Driver: /dev/gpio1
Input pin: Value=0
nsh> gpio /dev/gpio1
Driver: /dev/gpio1
Input pin: Value=1
nsh> gpio /dev/gpio1
Driver: /dev/gpio1
Input pin: Value=0
nsh> gpio -w 1 /dev/gpio2
Driver: /dev/gpio2
Interrupt pin: Value=0
Verify: Value=1
nsh> gpio -w 1 /dev/gpio2
Driver: /dev/gpio2
Interrupt pin: Value=0
Verify: Value=1
USERLEDS は、単一の操作で LED を制御できるサブシステムです。また、printf のようなコマンドラインを使用することもできます。このデモでは、オンボードの黄色 LED を 1 秒ごとにオン・オフします。
leds
と入力すると、LED が同時に点滅するのを観察できます。
NuttShell (NSH) NuttX-12.8.0
nsh> leds
leds_main: Starting the led_daemon
leds_main: led_daemon started
led_daemon (pid# 7): Running
led_daemon: Opening /dev/userleds
led_daemon: Supported LEDs 0x01
led_daemon: LED set 0x01
nsh> led_daemon: LED set 0x00
led_daemon: LED set 0x01
led_daemon: LED set 0x00
led_daemon: LED set 0x01
led_daemon: LED set 0x00
led_daemon: LED set 0x01
led_daemon: LED set 0x00
以下のgpioとledのデモ動画をご確認ください:
NuttX RTOSの詳細については、NuttX Documentationをご覧ください。
✨ コントリビュータープロジェクト
- このプロジェクトはSeeed StudioのContributor Projectによってサポートされています。
- Rodrigoの献身的な努力に特別な感謝を捧げます。あなたの作品は展示されます。
技術サポート & 製品ディスカッション
私たちの製品をお選びいただき、ありがとうございます!私たちは、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。