Scratch から micro:bit を操作する Scratch Link を自前ビルドする

マインクラフト on Scratch から子供たちを脱却すべく(別に脱却する必要もないのだけど)、micro:bit を5個購入しました。

なんで5個なのかというと、スイッチサイエンスさんで10,000円以上だと送料が無料になるからです。消費税8%のうちの駆け込み需要かと思いきや、スイッチサイエンスさんは実はキャッシュレスの軽減税の対象になったそうなので、どちらが安いのか分からないのですが。まあ、5個購入しました。

左に移っているのは chibi:bit で、以前購入したものです。確か、猫ボードあたりと揉めたときに記念に買ったものです。まだ、micro:bit に BLE が技適が通っていなくて Bluetooth のチップを独自で乗せて独自に技適を通したもの…だったハズです。実は、本国(英国)から送って貰ったものが手元にあるはずなのですが、行方不明で。

それはさておき、micro:bit を使います。

micro:bit をブロックプログラミングする

プログラムしましょう | micro:bit

micro:bit は Scratch のようにブロックプログラミングができます。内部は Google の Blockly がベースになっていて Microsoft が開発というハイブリッドな環境が話題になりました。

ここのサイトは、micro:bit の mbed な機能を使って、USB 接続したドライブに HEX ファイルを落とし込むという方法でプログラムを変更します。Arduino IDE や mbed を使っていると、なじみのある方法です。

実は、ブロックだけじゃなくて、Python や JavaScript も使えるので、キータイプをしたい場合にはこっちのほうを使うといいかもしれませんね。特に JavaScript のほうはブロックにしてから JavaScript のコードを表示できるので、コードの比較ができて便利です。

Scratch から micro:bit を操作する

もうひとつのほうは、Scratch の拡張機能を使って micro:bit に Bluetooth 接続をする方法です。

動作環境が、

  • Windows 10 あるいは macOS であること
  • Windows 10 側に Scratch Link が動作していること

と若干敷居が高いのですが、micro:bit が Bluetooth 接続できます。micro:bit にはあらかじめ、”Scratch micro:bit HEX” をインストールしておいて、Scratch Link 経由で micro:bit に接続します。HEX ファイルは Scratch – micro:bit でダウンロードができます。ちなみに、chibi:bit のほうは、https://t.co/KiQDkQIgw3 からダウンロードが可能です。

Scratch 側で micro:bit のブロックを作って、micro:bit のボタンや加速度センサーによって、Scratch 側で動きを制御できます。

このあたりは、micro:bit サイトの MakeCode よりも試行錯誤ができて便利です。

?

仕組みはどうなっているのか?

さて、ここまできたら、どういう動作になっているのか?できれは自作でハックをしてみたいのがプログラマの性です。いずれは、Scratch 3.0 のほうに独自の拡張ブロックを入れて、ということも視野にいれて、

を参考にして、独自の Scratch 3.0 環境を作ります。
Ubuntu on Windows を立ち上げて、以下でインストールします。



$ git clone --depth 1 https://github.com/llk/scratch-vm.git 
$ git clone --depth 1 https://github.com/llk/scratch-gui.git

後は、ビルド


$ cd scratch-vm 
$ npm i 
$ npm link 
$ cd ../scratch-gui 
$ npm i 
$ npm link scratch-vm

あとは、npm start すれば、http://localhost:8601/ で接続できるようになります。


$ cd scratch-gui 
$ npm start


micro:bit 拡張機能のコードは以下にあります。



scratch-vm/src/extensions/scratch3_microbit/index.js

接続方法として

Scratch 3.0 <=> Scratch Link <=> micro:bit

になるわけですが、

  • Scratch 3.0 と Scratch Link の間は、JSON
  • Scratch Link と micro:bit の間は BLE

です。
拡張機能を自作したい場合は、JSON のところをフックすればよいので、適当な拡張機能をコピーすればなんとかできそう。

BLE 通信のほうは、実は Scratch Link は以下で公開されています。

LLK/scratch-link at master

このコードを改変してビルドをすれば、独自に BLE をフックできるハズです。
ざっと中身をみてみると、UWP の BLE を使っていて GATT で通信させています。GATT を使っているので、Windows 7 とかでは動かないわけです。
現状はラズパイでは動かないようですが、macOS のコード(swiftだけど)をうまく修正すれば、macOS 以外でも動くかもしれません。

自前の Scratch Link をビルドするには、ちょっとコツがあります。というか、対象の開発環境が古いみたいで Visual Studio 2019 ではビルドができません。
.NET Framework のバージョンを最新(v4.7.2)に上げた後に、エディタで以下の修正をします。

Windows/scratch-link/ScratchLink.csproj

  • Windows.winmd ファイルの参照先を自前のものに変えておく。

- <hintpath>C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.16299.0\Windows.winmd</hintpath>
+ <hintpath>C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.18362.0\Windows.winmd</hintpath>

最後の scratchVersion.targets を削除する



- <import project="..\scratchVersion.targets">

本来は、scratchVersion.targets の git あたりを修正するのがよいのですが、ひとまず参照自体を削除。バージョンが 0.0.0.0 になるので、ちょっとまずいのですが。

この修正が終わると、無事ビルドが通って

  • 自前の Scratch 3.0(scratch-gui, scratch-vm)を起動
  • 自前の Scratch Link を起動
  • micro:bit に BLE 接続する

ことができます。

カテゴリー: 開発, Scratch パーマリンク