macOSでZephyrのmicro:bitデモを動かす
はじめに
ここでは、macOSとmicro:bitで試してみたので、報告してみたいと思います。
環境構築に関しては、公式ドキュメントの紹介だけですが、micro:bitでデモを動かす部分を参考にして下さい。
Zephyr開発環境の準備
というわけで、ここでは詳細は説明しません。
micro:bitをJ-Link用にする
SDKでは、J-Linkを経由した書き込みが必要です。
このため、J-Link用のデバイス(J-Link Eduなど)が必要になるのですが、micro:bitには以下のようなJ-Link化するファームウエアが用意されています。 導入は、このページの説明の通りに行えば大丈夫です。
ただし、ここで提供されているファームウエアは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用デモのBuildと実行
micro:bit専用のデモがZephyr SDKの中に3つ含まれています。
display: 5x5 LED画面に数字、文字、パターンなどを表示します
sound: 音を出し、その周波数をボタンで変更します
pong: pongゲームで、マルチプレーヤーにも対応しています。
ボードの定義を確認するには、以下のようにwest boardsコマンドを使います。
micro:bitに関しては、bbc_microbit(v.1.5)とbbc_microbit_v2(v.2系)が利用可能です。
code:shell
$ west boards|grep -i micro
micromod
sparkfun_pro_micro_rp2040
bbc_microbit
bbc_microbit_v2
以下のコマンドでは、micro:bit v.1.5系のコマンドラインで説明しますが、v.2系の場合は-bオプションのbbc_microbitをbbc_microbit_v2に読み替えて下さい。
以下のコマンドで、micro:bitの5x5 LEDに数字や文字、パターンを表示するデモがbuildできます。
$ west build -p always -b bbc_microbit samples/boards/bbc/microbit/display
また、以下のコマンドで、音を出すデモが構築できます。こちらのデモは、スピーカーのないv.1.5では意味がありません。
$ west build -p always -b bbc_microbit samples/boards/bbc/microbit/sound
pongゲームは以下のコマンドで構築できます。
一人用とBluetoothで接続するマルチプレーヤー用を選択して遊べます。
$ west build -p always -b bbc_microbit samples/boards/bbc/microbit/pong
buildが終わった後、ボードに書き込むには、以下のコマンドを実行します。
$ west flash
blinkyデモを動かす
micro:bit専用のデモは、何も変更しなくても問題なく動作します。
一番基本のBlinkyデモは、led0に関する定義などがないため、そのままでは動作しません。
そこで、動作するように変更してみました。
以下の二つのファイル(main.cとprj.conf)をdiffの差分通りに更新することで、buildと実行ができるようになります。
code:samples/basic/blinky/src/main.c.diff
% diff -u samples/basic/blinky/src/main.c.o
rg samples/basic/blinky/src/main.c
--- samples/basic/blinky/src/main.c.org 2024-12-20 12:43:01.000000000 +0900
+++ samples/basic/blinky/src/main.c 2024-12-20 12:53:29.000000000 +0900
@@ -7,38 +7,32 @@
+#include <zephyr/device.h>
+
+#include <zephyr/display/mb_display.h>
/* 1000 msec = 1 sec */
-/* The devicetree node identifier for the "led0" alias. */
-#define LED0_NODE DT_ALIAS(led0)
-
/*
- * A build error on this line means your board is unsupported.
- * See the sample documentation for information on how to fix this.
- */
-static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
+ Blink for microbit
+*/
+void blink(bool led_state){
+ struct mb_display *disp = mb_display_get();
+ struct mb_image pixel = {};
+
+ if(led_state) {
+ }
+ mb_display_image(disp, MB_DISPLAY_MODE_SINGLE, 250,&pixel, 1);
+}
int main(void)
{
- int ret;
bool led_state = true;
- if (!gpio_is_ready_dt(&led)) {
- return 0;
- }
-
- ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
- if (ret < 0) {
- return 0;
- }
-
while (1) {
- ret = gpio_pin_toggle_dt(&led);
- if (ret < 0) {
- return 0;
- }
+ blink(led_state);
led_state = !led_state;
printf("LED state: %s\n", led_state ? "ON" : "OFF");
code:samples/basic/blinky/prj.conf.diff
% diff -u samples/basic/blinky/prj.conf.org samples/basic/blinky/prj.conf
--- samples/basic/blinky/prj.conf.org 2024-12-20 12:55:38.000000000 +0900
+++ samples/basic/blinky/prj.conf 2024-12-20 12:55:55.000000000 +0900
@@ -1 +1,3 @@
CONFIG_GPIO=y
+CONFIG_DISPLAY=y
+CONFIG_MICROBIT_DISPLAY=y
おわりに
macOSで、Zephyr SDKを使ってmicro:bitでデモを動作させてみました。