こんにちは、エンジニアのオオバです。

以前micro:bitを入力デバイスとしてUnityに無線通信で送信するサンプルを作りました。

今回はUnityを入力デバイスとしてmicro:bitへデータを送信してみます。

Unityからmicro:bitへ無線通信する方法_0

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

準備するもの

処理の流れ

  1. C#側からUSBにつながったmicro:bitへ文字列をシリアル通信する
  2. USBにつながった送信micro:bitは文字列を受け取って受信micro:bitへ数字を送信
  3. 受信側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に無線通信できるのでお手軽です。

オススメ記事
検証環境