渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

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


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

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

f:id:esakun:20191229054510p:plain:w450

準備するもの

  • Unityインストール済みパソコン
  • micro:bit 2個

処理の流れ

  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を使います。

送信ソースコードの抜粋ですが、以下のように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