はじめに
本記事では、次の3つについて、紹介・解説します。
- OctoStudioの紹介(ビームブロック)
- TAKOチュートリアル(TAKO送信)
- ビームブロックの仕組み(BLEアドバタイジング)
【OctoStudioの紹介】ビームブロック
-
オクトーバー/October
2023年10月24日に OctoStudioがリリース されました。 -
無料モバイルコーディングアプリ
Andorid/iPhone/iPadに対応しており、Scratchのスマホ版ともいえます。 -
ビーム(beam)
OctoStudioには標準で、ビーム(beam)ブロックがあり、5種類の記号をスマホ間で送受信することができます。
OctoStudio チュートリアル - ビーム(beam)
OctoStudioに関するチュートリアルが動画等でいくつか公開されていますが、その中に「複数のスマホを使ったゲームの作り方」というビームブロックを使ったチュートリアルがあります。
複数のスマホを使ったゲームの作り方(英語)
micro:bitからビーム送信
使用されているビームブロックは、その通信をBLEアドバタイジングで実現していますので、BLE通信機能を備えたmicro:bitでも実現できます(ただし、送信のみ)。
チュートリアルに出てくる「発射ボタン(Launch)」をmicro:bitでコーディングしてみましょう。
【TAKOチュートリアル】TAKO送信でロケット発射
このTAKOチュートリアルでは、「複数のスマホを使ったゲームの作り方」で紹介されている「発射ボタン(Launch)」をmicro:bitの TAKO送信ブロック を使ってコーディングし、OctoStudioの ビームブロック を使ってロケットが打ち上がるようにコーディングします。
用意するもの
- micro:bit (1台)
- OctoStudioをインストールしたスマホ (1台)
MakeCode for micro:bitでのコーディング
micro:bitのAボタンで、"▲"記号を送信することによって、スマホ側のロケットが打ち上るようにします。
MakeCodeの準備
MakeCodeの新しいプロジェクト で、ユーザー定義の拡張機能 (BLADV
)を追加し、 TAKO送信ブロック (TAKO send
)が使えるようにします。
-
MakeCodeのページを開きます
https://makecode.microbit.org/ - 「新しいプロジェクト」 を作成します
-
プロジェクトの設定 (右上の歯車アイコン)で
No Pairing Required: Anyone can connect via Bluetooth
を オン にします - ブロックの 拡張機能 をクリックし、「拡張機能」画面を開きます
-
検索欄 (
検索または、プロジェクトのURLを入力・・・
)に
https://github.com/jp-rad/pxt-ubit-bladv
と入力し、 Enter キーを押下します - ubit-bladv パネルが表示されますので、それを クリック して拡張機能をインポートします
-
プロジェクトの設定 (右上の歯車アイコン)で、
JustWorks pairing (default): Pairing is automatic once the pairing is initiated.
と
Passkey pairing: Pairing requires 6 digit key to pair.
を オフ にし、これら以外を 全て オン にします
micro:bitのコーディングとプログラム転送
- 「入力」の
ボタン A が押されたとき
ブロック を配置します - 「BLADV」の
TAKO Send
ブロック を配置します(ボタン A が押されたとき
の中へ) -
TAKO Send
ブロックの記号を "▲"に変更 します - ダウンロードし、micro:bitへ プログラムを転送 します
OctoStudioでのコーディング
スマホのOctoStudioで、"▲"記号の受信を待ち受け、ロケットが打ち上るようにコーディングします。
動画の60秒あたりから始まるチュートリアルを参考にしてください。
ロケット打ち上げのコーディング(60秒から)
- OctoStudio を起動します
- ホームで 新しいプロジェクトを作る をタップします
- スプライトを追加 します
- 「物と交通」にあるロケット等の スプライト を選択します
- 好きな 背景の画像 を選択します
- コーディング画面で追加した スプライト を選択し、鉛筆マーク で 編集モード にします
- 描画オブジェクト全体 を選び、上向きに 回転 させ、 確定 します
- コーディング画面で スプライト を選択し、「その他のブロック」の
(ビーム)を待つ
ブロック と「動き」の動く
ブロック とを配置します -
(ビーム)を待つ
ブロック は、(ビーム) ▲を受け取るまで待つ
ブロック となり、 "▲"記号 が指定されていることを確認します -
動く
ブロック は、移動距離が150 、 移動方向が上向き になるように変更します
(150 | 0 | 普通 動く
ブロック)
動作確認
micro:bitとOctoStudioとでコーディングが完了しましたので、動作確認することができます。
- micro:bitの電源 を入れます
- OctoStudioで、 実行ボタン(再生マーク) をタップします
- micro:bitのAボタン を押します
- OctoStudioのスプライト (ロケット)が、一度だけ 動き 、停止ます。
【ビームブロックの仕組み】 BLEアドバタイジング
OctoStudioのビームブロックは、BLEのアドバタイジング機能を利用しており、ブロードキャスト方式で記号情報の送受信が行われています。
ビームブロックの仕組み
記号を送信する側 は、BLEアドバタイジングの内容(PAYLOAD)によって送信する記号をブロードキャストしています。
記号を待ち受ける側 は、BLEアドバタイジングをスキャンし、その内容から記号の受信を判断しています。
項目(PLAYLOAD) | 内容 | 説明 |
---|---|---|
[0x01] Flags | 接続情報 | 接続不可 |
[0x07] Complete list (128bit) | 識別子 | {2540B6B0-0002-4538-BCD7-7ECFB51297C1} |
[0x09] Complete Local Name | デバイス名 | シリアルIDと記号情報(0~4) |
Flags-接続情報
LEにのみ対応しており、Bluetooth Classicには、対応していません。また、接続(コネクション)することはできません(接続不要の為)。
Complete list - 識別子
アドバタイジングされているBLEサービスの識別子は、独自の128bitUUIDです。
uuid: {2540B6B0-0002-4538-BCD7-7ECFB51297C1}
value: 0xC19712B5CF7ED7BC38450200B0B64025
Complete Local Name - デバイス名
一般的には、 Complete Local Name を使って、そのデバイス名をアドバタイジングしていますが、ビームブロックでは、これを使って、記号情報を通知(アドバタイジング)しています。
Complete Local Name の内容は、記号情報だけでなく、送信タイミングを区別できるように送信毎にユニークとなるシリアルIDが付与されています。
項目 | <---シリアルID(8文字)--> | <--記号情報(8文字)--> |
---|---|---|
内容 | 16進数の文字列 | 数字の文字列 |
▲ | (0埋め以外のユニークな値) | "00000004" |
● | (0埋め以外のユニークな値) | "00000000" |
■ | (0埋め以外のユニークな値) | "00000001" |
♥ | (0埋め以外のユニークな値) | "00000003" |
★ | (0埋め以外のユニークな値) | "00000002" |
(なし) | "00000000" | "00000000" |
通信手順
ビームブロックでは、BLEのアドバタイジングを利用していますが、互いに接続の確立を行いません。アドバタイジング(送信側)とスキャン(待ち受け側)とで、次の通信手順で、記号の送受信を実現しています。
送信側
- 新しいシリアルID を生成します
-
新しいシリアルID と 記号情報 とをComplete Local Nameに指定して、 アドバタイジング を開始します
→ 記号情報をアドバタイジングし続ける - 一定期間待ち、アドバタイジングを終了します
-
(なし)
情報 をComplete Local Nameに指定して、 アドバタイジング を開始します
→ "0000000000000000"をアドバタイジングし続ける - 一定期間待ち、アドバタイジングを終了します
待ち受け側
- スキャン を開始し、Complete Local Nameの シリアルIDが新しい値 になるのを待ちます
- シリアルIDが新しい値 になったら、その 記号情報を取得 します
- 取得した記号情報 が、待ち受けている記号情報であれば、待ち受けを終了します
micro:bitでの制限事項 - 送信のみの理由
MakeCode内部で、micro:bitランタイムやNordic nRF5 SDKといったライブラリを使用しており、micro:bitのバージョンによって、そのライブラリが異なります。
micro:bit | ランタイム | nRF5 |
---|---|---|
V1 | dal | Soft Device 110 |
V2 | codal | Soft Device 113 |
この nRF5 に示してある Soft Device 110
や Soft Device 113
は、 ペリフェラル(peripheral) としてのみ機能し、 セントラル(central) として 機能しません。
その為、 アドバタイジング(advertising) で送信できるものの、他のデバイスのアドバタイジングを スキャン(scan) することができず、 待ち受けができない のです。
名称 | 役割 | 説明 |
---|---|---|
ペリフェラル (peripheral) |
周辺機器 | ボタンや加速度等のセンサーがあるデバイスから BLEサービスを提供する。アドバタイジングで、 提供しているBLEサービスの情報を通知する。 |
セントラル (central) |
利用側 | ペリフェラルのアドバタイジング情報をスキャンし、 BLEサービスを利用する。 |
実装上のヒント - BLEアドバタイジング
BLEの仕様において、アドバタイジングの内容(PAYLOAD)の 長さ制限 は、 31オクテット(バイト) です。
Complete list (128bit)
の値の長さが、 16オクテット で、Complete Local Name
の値の長さも 16オクテット であり、これらの値だけでも32オクテットになってしまいます。
31オクテットを超える内容をアドバタイジングするために、 スキャンレスポンス(Scan Response) という仕組みを使います。
次のように、 通常のアドバタイジング情報 と スキャンレスポンスによるアドバタイジング情報 とに分けて、全ての内容(PAYLOAD)をアドバタイジングすることができます。
※各項目の長さには、TYPE識別子の1オクテット を含みます。
通常のアドバタイジング情報
項目(PLAYLOAD) | 長さ |
---|---|
[0x01] Flags | 2 |
[0x09] Complete Local Name | 17 |
[0x0A] Tx Power Level | 2 |
[0x19] Appearance | 3 |
合計 | 24 |
スキャンレスポンスによるアドバタイジング情報
項目(PLAYLOAD) | 長さ |
---|---|
[0x07] Complete list (128bit) | 17 |
[0xFF] Manufacturer Specific Data | 12 |
合計 | 29 |
おわりに
ユーザー定義の拡張機能であるBLADVの TAKO送信ブロック を使って、OctoStudioのビームブロックで記号の受信を待ち受けることができることを紹介しました。
また、ビームブロックの仕組みとともに、micro:bitでの制限事項や実装上のヒントについて解説しました。
ユーザー定義の拡張機能であるBLADVのソースコード は、GitHubリポジトリで公開されています。