以前micro:bitを入力デバイスとしてUnityに無線通信で送信するサンプルを作りました。
今回はUnityを入力デバイスとしてmicro:bitへデータを送信してみます。
準備するもの
- Unityインストール済みパソコン
- micro:bit 2個
処理の流れ
- C#側からUSBにつながったmicro:bitへ文字列をシリアル通信する
- USBにつながった送信micro:bitは文字列を受け取って受信micro:bitへ数字を送信
- 受信側micro:bit(電源は電池)は数字を受け取ってLEDを光らせる
準備 : 各micro:bitのソースコードを用意してインストール
以下のソースコードをmicro:bitのオンラインエディタで編集、ダウンロードしてインストールを済ませておきます。
USBでつないでいるmicro:bitのソースコード
// micro:bit間で同じ数字のグループをセットしておく必要あり radio.setGroup(1) let sendNum = 0 // Unityから文字列を受け取る serial.onDataReceived(serial.delimiters(Delimiters.Colon), function () { basic.showNumber(sendNum) // 受信側micro:bitに数字を送信する radio.sendNumber(sendNum) sendNum++ if (sendNum > 2) sendNum = 0 })
受信側micro:bitソースコード
radio.setGroup(1) // micro:bitから数字を受け取ったらLEDを光らせる radio.onReceivedNumber(function (n) { if (n == 0) basic.showIcon(IconNames.Heart) else if (n == 1) basic.showIcon(IconNames.Asleep) else if (n == 2) basic.showIcon(IconNames.Butterfly) })
Unityからmicro:bitへシリアル通信する処理
Unity側の全ソースコードは、全公開していますので、ここでは概要の説明になります。
以前作成したSerialiPortWrapperを使います。
送信ソースコードの抜粋ですが、以下のようにWriteメソッドで任意の文字列をUSBでつながったmicro:bitに送信します。
void Send() { // micro:bitに送信する任意の文字列 _serialPortWrapper.Write("hoge:"); }
文字列を受け取ったmicro:bitは、無線状態のmicro:bitに数字を送信します。
※数字はあくまで今回のサンプル用で、文字列も送れます。
完成
このような感じでUnity上でマウスクリックするとmicro:bitにシリアル通信するようになりました。
無線状態のmicro:bitのLEDがUnityからの入力で切り替わっています。
Unity側のソースコードはこちらにアップしています。
レイテンシが気になりますが、数行でmicro:bitに無線通信できるのでお手軽です。
環境
- Unity2019.2.9f1

BBC micro:bit go スターターキット リテールBOX(CFD販売 6ヶ月製品保証付)
- 発売日: 2017/08/05
- メディア: Personal Computers