1
1

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 21

macOSでZephyrのmicro:bitデモを動かす

Last updated at Posted at 2024-12-21

この文章は、ZephyrRTOS Advent Calendar 2024の21日目のエントリとして書かれました。

はじめに

今回の同人誌では、Zephyr RTOS 〜 Lチカのその先へ 〜などでWindowsやUbuntuでの開発環境の構築に関して、詳しく説明されています。
ここでは、macOSとmicro:bitで試してみたので、報告してみたいと思います。

環境構築に関しては、公式ドキュメントの紹介だけですが、micro:bitでデモを動かす部分を参考にして下さい。

Zephyr開発環境の準備

Getting Started Guideで、macOSタブを選択して表示される手順で問題なく開発環境が構築できます。
というわけで、ここでは詳細は説明しません。

micro:bitをJ-Link用にする

SDKでは、J-Linkを経由した書き込みが必要です。
このため、J-Link用のデバイス(J-Link Eduなど)が必要になるのですが、micro:bitには以下のようなJ-Link化するファームウエアが用意されています。

概略は以下の通りです。

  • 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系)が利用可能です。

$ west boards|grep -i micro
micromod
sparkfun_pro_micro_rp2040
bbc_microbit
bbc_microbit_v2

以下のコマンドでは、micro:bit v.1.5系のコマンドラインで説明しますが、v.2系の場合は-bオプションのbbc_microbitbbc_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.cprj.conf)をdiffの差分通りに更新することで、buildと実行ができるようになります。

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 <stdio.h>                                                             
 #include <zephyr/kernel.h>                                                     
 #include <zephyr/drivers/gpio.h>                                               
+#include <zephyr/device.h>
+
+#include <zephyr/display/mb_display.h>
 
 /* 1000 msec = 1 sec */
 #define SLEEP_TIME_MS   1000
    
-/* 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) {
+               pixel.row[0] = BIT(0);
+       }
+        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");
samples/basic/blinky/prj.conf.diff
--- 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でデモを動作させてみました。

VSCodeを使った解説の記事nRF Connect SDK FundamentalsでZephyrを試してみる: micro:bit編と合わせて読んでいただけると幸いです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?