Convergence Lab.株式会社 CEOの木村 優志です。

今回は Zephyr RTOSを使って BLE通信をして、サーモグラフィーの画像をPCに送る方法について説明します。今、最も熱いRTOSである Zephryの魅力の一端を説明できれば幸いです。

このエントリーをはてなブックマークに追加
 

はじめに

Zephyr RTOSを用いて、BLE通信でサーモグラフィーの画像をPCに送る方法について説明します。

実際のところ、今回の例では、Zephyrの魅力を十分に引き出せているとは言えないのですが、入門用の参考とはなると思います。 Zephyr RTOSに関する記事は国内ではあまりないようですし。

技適未取得機器を利用するため、警告文を掲載しておきます。なお、弊社は 「技適未取得機器の実験等の特例制度」に基づく届出を済ませています。

この無線設備は、電波法に定める技術基準への適合が確認されておらず、
法に定める特別な条件の下でのみ使用が認められています。この条件に
違反して無線設備を使用することは、法に定める罰則その他の措置の対
象となります。

また、今回のコードは以下から取得できます。

https://github.com/Convergence-Lab-Inc/zephyr_amg_ble

Zephyr RTOS

Zephyr RTOSは、その名の通り、RTOSの一種です。RTOSは、Real Time Operating Systemの略です、リアルタイムOSですね。RTOSは、非常にざっくりと正確でない表現をするなら、マイコン用のOSであると思えば良いと思います。読売新聞によると、RTOSのデファクト・スタンダードはTRON(μITRON)らしいです。しかし、私はそもそも組み込み開発には明るくなく、300ページ以上あるμITRONの仕様書を読む気が失せてしまったのもあり、μITRONは利用しないことにしました。

一方、Zephyrは、Wikipediaによると2020年8月現在で最もコントリビューターとコミット数が多いRTOSプロジェクトであるとのことです。そんな、現在最も熱い RTOSである Zephyrに入門してみようと思います。

なぜRTOSをつかうのか

マイコンのプログラムにはRTOSは必須では有りません。RTOSを使わずにマイコンのプログラムを書くことを、ベアメタルプログラムとよびます。もちろん、ベアメタルで書いてもよいのですが、マイコンの種類を変えるとプログラムが動かなくなったり、半導体メーカーから提供されているライブラリの種類が少ないために、多くのコードを書く必要があったりとたいへんではあります。そこで、RTOSをつかって、共通部分をライブラリとして使用したり、ドライバを共有してプログラムの可搬性を高めたりするわけです。

TechFactoryの記事では、RTOSの特徴として以下が挙げられています(一部改変)。

  1.  マルチスレッドのサポート
  2. 最悪応答時間の保証
  3. タスク間通信のサポート
  4. 機能の取捨選択が可能

RTOSを使わない場合、マルチスレッドやタスク間通信すら自力で書かなければならないことが多いということですね。

Zephyr RTOSの特徴 

 Zephyrは、Linux Founddationが開発する RTOSです。そのため、ZephyrのカーネルはLinux Kearnelとの類似性をいくつか持ちます。Linuxにも RTLinuxというリアルタイムOSが存在するのですが、RTLinuxはほぼPCと同じレベルの性能や消費電力をデバイスに要求します。Zephyrはマイコン向けOSらしく、軽量な設計となっています。とはいえ、Zephyrを利用する場合は Cortex-Mなどの32bit Armマイコンを利用するのが普通ではないかな、と思います。

Zephryの特徴には以下があります。

  1. スレッド間通信や割り込みなどのサポート
  2. 複数のタスクスケジューリング方法のサポート
  3. メモリ保護
  4. DeviceTreeのサポート
  5. Bluetooth Low Energy (BLE) 5.0のサポート
  6. Windows, Mac, Linux環境での開発が可能
  7.  モダンな開発ツール

DeviceTreeというのは、Linux Kernelでも採用されている、デバイス管理用法です。Linxuカーネルに慣れている人がいれば(いるのか?)、同じ方法でデバイスの管理ができます。このあたりがZephyrがLinux Foundationのプロジェクトらしいところです。私が最も特徴的だと思うのが、開発環境ツール west の存在です。ZephyrのプロジェクトはCMakeで管理されます。そのビルドや書き込みには westというツールを使います。これが非常に優秀で、様々な組み込み開発に必要なツールを見事に隠蔽しています。例えば、チップへのプログラムの書き込みは、

west flash

とコマンドを打てば良いようになっています。通常はチップメーカーによって様々なコマンドがあるのですが、それを覚える必要がなく便利です。まあ、私が組み込みを知らないだけで他にも便利なものがあるのかもしれませんが。

Zephyr開発環境の準備

Zephyrの開発環境の準備方法は公式の手順を参考にするのが最も良いと思います。ここに転載してしまうと、変更になった時にこまるのでやめておきます。注意点としては、ボードとPCのインターフェイスである、ST-LinkJ-Linkの最新のドライバを入れるのを忘れないようにしてください。この記事のサンプルに必要なのは、J-Linkの方です。わたしは、J-Linkのドライバが最新でないために起こったエラーのせいでしばらく時間が溶けました。

今回使用するボード・部品

今回使用するボード部品は以下のとおりです。

Nordic nRF52-DKは、Arm Cortex-MマイコンにBluetooth Low Energy, Bluetooth mesh, NFCが搭載されたNordic製のSoCが載った開発用ボードです。こちらのボードなのですが、技適未取得です。今回は、「技適未取得機器の実験等の特例制度」を利用して実験を行います。手続きを行わずに電波を出すと電波法違反となるため、くれぐれも注意してください。特例制度自体は個人での取得も可能です。技適未取得なのもあって、国内では販売されていません。私は DigiKeyから購入しました。 開発ボードですので、ジャンパワイヤーがさせたりと便利です。J-Linkに対応しているため、PCからボードへのプログラムの書き込みはUSBケーブルを利用して行えます。電波を出さない実験をする場合は、こちらの開発ボードではなく、Nucleoなどを利用するほうが、入手もしやすく簡単だと思います。

Conta™ サーモグラフィー は Panasonic製の8x8 赤外線センサアレイ AMG8833 を搭載したセンサーモジュールです。I2Cを利用した赤外線センサアレイデータの読み込みができます。