1. 対象
RTOS である Zephyr に興味はあるけど「どこから始めたらいいの?」や「Lチカはやったけどその後何すればいいの?」って方を対象にしています。
2. 背景と目的
下記のような「困り事」を解消できればと思い、実装・運用事例集としてリポジトリを公開しました
- サンプルのLチカするまではすんなり行けた で、そのあとは…?
- そもそもさくっと動かせる環境がほしい
- GPIO へのアクセス手段が色々方法あるけど、結局どうすりゃいいの?
→ Zephyr RTOS 〜 GPIO を叩く! 〜 - マルチスレッドや排他処理などの管理方法はどうしよう(予定)
- DeviceTree や CMake / Kconfig(予定) の構成など考えることがたくさん!
- せっかくの移植性の高さを活かしたいけど、すべて管理すると膨大すぎて困る
- 開発中は Zephyr 本体のバージョンを、チーム内で固定・統一化して運用したい
- 移植性なども考慮したいけど、どんなディレクトリ構成にすれば?
- コードエディタのコード補完や定義元ジャンプ、ステップ実行なども利用したい!
絶対的な答えではなく、これを足掛かりにしてカスタムしてもらえると幸いです
(さらにフィードバックもあると幸甚です)
3. 公開リポジトリ
上記 README.md に従って進めていけば、vscode(要別途インストール) 上で開発できるようになっています。
いろんな入出力機器が標準で付いている micro:bit v2 であれば、ドライバ制御のサンプルも動かすことが可能です
↓は vscode を使って micro:bit v2 向けに build 〜 flash 〜 debug までを行った様子
- Nordic 系と micro:bit、STM32 系のボードを対象に絞り込んでいます(解説は別記予定)
- Zephyr のバージョンは、v4.0.0 で固定しています(解説は別記予定)
- Windows / Linux どちらでも動作確認できている bbc_microbit_v2 がお勧めです
- 単体でLED、ブザーやボタンなどの入出力や、複数のセンサー、BLEによる無線通信などが利用でき、JTAG などの追加ハードウェア不要で break を張ってステップ実行までできるのでかなりお得!
- micro:bit v2 の BLE は他の機能と干渉しやすく、BLE を有効にすると磁気センサーとデバッグ実行がうまく動作していません。現時点ではデフォルトで drv_init_bleperiph() を呼ばないようにしており、BLE 利用の際はこのコメントアウトを外してください。
- その他、STM 系も対象にしていますが、公式がすべてのボードを更新しきれておらず、west flash はできても一部 west debug がそのままでは動作しないものがあります
- 例えば nucleo_f401re は Linux では一通り動作しますが、Windows では west debug が機能しません
- もちろん私個人レベルではすべてのボードで動作確認ができませんので、あしからず
- 一部スクリプトを用意していますが、不慣れなコマンドプロンプトに引っ張られて .sh 側の機能も控えめにしています(改善点あればぜひ)
4. 機能の説明
micro:bit v2 であれば以下の機能が動作しています(2024/12現在)
micro:bit v2 用の機能
- UART 入出力
- baudrate 115200
- Linux だと /dev/ttyACM0 を指定
- ビープ
- 後述のボタン操作によるビープ音
- 後述のコマンド操作によるビープ音
- LED(テキスト表示)
- drv_disp_print() を呼ぶことで任意のテキストをLEDに表示
- 後述のコマンドによる随時実行
- 加速度センサ
- 後述のコマンド操作による随時取得
- 磁気センサ
- 後述のコマンド操作による随時取得
- ※ BLE ドライバと同時利用はできず、drv_init_bleperiph() を呼ばないようにコメントアウトが必要
- ボタン
- Aボタンで音階を下げてビープ音を鳴らす
- Bボタンで音階を上げてビープ音を鳴らす
- BLE
- ペアリングのみ
- 有効にする場合は drv_init_bleperiph() のコメントアウトを外してください
- 各種サービスはサンプルを随時実装予定
- ペアリングのみ
- UART 経由でコマンド操作(shell)によるドライバテスト
- LED に文字列表示
- exec print playbook 500 で LED に "playbook" を 500msec 間表示
- ビープ
- exec beep play でビープ音再生
- exec beep raise でビープ音の音階を上げる
- exec beep raise でビープ音の音階を下げる
- 加速度センサー
- exec accel 5 で加速度センサーで得た数値を5回表記(数字省略で3回)
- 磁気センサー
- exec magnet 5 で磁気センサーで得た数値を5回表記(数字省略で3回)
- LED に文字列表示
micro:bit 用の機能 (v2との差分)
- ビープ
- 標準装備されていませんが、KittenBot IOBIT に繋ぐと v2 と同様鳴動することを確認できています
- 加速度センサ
- 公式のドライバを呼ぶようにしていますがうまく動作しておらず…
- ボタン
- Aボタンで音階を下げてビープ音を鳴らす(要KittenBot IOBIT)
- Bボタンで音階を上げてビープ音を鳴らす(要KittenBot IOBIT)
- BLE
- Zephyr だと BLE を有効にすると RAM が足りずに動作不可
helloworld 表示(左)と、実機を振りながら加速度センサーと、磁気センサーの値を表示した様子(右)
5. 今後入れておきたい機能
- マルチスレッドやIPCのサンプル実装
- Kconfig の活用
- micro:bit の各種センサー類の有効化
- 公式にはないI2Cデバイスの有効化
- 内蔵FLASHへの読み書き
- Test や静的解析ツールのサンプル導入(実はまだ手探り)