0
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 の公式手順

2. 背景と目的

下記のような「困り事」を解消できればと思い、実装・運用事例集としてリポジトリを公開しました

  • サンプルのLチカするまではすんなり行けた で、そのあとは…?
  • そもそもさくっと動かせる環境がほしい
  • GPIO へのアクセス手段が色々方法あるけど、結局どうすりゃいいの?
    Zephyr RTOS 〜 GPIO を叩く! 〜
  • マルチスレッドや排他処理などの管理方法はどうしよう(予定)
  • DeviceTree や CMake / Kconfig(予定) の構成など考えることがたくさん!
  • せっかくの移植性の高さを活かしたいけど、すべて管理すると膨大すぎて困る
  • 開発中は Zephyr 本体のバージョンを、チーム内で固定・統一化して運用したい
  • 移植性なども考慮したいけど、どんなディレクトリ構成にすれば?
  • コードエディタのコード補完や定義元ジャンプ、ステップ実行なども利用したい!

絶対的な答えではなく、これを足掛かりにしてカスタムしてもらえると幸いです
(さらにフィードバックもあると幸甚です)

3. 公開リポジトリ

ZephyrOpsPlaybook

上記 README.md に従って進めていけば、vscode(要別途インストール) 上で開発できるようになっています。
いろんな入出力機器が標準で付いている micro:bit v2 であれば、ドライバ制御のサンプルも動かすことが可能です

↓は vscode を使って micro:bit v2 向けに build 〜 flash 〜 debug までを行った様子

using_vscode.gif

  • 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回)
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 や静的解析ツールのサンプル導入(実はまだ手探り)
0
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
0
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?