通过Hololens 2[Unity C#]中的串行端口从蓝牙设备读取字符串

通过Hololens 2[Unity C#]中的串行端口从蓝牙设备读取字符串,c#,uwp,bluetooth,serial-port,hololens,C#,Uwp,Bluetooth,Serial Port,Hololens,我需要从一个通过蓝牙配对的惯性传感器接收一个字符串到Hololens2。我能够连接HoloLens配置菜单中的传感器,在Unity开发的应用程序中尝试使用串行端口接收数据时出现问题 我已经在Unity编辑器中使用System.IO.Ports.SerialPort类()建立了连接并接收数据。在尝试在HoloLens中建立相同的连接时出现了问题,经过一些研究,我发现System.IO.Ports.SerialPort类不能用于UWP应用程序,因此我尝试使用Windows.Devices.Seria

我需要从一个通过蓝牙配对的惯性传感器接收一个字符串到Hololens2。我能够连接HoloLens配置菜单中的传感器,在Unity开发的应用程序中尝试使用串行端口接收数据时出现问题

我已经在Unity编辑器中使用System.IO.Ports.SerialPort类()建立了连接并接收数据。在尝试在HoloLens中建立相同的连接时出现了问题,经过一些研究,我发现System.IO.Ports.SerialPort类不能用于UWP应用程序,因此我尝试使用Windows.Devices.SerialCommunication.SerialDevice类()。这是一段应该建立连接的代码,我在脚本的唤醒功能中使用它:

async void openConnection()
    {
#if !UNITY_EDITOR
        await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
  Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
  {
      try
      {
                DeviceInformationCollection serialDeviceInfos = await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector());

                if (serialDeviceInfos != null){

                    foreach (DeviceInformation serialDeviceInfo in serialDeviceInfos){

                        SerialDevice serialDevice = await SerialDevice.FromIdAsync(serialDeviceInfo.Id);

                        if (serialDevice != null)
                        {
                            // Found a valid serial device.
                            // Reading a byte from the serial device.
                            DataReader dr = new DataReader(serialDevice.InputStream);
                            string drData = dr.ReadString(60);
                        
                            estadoSensor.text = drData;
                        }

                }   }
      }
      catch (Exception ex)
      {
          estadoSensor.text = ex.ToString();
          System.Diagnostics.Debug.WriteLine(ex);
      }
   });
#endif 
    }
调用方法SerialDevice.FromIdAsync()时,即使serialDeviceInfo.Id不为null,该方法也会抛出System.Exception类型的异常,如果我没有错的话,它也不会更一般。正如您所看到的,我试图在UI线程上调用该方法,因为我已经读到,否则它将不起作用,但即使这样做,它也不适用于我()

我还将这段代码添加到Unity编辑器中为UWP构建后生成的package.appxmanifest文件中,理论上它应该能够启用串行通信功能

    <DeviceCapability Name="serialcommunication">
        <Device Id="any">
            <Function Type="name:serialPort" />
        </Device>
    </DeviceCapability>

我希望我已经设法正确地解释了我的问题


提前谢谢

Bluetooth SerialPort无法在HoloLens 2上工作,因为HoloLens 2设备没有安装特定的驱动程序,传感器可以通过连接的串行端口执行此操作。此外,建议您使用RFCOMM,更多信息请参见:

我想我没有正确解释自己,我可以通过配置>设备>蓝牙连接设备。当试图通过串口读取数据时出现问题。嗨@RobertoBelmonte我已经修改了这个答案,请检查。嗨,我终于解决了我的问题。我放弃了使用串行端口,将传感器连接到PC,然后通过UDP将数据发送到hololens应用程序。我会看看RFCOMM,也许它可以让我把电脑放在一边。谢谢你所做的一切!