【micro:bit 2019】 Scratch の独自拡張機能 Microbit More （2019/12/20）

この記事は 「[micro:bit Advent Calendar 2019 - Qiita](https://qiita.com/advent-calendar/2019/microbit)」の 20日目 の記事です。

今年の micro:bit Advent Calendar には、既に以下の記事 5つを投稿していますが、また記事を書いてみようと思います。

- [2019年に作ったものや行ったことの振り返り 〜その1：デバイス連携編〜 （2019/12/3）｜note](https://note.com/youtoy/n/n487110d7d874)
- [2019年に作ったものや行ったことの振り返り 〜その2：いろいろ作ってみた＆講座編〜（2019/12/5）｜note](https://note.com/youtoy/n/nb9b49c958b81)
- [2019年に作ったものや行ったことの振り返り 〜その3：今年買ったもの〜（2019/12/9）｜note](https://note.com/youtoy/n/n22d9878c41a8)
- [2019年に作ったものや行ったことの振り返り 〜その4：子ども向け活動など〜（2019/12/11）｜note](https://note.com/youtoy/n/n725584d998a1)
- [プログラミング・フォロ for micro:bit を試す（2019/12/15）｜note](https://note.com/youtoy/n/n0a5c006278a5)

## はじめに

この記事で扱うのは、下記の「[Scratch Advent Calendar 2019](https://qiita.com/advent-calendar/2019/scratch) の [6日目の記事](https://note.com/youtoy/n/nba3960d52ccb)」で少し触れた、[@yokobond さん](https://twitter.com/yokobond)が開発された「[Microbit More](https://lab.yengawa.com/project/scratch-microbit-more/)」です。

- 機械学習・音声認識・デバイス連携の独自拡張（2019/12/6）｜note
    - https://note.com/youtoy/n/nba3960d52ccb

## Microbit More

以下が、Microbit More の関連ページになります。

- Scratch Microbit More – Yengawa Lab
    - https://lab.yengawa.com/project/scratch-microbit-more/
- yokobond/scratch-ext at microbit-more
    - https://github.com/yokobond/scratch-ext/tree/microbit-more
- Scratch 3.0 GUI
   - https://yokobond.github.io/scratch-ext/microbit-more/

### Scratch の公式の環境で micro:bit を使う

Microbit More は、Scratch で micro:bit を扱うためのものです。
もしかしたら、「micro:bit は既に公式で、Scratch Link を使った方法で利用できますよね」と思われた方がいらっしゃるかもしれないですが、公式よりも多機能なのが大きな違いです。

以下、Microbit More のページからの引用になるのですが、Microbit More用のファームウェアは Scratch公式の micro:bit用拡張機能のファームウェアとしても利用できるという嬉しい仕様です。

> micro:bit側に入れるファームウェアはLLKによる「標準のmicro:bit拡張」と互換性を保つようにつくりました。そのため、Microbit More用ファームウェアをmicro:bitにダウンロードしたあとでもそのまま書き換えることなく「標準のmicro:bit拡張」も使うことができます。

#### Scratch公式の micro:bit 用拡張機能

まず、Scratch が公式で提供している micro:bit用の拡張機能を見てみます。
使い方の手順については、公式情報やその他、下記の記事をご覧ください。

- Scratch - micro:bit
    - https://scratch.mit.edu/microbit
- micro:bit【マイクロビット】Scratch Linkのセットアップ【Windows編】 | micro:bit Lab.【マイクロビット】
    - https://sanuki-tech.net/micro-bit/scratch3/setup-scratch-link/

以下が、公式の拡張機能で利用できるブロックです。
<img width="351" alt="Scratch_Link_のテスト_on_Scratch.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1822a95a-84a1-9b19-0175-499682115d09.jpeg">
![図aaaa.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/df1b4b95-6ad8-4a47-27a5-8267401b730d.jpeg)

[MakeCode](https://makecode.microbit.org/)で micro:bit のプログラミングをやったことがある方から見ると、使える機能がかなり少ない印象があるかもしれません。

#### Microbit More の機能

次に、Microbit More の機能を見てみます。
以下は、[Microbit More のページ](https://lab.yengawa.com/project/scratch-microbit-more/)からの引用ですが、Scratch の公式の拡張機能より多くの機能が利用可能になっているようです。
> Microbit More拡張では、標準のMicrobit拡張ブロックに加えて、以下のブロックが利用できます。
> 
> - 明るさ(Light Intensity)
    - 表示LEDマトリクスに当たる光の強さ
- 北からの角度 (Angle from the North)
    - 北を基準として時計回りの方位角(0から359)
- 磁力(Magnetic Force)
    - 磁気の強さ(μT)
- 加速度(Acceleration)
    - X/Y/Z方向の各加速度(milli-g : 重力加速度の1/1000)
- アナログレベル(Analog input)
    - 0.0-3.3Vを1024段階に分けた電圧レベル
- デジタル入出力(Digital input/output)
    - 0/3.3Vのデジタル入出力(最大8ピン)
- アナログ出力(PWM)
    - 0.0-3.3Vを1024段階で指定できる出力電圧(PWM方式)
- サーボモーター(Servo motor)
    - 一般的な小型サーボモーター(SG-90など)を角度で指定
- スロット(Slot: Shared data)
    - 4つの数値(-32768から32767)をmicro:bitとScratchの両方で共有

上記を、具体的に [@yokobond さん](https://twitter.com/yokobond)が提供されている独自環境で見てみます。
以下、公式の拡張機能と違いがあるところだけを選んでみました。
![図1bbb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0ce846fe-dfe4-d181-e5d6-b3478cfa28fb.jpeg)
公式の拡張機能に比べて、かなり利用可能な機能が増えているのが分かります。

#### Microbit More を使ってみる

せっかくなので、公式では利用できない機能を使ったものを試してみます。

##### 明るさの取得

まずは明るさを取得する処理のテスト。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Microbit More で明るさの値を取得する処理を試したよ！ <a href="https://t.co/pW018YX3O0">pic.twitter.com/pW018YX3O0</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1208031799126843397?ref_src=twsrc%5Etfw">December 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

動画でも見えてますが、プログラムはこんな感じです。
<img width="525" alt="Scratch_3_0_GUIaa.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/53ba3dba-7449-2d81-a9d6-eb633bbaf37f.jpeg">

##### 方位角を使う

方位角を取得してスプライトの回転に反映させる、というのをやってみました。

<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">今度は、方位角！ <a href="https://t.co/D11N3Pvdr9">pic.twitter.com/D11N3Pvdr9</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1208036837198942209?ref_src=twsrc%5Etfw">December 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<img width="529" alt="Banners_and_Alerts_と_Scratch_3_0_GUI.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0fff7dd0-7611-a340-4860-b6728b93861c.jpeg">

micro:bit と何か回転するものを組み合わせて、とか使い方を工夫したいところ。

## さいごに

良い作例が思いつかず（また、外出先でこの記事を書いていて、手元に材料もなく・・・）、お試しがシンプルなものになりました。
ピンのデジタル・アナログ入出力を使ったものを、何か考えてやってみたいです。

今回、Scratch が公式で提供している micro:bit用の拡張機能よりも多くのことができる、Microbit More を試してみました。
こちらは、[@yokobond さん](https://twitter.com/yokobond)が提供されている環境以外に、以下のような流れがあり [Junya Ishihara（@ jishiha）さん](https://twitter.com/jishiha)が提供されている独自環境でも利用できます。
<img width="711" alt="Scratch_micro_bitアイディア＆情報交換.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0af87450-fa13-e6d7-5459-fdd5d6c9ada8.jpeg">
この投稿にあるとおり、[Junya Ishihara（@ jishiha）さん](https://twitter.com/jishiha)が開発された機械学習等が行える拡張機能との組み合わせができるようになるため、それも今後試してみたいところです。