3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZephyrRTOSAdvent Calendar 2024

Day 8

Zephyr RTOS 〜 Lチカのその先へ 〜

Last updated at Posted at 2024-12-17

1. 対象

RTOS である Zephyr に興味はあるけど「どこから始めたらいいの?」や「Lチカはやったけどその後何すればいいの?」って方を対象にしています。

参考:Zephyr RTOS の公式手順 1

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回)
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 や静的解析ツールのサンプル導入(実はまだ手探り)
  1. Zephyr RTOS の公式手順 (公式ドキュメント)
    https://docs.zephyrproject.org/latest/develop/getting_started/index.html

  2. この記事 (Qiita記事)
    https://qiita.com/Corgeek/items/ca4c515ccf556551562f

  3. Zephyr RTOS 〜 GPIO を叩く! 〜 (Qiita記事)
    https://qiita.com/Corgeek/items/122a00e430ad0d9c297a

  4. Zephyr RTOS 〜 チーム開発を見据えた管理方法 〜 (Qiita記事)
    https://qiita.com/Corgeek/items/b879637a6c25027af318

  5. ZephyrOpsPlaybook リポジトリ(github)
    https://github.com/Corgeek/ZephyrOpsPlaybook

  6. BBC Micro:bit v2 個別情報
    https://docs.zephyrproject.org/4.0.0/boards/bbc/microbit_v2/doc/index.html

  7. Zephyr RTOS 〜 I2C 通信の方法と VL53L4CD の移植 〜 (Qiita記事)
    https://qiita.com/Corgeek/items/ac211cd48a54971d9b17

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?