nRF Connect SDK FundamentalsでZephyrを試してみる: micro:bit編

この文章は、[ZephyrRTOS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/zephyr) [^1] の20日目のエントリとして書かれました。

[^1]: https://qiita.com/advent-calendar/2024/zephyr

# はじめに
[nRF Connect SDK Fundamentals](https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/) [^2] (以下、コース)は、nRFファミリーで、Zephyrを使って開発していくハンズオン教材です。
開発環境には、VSCodeが使われています。
手順が親切丁寧に説明されており、必要な概念もしっかり解説されているので、nRFでZephyrの入門をするのには、適した教材だと思います。

 [^2]: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/

以下、コースの説明に従って、micro:bitでLチカ(ディスプレイチカ?)ができるところまでを試してみます。

一部、コース通りではなく、micro:bit利用のための独自事項がありますので、そこを詳しく説明していきます。


# 環境構築
以下のように、動作に必要な環境を構築していきます。

## VSCode開発環境
ここでの開発は、VSCode上で行います。
そのための準備を行います。

コースの中で、動画付きで詳しく環境構築の方法について解説されているので、ここでは詳細は省略します。

概略は、以下の通りです。

- nRF Command Line Toolsのインストール
- VSCode関連
  - VSCodeのインストール
  - nRF Connect拡張機能のインストール
    - ツールチェーンのインストール
    - nRF Connect SDKのインストール


## micro:bitをJ-Link用にする
デフォルトでは、VSCodeからはJ-Linkを経由した書き込みが仮定されています。
このため、J-Link用のデバイス([J-Link Edu](https://embeddedcomputing.weebly.com/segger-j-link-edu-programmer-debugger.html) [^3] など)が必要になるのですが、micro:bitには以下のようなJ-Link化するファームウエアが用意されています。

- [BBC micro:bit J-Link Upgrade Upgrading the BBC micro:bit DAPLink to J-Link](https://www.segger.com/products/debug-probes/j-link/models/other-j-links/bbc-microbit-j-link-upgrade/) [^4]

[^3]: https://embeddedcomputing.weebly.com/segger-j-link-edu-programmer-debugger.html
[^4]: https://www.segger.com/products/debug-probes/j-link/models/other-j-links/bbc-microbit-j-link-upgrade/

導入は、このページの説明の通りに行えば大丈夫です。

::: note warn
**ただし、ここで提供されているファームウエアは、現在普通に流通しているmicro:bit v.2.2では使えないようです。v.1.5かv.2.0を用意してください。**
:::

概略は以下の通りです。

- micro:bitをメンテナンスモードで起動します。
  - リセットボタンを押しながら、電源を投入します。
- ファームウエアのHexファイル(`JLink_OB_BBC_microbit_22-11-16.hex`(v.1.5用), `JLink_OB_BBC_microbitV2_22-11-15.hex`(**v.2.0用**)を現れたMAINTANANCEフォルダーにコピーします。


# デモコードの実行
サンプルにmicro:bit用のデモコードが3つ用意されています。

- display:	5x5 LED画面に数字、文字、パターンなどを表示します。
- sound:	音を出し、その周波数をボタンで変更します。
- pong:	pongゲームで、マルチプレーヤーにも対応しています。

はじめに、"Create a new application"を選び、"Copy a sample"を選択します。

![Copy a sample](https://i.gyazo.com/9e101af9ec314a3dbb2af930fd271fd5.png)

次に検索ペインに"micro"などと入力すると、micro:bitで利用可能な選択肢が出てきます。
		ここでは、"BB micro:bit Display"を選択しました。

![デモの選択](https://i.gyazo.com/d087e274bb690bc44b7c0c42f5f16f47.png)

これで、デモのソースコードにアクセスできるようになりました。

次に、ビルドを行います。

- "APPLICATIONS"で"+ Add build configuration"を選択します。
	右のような表示が現れるので、"Board target"で"bbc_microbit/nrf51822"(v.1.5用)か"bbc_microbit_v2/nrf52833"(**v.2.0用**)の利用する方を選びます。あとはデフォルトで大丈夫です。
- 一番下の"Build Configuration"ボタンで設定が保存されます。

![ボード設定](https://i.gyazo.com/07db3d99e309ad7d17f4e916657e3c46.png)

"ACTIONS"で、"Build"することでソースがBuildされます。
Buildが成功した後で、"Flash"すると実際にボードにプログラムが書き込まれ、プログラムが実行されます。

![フラッシュ](https://gyazo.com/c0ad00d8bcb6c66b468475a98752d9e4.png)

デモは、下の画像のようにmicro:bitの5x5LEDに数字やパターン、文字などを表示するものになっています。

![デモの動作の様子](https://i.gyazo.com/ba22ecd48570dd2ad85465c085ad0962.png)


# おわりに
[nRF Connect SDK Fundamentals](https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/)に従って、micro:bitでハンズオンをしてみました。
今回の内容は、[Lesson 1 – nRF Connect SDK Introduction](https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-1-nrf-connect-sdk-introduction/) [^5]までの内容になっています。
これを終わらせても、まだコースの9%しか終わってません。これからどんな内容なんでしょうか?楽しみですね!!

**Enjoy your Zephyr life with micro:bit!!**

[^5]: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-1-nrf-connect-sdk-introduction/

# About 610t
![610t](https://i.gyazo.com/e1ac56941c1cb761e56e9601f5bdb6af.png)
むとうたけし(武藤武士(wǔ téng wǔ shì)) a.k.a [610t](https://x.com/610t)

- 奈良在住
- 専業主夫
- 54歳(1970/06/19生まれ)
- 詳細:	https://scrapbox.io/610t/610t

私、専業主夫だから、
端切れでパッチワークする様に、
http://github.com/610t でpatch workするの。

BSDとScratch/SqueakとM5Stackの狭間で生きているニッチな生き物。自転車とものづくりと人にものを教えていやがられるのが好き。