5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ScratchAdvent Calendar 2022

Day 1

【micro:bit編】Scratch LinkでIoT - Scratch 3.0のクラウド変数を使ってmicro:bitのサーボ・モーターを動かしてみた

Last updated at Posted at 2022-11-30

Scratch 3.0 クラウド変数とScratch Link for micro:bit

Scratch 3.0のクラウド変数Scratch Link for micro:bitを使って、インターネット経由で、micro:bitに接続したサーボ・モーターを動かしてみました。

image.png

変数のスコープ

Scratch 3.0で、変数を作成する際に、「新しい変数」が表示され、変数名とスコープとを指定することができます。

# スコープ 補足
1 すべてのスプライト用
2 このスプライトのみ
3 クラウド変数 "Scratcher"としてサインインすること

image.png

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-UDKBLADVを使用します。。

  • S3Link-UDK

  • BLADV

仕組みとコーディング

サーボ・モーターを動かすために、Scratch 3.0からmicro:bitへコマンドを送ります。

仕組み

Scrach 3.0から見て、micro:bitへの送信機能には、「画面に文字列を表示する」 機能があります。この文字列コマンドと見立てて、micro:bitでサーボ・モーターを動かします。

image.png

今回、次の2つのコマンドを定義しました。

文字列 説明 備考
on サーボ・モーターの位置を0度にします。 LEDは変化しません。
off サーボ・モーターの位置を180度にします。 LEDは変化しません。
(その他) 文字列をLEDにスクロール表示します。

micro:bit側のコーディング(MakeCode)

MakeCodeで、micro:bit側のコーディングを行い、ダウンロードしてmicro:bitへ書き込みます。

「最初だけ」で、UDK start serviceBLADV 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)

image.png

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

image.png

使い方

micro:bit

  1. micro:bitにダウンロードしたHEXファイルを書き込みます。
    共有プロジェクト- https://makecode.microbit.org/_CrFJzxRhHW3m
  2. micro:bitにサーボ・モーターを接続し、起動します。

パソコン

  1. パソコンでScratch Linkを起動します。
  2. Scratch 3.0にサインインし、プロジェクトを開きます。
    → コーディング例: https://scratch.mit.edu/projects/769484632
  3. パソコンのScratch 3.0からmicro:bitへ接続します。
  4. パソコンのScratch 3.0のプロジェクトを実行します。

スマホ

  1. スマホでScratch 3.0にサインインし、プロジェクトを開きます。
    → コーディング例: https://scratch.mit.edu/projects/769484632
  2. スマホで、Scratch 3.0のプロジェクトを実行します。

動作確認

  1. スマホの画面で、"オン(on)"や"オフ(off)"をタップして、サーボ・モーターが連動することを確認します。

おわりに

【micro:bit編】Scratch LinkでIoTを確認するために、Scratch 3.0のクラウド変数を使って、micro:bitに接続したサーボ・モーターを動かすことができました。

  • Scratch 3.0のクラウド変数
  • micro:bit拡張機能とScratch Link
  • ユーザー定義の拡張機能であるS3Link-UDKBLADV

おまけ

独自のScratch micro:bit HEXファイルを開発するにあたり、次の記事を投稿していますので、参考にしていただければ幸いです。

5
3
1

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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?