1. 対象
RTOS である Zephyr に興味はあるけど「どこから始めたらいいの?」や「Lチカはやったけどその後何すればいいの?」って方を対象にしています。
2. 背景と目的
下記のような「困り事」を解消できればと思い、実装・運用事例集としてリポジトリを公開しました。
Zephyr RTOS 〜 Lチカのその先へ 〜(今の記事)2
- サンプルのLチカするまではすんなり行けた で、そのあとは…?
- そもそもさくっと動かせる環境がほしい
- コードエディタのコード補完や定義元ジャンプ、ステップ実行なども利用したい!
Zephyr RTOS 〜 GPIO を叩く! 〜 3
- GPIO へのアクセス手段が色々方法あるけど、結局どうすりゃいいの?
- 移植性なども考慮したいけど、どんなディレクトリ構成にすれば?
Zephyr RTOS 〜 チーム開発を見据えた管理方法 〜 4
- せっかくの移植性の高さを活かしたいけど、すべて管理すると膨大すぎて困る
- 開発中は Zephyr 本体のバージョンを、チーム内で固定・統一化して運用したい
予定
- マルチスレッドや排他処理などの管理方法はどうしよう
- DeviceTree や CMake / Kconfig の構成など考えることがたくさん!
- 実際に Zephyr を利用していく中で得られるバッドノウハウ集
絶対的な答えではなく、これを足掛かりにしてカスタムしてもらえると幸いです。
(さらにフィードバックもあると幸甚です)
3. 公開リポジトリ
リポジトリ:ZephyrOpsPlaybook 5
上記 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 6 がお勧めです。
- 単体でLED、ブザーやボタンなどの入出力や、複数のセンサー、BLEによる無線通信などが利用でき、JTAG などの追加ハードウェア不要で break を張ってステップ実行までできるのでかなりお得!
- micro:bit v2 の BLE は他の機能と干渉しやすく、BLE を有効にすると
磁気センサー(← 初期化の順番で解消)、BLE 有効中のデバッグは機能せず、最適化レベルを下げてもうまく動作していません。そのため現時点ではデフォルトで drv_init_bleperiph() を呼ばないようにしており、BLE 利用の際はこのコメントアウトを外してください。 - 一部スクリプトを用意していますが、不慣れなコマンドプロンプトに引っ張られて .sh 側の機能も控えめにしています(改善点あればぜひ)。
4. 機能の説明
micro:bit v2 であれば以下の機能が動作しています(2024/12現在)
- UART 入出力
- baudrate 115200
- Linux だと /dev/ttyACM0 を指定
- ビープ
- 後述のボタン操作によるビープ音
- 後述のコマンド操作によるビープ音
- LED(テキスト表示)
- drv_disp_print() を呼ぶことで任意のテキストをLEDに表示
- 後述のコマンドによる随時実行
- 加速度センサー
- 後述のコマンド操作による随時取得
- 磁気センサー
- 後述のコマンド操作による随時取得
- ボタン
- Aボタンで音階を下げてビープ音を鳴らす
- Bボタンで音階を上げてビープ音を鳴らす
- BLE
- ペアリングのみ
- 有効にする場合は drv_init_bleperiph() のコメントアウトを外してください
- 各種サービスはサンプルを随時実装予定
- ペアリングのみ
- UART 経由でコマンド操作(shell)によるドライバテスト
- LED に文字列表示
- exec print playbook 500 で LED に "playbook" を 500msec 間表示
- ビープ
- exec beep play でビープ音再生
- exec beep raise でビープ音の音階を上げる
- exec beep lower でビープ音の音階を下げる
- 加速度センサー
- 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デバイスの有効化
- 投稿しました!7
- 内蔵FLASHへの読み書き
- Test や静的解析ツールのサンプル導入(実はまだ手探り)
-
Zephyr RTOS の公式手順 (公式ドキュメント)
https://docs.zephyrproject.org/latest/develop/getting_started/index.html ↩ -
この記事 (Qiita記事)
https://qiita.com/Corgeek/items/ca4c515ccf556551562f ↩ -
Zephyr RTOS 〜 GPIO を叩く! 〜 (Qiita記事)
https://qiita.com/Corgeek/items/122a00e430ad0d9c297a ↩ -
Zephyr RTOS 〜 チーム開発を見据えた管理方法 〜 (Qiita記事)
https://qiita.com/Corgeek/items/b879637a6c25027af318 ↩ -
ZephyrOpsPlaybook リポジトリ(github)
https://github.com/Corgeek/ZephyrOpsPlaybook ↩ -
BBC Micro:bit v2 個別情報
https://docs.zephyrproject.org/4.0.0/boards/bbc/microbit_v2/doc/index.html ↩ -
Zephyr RTOS 〜 I2C 通信の方法と VL53L4CD の移植 〜 (Qiita記事)
https://qiita.com/Corgeek/items/ac211cd48a54971d9b17 ↩