Zephyr を使ってみた

はじめに

組み込み向けの Zephyr を使った環境構築方法についてまとめてみました。環境構築後、Nordic社の開発キットに iBeacon のサンプルコードをビルドして実行してみます。今回は、Ubuntu 18.04(のPC) と Nordic nRF52 DK(開発キット) を使った方法を紹介します。
PC 環境は Ubuntu 以外に、macOS と Windows 環境でのビルドもサポートしています。また Zephyr のターゲットデバイスも、Nordic nRF52 DK だけでなく多数ありますので、以下のページを参照してみて下さい。
https://docs.zephyrproject.org/latest/boards/index.html
【Zephyr について】
Zephyr は組み込み向けのリアルタイムオペレーションシステムです。複数のアーキテクチャをサポートし、Apache License 2.0 ライセンスで提供されています。

対応プラットフォーム

  • ARM (Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M23、Cortex-M33、Cortex-R4、Cortex-R5)
  • x86
  • ARC
  • RISCV
  • NIOS II
  • XTENSA

動作環境としては Ubuntu, macOS, Windows をサポートしています。今回の記事では、Ubuntu での環境構築をする方法を紹介していきます。
セットアップ方法の詳細については以下のページをご参照ください。
https://docs.zephyrproject.org/latest/getting_started/index.html

環境構築方法

ここから順を追って環境構築の方法を紹介します。
1. パッケージの導入
環境構築を容易にしたいのでスクリプトを利用します。

このスクリプトで実行される内容は以下です。

  • 必要なパッケージを apt-get で導入
  • レポジトリを設定して必要な CMake を導入
  • West のインストール
  • Zephyr のダウンロードとセットアップ
  • udev rules.dの追加

2. コマンドラインツールの導入
以下のスクリプトを実行するとコマンドラインツール環境が整います。
(nRF Command Line Tools のダウンロードとインストールを行います)

3. 実行環境の設定
以下のスクリプトで実行環境に設定を追加します。
(環境変数PATH に /.local/bin を追加します)

その後、一度再起動してください。
4. ビルド環境の設定
最後に以下のスクリプトでビルド環境を準備します。

このスクリプトで実行される内容は以下です。

  • West で Zephyr Project を作成
  • Python で必要なパッケージの導入
サンプルコードを実行してみる

まず Beacon のサンプルコードをビルドします。


#cd zephyrproject/zephyr
#west build -p auto -b nrf52dk_nrf52832 samples/bluetooth/ibeacon


赤枠で囲んだ箇所に開発ボード名を指定します。今回は「nrf52dk_nrf52832(PCA10040)」を使用しています。
ちなみに別の開発環境で実行したい場合は、この箇所の開発ボード名を変更するだけでビルドすることが可能です。

次に開発ボードに書き込んでいきます。J-Link Lite 接続してビルドしたオブジェクトを書き込みます。書き込みが終わると、リセットされ iBeacon として動作します。


#west flash


最後に開発ボードの状態を確認してみましょう。
正常に書き込まれていれば、以下の赤枠のところに表示されているように iBeacon のパケットが送信されていることがわかります。

最後に

今回は環境の構築方法を中心に解説し、Beacon のサンプルコードを使って iBeacon の動作確認までを行いました。今後は、他のサンプルコードや、ボタンや LED、センサーなどを使ったデバイスを動かす方法なども紹介したいと思っていますので、ご期待下さい(別の RTOS、NuttX などについても調べてみたいと思っています)。

関連記事

  1. Beaconアプリ開発記【その1 開発準備編】

  2. Web Bluetooth を使ってみよう!その1

  3. BLEAD-TSHで遊ぼう!【スピンアウト企画:サイコロトークのお題の…

  4. アプリをデザインする時に気をつけていること

  5. 【C#】Modbus TCP クライアントサンプルを作成してみた

  6. Elastic Stack を使った予兆検知結果の可視化 〜異常検知の…