Scratch 3.0 クラウド変数とScratch Link for micro:bit
Scratch 3.0のクラウド変数とScratch Link for micro:bitを使って、インターネット経由で、micro:bitに接続したサーボ・モーターを動かしてみました。
変数のスコープ
Scratch 3.0で、変数を作成する際に、「新しい変数」が表示され、変数名とスコープとを指定することができます。
# | スコープ | 補足 |
---|---|---|
1 | すべてのスプライト用 | |
2 | このスプライトのみ | |
3 | クラウド変数 | "Scratcher"としてサインインすること |
FAQ: クラウド変数
micro:bit拡張機能
Scratch 3.0では、標準で「micro:bit拡張機能」を追加可能で、Scratch 3.0からScratch Link を経由して、micro:bitデバイスの利用が可能です。
ただし、標準(公式)の「Scratch micro:bit HEXファイル」では、サーボ・モーターを動かす機能は備わっていません。
Scratch Link for micro:bit
独自のScratch micro:bit HEXファイル
Scratch 3.0とmicro:bitとは、Scratch Link を介して、Bluetooth(R) LEで通信していますので、この通信仕様に則ってmicro:bit側で独自のコーディングを行えば、サーボ・モーターを動かすことも可能です。
Microsoft MakeCode for micro:bitで、そのコーディングを容易にするため、ユーザー定義の拡張機能であるS3Link-UDKとBLADVを使用します。。
- S3Link-UDK
- BLADV
仕組みとコーディング
サーボ・モーターを動かすために、Scratch 3.0からmicro:bitへコマンドを送ります。
仕組み
Scrach 3.0から見て、micro:bitへの送信機能には、「画面に文字列を表示する」 機能があります。この文字列をコマンドと見立てて、micro:bitでサーボ・モーターを動かします。
今回、次の2つのコマンドを定義しました。
文字列 | 説明 | 備考 |
---|---|---|
on | サーボ・モーターの位置を0度にします。 | LEDは変化しません。 |
off | サーボ・モーターの位置を180度にします。 | LEDは変化しません。 |
(その他) | 文字列をLEDにスクロール表示します。 |
micro:bit側のコーディング(MakeCode)
MakeCodeで、micro:bit側のコーディングを行い、ダウンロードしてmicro:bitへ書き込みます。
「最初だけ」で、UDK start service
とBLADV Complete list of 16-bit Service ID:
とを実行し、Scratch Linkの通信を有効化します。10進数の61445
という値は、16進数で表すと0xF005
であり、Scratch 3.0(Scratck Link)でデバイスを探索する際に確認されます。
今回の主役は、UDK on display text received
ブロックです。「画面に文字列を表示する」機能で、Scratch 3.0から送信された文字列(text)の値が、"on"か"off"かを判断し、サーボ・モーターの角度を指定しています。
コーディング例: 共有プロジェクト- https://makecode.microbit.org/_CrFJzxRhHW3m
JavaScriptのソースコート
s3linkudk.onDisplayTextReceived(function (text) {
if ("on" == text) {
pins.servoWritePin(AnalogPin.P1, 0)
} else if ("off" == text) {
pins.servoWritePin(AnalogPin.P1, 180)
} else {
basic.showString(text)
}
})
s3linkudk.onDisconnected(function () {
control.reset()
})
s3linkudk.startService()
bladv.accumulateCompleteList16BitServiceID(61445)
pins.servoWritePin(AnalogPin.P1, 180)
basic.showIcon(IconNames.Heart)
Scratch側のコーディング(Scratch 3.0)
Scratch 3.0では、クラウド変数の値を判断して、「画面に文字列を表示する」機能で、文字列の"on"か"off"を送信します。クラウド変数の場合は、数値しか扱えませんので、1-"on"、0-"off"に対応させています。
スプライトの"onスイッチ"、"offスイッチ"をクリックすることで、クラウド変数の値を、1-"on"、0-"off"にそれぞれ設定しています。
スプライトの"スイッチ状態"では、クラウド変数の値を判断して、文字列の"on"か"off"を送信しています。
コーディング例: https://scratch.mit.edu/projects/769484632
使い方
micro:bit
- micro:bitにダウンロードしたHEXファイルを書き込みます。
→ 共有プロジェクト- https://makecode.microbit.org/_CrFJzxRhHW3m - micro:bitにサーボ・モーターを接続し、起動します。
パソコン
- パソコンでScratch Linkを起動します。
- Scratch 3.0にサインインし、プロジェクトを開きます。
→ コーディング例: https://scratch.mit.edu/projects/769484632 - パソコンのScratch 3.0からmicro:bitへ接続します。
- パソコンのScratch 3.0のプロジェクトを実行します。
スマホ
- スマホでScratch 3.0にサインインし、プロジェクトを開きます。
→ コーディング例: https://scratch.mit.edu/projects/769484632 - スマホで、Scratch 3.0のプロジェクトを実行します。
動作確認
- スマホの画面で、"オン(on)"や"オフ(off)"をタップして、サーボ・モーターが連動することを確認します。
おわりに
【micro:bit編】Scratch LinkでIoTを確認するために、Scratch 3.0のクラウド変数を使って、micro:bitに接続したサーボ・モーターを動かすことができました。
- Scratch 3.0のクラウド変数
- micro:bit拡張機能とScratch Link
- ユーザー定義の拡張機能であるS3Link-UDKとBLADV
おまけ
独自のScratch micro:bit HEXファイルを開発するにあたり、次の記事を投稿していますので、参考にしていただければ幸いです。