ブロックを積みながら(7) micro:bitの無線、RadioとBLE、整理してみました

Joseph Halfmoon

Pi PICOに続きmicro:bit v2も品薄ということで買えません。それで最近 MicroPythonで運用してきたmicro:bit v1.5 をMakeCode環境に引き戻し「ブロックで」プログラムすることにいたしました。Bluetooth LEを使いたかったから。しかし、気付いてみれば知らなかった事多数。世の中の進歩は速い。今回は micro:bit の無線に関わるプログラミングについて整理してみました。

※「ブロックを積みながら」投稿順 index はこちら

なぜ MakeCode 環境を使う気になったかと言えば、MicroPythonでは今のところBLEを使えないからです。しかし、久しぶりにMakeCode環境を動かして気付きました。MakeCode上で、BLEの「ブロック」を描けば、裏側で「JavaScript」にも「Python」にも変換できるじゃありませんか。こんな感じ。MakeCode Python

ええ、PythonでもBLEできそうじゃん。しかし、そこに大きな勘違いがありました。

MakeCodeが「Python」と呼んでいるものは MicroPython ではない。

ちょっとブロックを並べてみて「Python」にスイッチしたら分かりますが、この「Python」には「型チェック」があるのです。これはブロックからスイッチできるもう一つの言語「JavaScript」正確に言えば型があるので TypeScriptと同じです。つまり MakeCode上で「JavaScript」とか「Python」と呼んでいるものは、MakeCode上の拡張仕様?であって、micro:bitのJavaScript実行用ランタイム向けにコンパイルされるものようです。この環境では元々 Bluetooth が使える、と。それに対して micro:bit用のMicroPython処理系の方は micro:bit v2向けにBLE機能を拡張しようとしているようですが、今のところまだのようです。micro:bit v2用のMicroPythonのドキュメントから1箇所引用させていただきます。

The nRF52833 used by the micro:bit V2 has 128k of RAM, allowing Micropython to make use of the BLE stack. Currently the only implemented feature is BLE flashing, allowing a user to update the firmware on the micro:bit over Bluetooth.

つまり、私が今まで使用していた Raspberry Pi 3 model B+上の以下の開発環境(Muエディタ)や、MicroPython MuEditor

ここからアクセスできる Python Editor for micro:bit (スクリーンキャプチャを以下に掲げました)では現状 Bluetoothは使えません。Python Editor
v2用のMicroPythonには期待が持てそうですが、手元のv1.5では期待薄です。

MakeCodeで使える無線プロトコルには2種類ある

そこで MakeCode を久しぶりに使ったのです。何の準備もせずに「Radio」というブロックを使って無線通信できます。私は、早速MicroPythonで書いていたコードの「部分移植」に取り掛かりました。2台のmicro:bit間での通信動作OKです。以下に一応「ブロック」を掲げておきます。デバッグ用なのでどちらもUSBに接続した仮想シリアル端末に受信データなど垂れ流します。

micro:bit 緑のコード

MBgreenBLK

micro:bit 赤のコード

MBred Blockしかし変だ、どうもBluetoothじゃない。プログラムを書いて動かしてからようやく気付きました。MakeCodeのデフォルトは Bluetooth ではなく、BLEの物理層の上に構築された異なるプロトコルの「Radio」というものでした。こいつは、MicroPythonで使われていた「無線」と似た「垂れ流し」の通信です。もしかすると同じ「プロトコル」なのかも? MakeCode のRadio と MicroPython のRadioで相互通信できるかどうかは不明です。今後確かめてみます。

デフォルトで使えるRadioでない、ホンマのBluetoothがどこにいるかというと

Advancedの下の Extensions の中

に隠れています。こんな感じ。

BTandRadioBroadcast左側の bluetooth を選択すると、Projectから Radio が削除され(両雄並び立たずというか、複数プロトコル並び立たずらしい)、代わりに bluetooth のパレットが現れます。なお、ちょっと紛らわしいのが、隣の radio-broadcast という拡張です。こちらを選択すると、元々ある Radio に機能ブロックが追加されます。プロジェクト毎に Radio か bluetoothか先端しないとならないようなので、プロジェクト生成したら真っ先にやっておくべき選択かと思います。

ここで悩ましい問題?が一つ。MakeCodeで使用できるAPI(Radioやbluetooth含む)のドキュメントは以下に置いたURLのページに置かれています。基本的な機能は日本語でも読めるのですが、無線関係の各APIになると「日本語モード」のままでは上手く表示されないです(私の環境では。)英語が表示されるとかならいいのですが、見たい部分が隠れて見えません。全体としては良くできたサイトで、同じURLでアクセスしてもMakeCodeを日本語で使っていると日本語、英語だと英語という具合に表示を分けてくれているようです。ドキュメントのサイトに言語切り替えなどのスイッチがないかと調べているのですが、今のところ見つかりません。よって bluetooth の機能ブロック(または、JavaScriptあるいはPythonの関数)を調べたい場合には、必ず英語モードのMakeCode環境行ってから見ています。ううむ、メンドイ。どうしたらよいの?

https://makecode.microbit.org/reference/

ボロボロだけれど雰囲気は分かったので、次回からは bluetooth で再開する予定であります。最後に MakeCodeのドキュメントを読んでいてちとビックリした件をひとつ。RadioのAPIのところに、無線の「原理」から説き起こしmicro:bitに至る説明ビデオ(YouTube、遠大なテーマを数分にまとめた意欲作?)が貼り付けられています。これの作者(YouTuber)

蝶ネクタイのShawn Hymel先生

でした。私は、別件、FreeRTOSの件でHymel先生のビデオを視聴させていただいております(そちらはDigi-Key社のYouTubeチャネルから)実にアチコチで暗躍?活躍しているな。。。

ブロックを積みながら(6) ArduBlock、ちゃんと動くファイルはどこ? へ戻る

ブロックを積みながら(8) micro:bit のBluetooth serviceの使用 へ進む