スタンプ型デバイス(3) ~HoloLens2とBluetoothで通信~


まえがき

前回Bluetoothでのシリアル通信に無事成功しました.
Unityで扱えるならビルド先でも簡単に利用できるはずだと思い,そのままHoloLens2用に書き換え,ビルドしました.
ここまでは順調でした...

HoloLens2とBluetoothでペアリングしてデモを実行しましたが反応ない.
理由はシリアルポートの接続がうまくいっていないことが原因でした.
PCならデバイスマネージャーからポートを判別できますがHoloLens2には判別する手法はありません.
この解決法はかなり悩みました.

本題

手当たり次第ポート番号を変えて接続を試みたが全く繋がらず,断念
そこでプログラムで有効なポートを検索,自動で選択するようにしようと考えた

機器概要

・Windows10 Laptop
・Unity 2019.3.2f1
・HoloLens2
・スタンプ型デバイス(M5StickC)
・Visual Stadio 2019

手順

1.プログラム作成

有効なポートを識別するプログラムを作成

ShowSerialPortNum.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO.Ports;
using TMPro;

public class ShowSerialPortNum : MonoBehaviour{

  [SerializeField]
  private TextMeshPro portNameText;

  private void Awake() {
    string[] ports = SerialPort.GetPortNames();
    portNameText.text = "The following ports are valid\n"; //有効なポートは以下の通りです
    foreach(string port in ports) //portsの数だけループ
    {
      portNameText.text += port + "\n"; //テキストに表示
    }
  }
}
2.デモ作成

UXのデモからパネルを拝借して本文にポートを羅列する
空のGameObjectを作成し,Eventとして先ほどのscriptをアタッチする

PCでBluetoothをONにして実行すると以下のように表示される

3.HoloLens2にビルド

これをHoloLens2にビルドしてみたが,結果は残念...
本文が変化しなかった.ポートの識別どころか,ポートで制御されていないのか?
これでは自動選択もできない.(そもそも違うポートだった場合,タイムアウト処理でアプリ自体が停止した)

あとがき

HoloLens2とシリアル通信は難しいので断念します.(有料Assetでいけるかもしれないが確証がない)
次回は違うアプローチでやってみます.

参考

HoloLens 2 の環境構築をして実機で動かす
C#でCOMポート番号とシリアル接続機器名を同時に取得する方法

Bluetooth関連

Unity(C#)でシリアル接続デバイス名の一括取得
UnityでArduinoとシリアル通信をする
How to send a string from Arduino to a Hololens game via Bluetooth?
HoloLens Bluetooth Ports
HoloLens BLE communication ( windows 10 )

micro:bitとHoloLensをBluetoothで接続できたメモ
ESP-IDF ESP32でのBluetooth HIDの利用
SerialPort.GetPortNames メソッド
マネージプラグイン

Text Mesh pro

【Unity】Text Mesh Proのテキストをスクリプトから表示・変更する
UNITY*TextMeshPro テキストボックスにテキストを反映
TMProをusingできない時
TextMeshProの使い方
【Unity】TextMesh ProがUnityに組み込まれました

ボタン作成

What is the Mixed Reality Toolkit