こんにちは、エンジニアのオオバです。
以前micro:bitを入力デバイスとしてUnityに無線通信で送信するサンプルを作りました。
今回はUnityを入力デバイスとしてmicro:bitへデータを送信してみます。

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
準備するもの
- 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を使います。
GitHub - baobao/SerialPortWrapper
送信ソースコードの抜粋ですが、以下のようにWriteメソッドで任意の文字列をUSBでつながったmicro:bitに送信します。
void Send()
{
// micro:bitに送信する任意の文字列
_serialPortWrapper.Write("hoge:");
}
文字列を受け取ったmicro:bitは、無線状態のmicro:bitに数字を送信します。
※数字はあくまで今回のサンプル用で、文字列も送れます。
完成
Unityからmicro:bitへシリアル通信するサンプル - YouTube
このような感じでUnity上でマウスクリックするとmicro:bitにシリアル通信するようになりました。
無線状態のmicro:bitのLEDがUnityからの入力で切り替わっています。
GitHub - baobao/Unity2microbit: Unityからmicro:bitへシリアル通信するサンプル
Unity側のソースコードはこちらにアップしています。
レイテンシが気になりますが、数行でmicro:bitに無線通信できるのでお手軽です。

この記事が気に入ったらフォローしよう
- Unity2019.2.9f1