vb.net - DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector()) 端口名称为空
问题描述
我正在尝试获取一些连接到 Windows IoT RPi 单元的工作 USB 转串行适配器的端口名。我仍然能够打开,并且我得到了一个可以工作的实例化 serialDevice。我能够在端口上发送和接收数据,但 PortName 对象显示“”,所以我不知道它是 COM1 还是 COM2 等。这不是问题,除非我正在连接多个适配器并且需要一种方法来识别适配器唯一。还有人看到这个吗?
我用来查询和打开端口的代码是:
Dim dis = Await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector())
Dim Count As Integer = 0
Do Until Count = dis.Count
Debug.WriteLine("UART Port: " & dis(Count).Name & ", " & dis(Count).Id)
If dis(Count).Id.Contains("FTDI") Or dis(Count).Id.Contains("FT232") Then
serialPort = Await SerialDevice.FromIdAsync(dis(Count).Id)
End If
Count += 1
Loop
解决方案
您可以在桌面上获得有效SerialDevice.PortName
,但不能在 Windows IoT Core 设备上获得。为串行设备分配 COM 号需要系统提供的功能驱动程序,如Serial.sys 等。但这些驱动程序未在 Windows IoT Core 设备上提供。C:\Windows\System32\drivers
您可以在路径下检查它。
要识别多个设备,有一种解决方法,即使用VID(供应商 ID)和PID(产品 ID)。它们被认为是独一无二的。
因此,SerialDevice.GetDeviceSelector()
您可以使用SerialDevice.GetDeviceSelectorFromUsbVidPid(vid, pid)
. 您可以在 中找到 VID 和 PID DeviceInformation.Id
。它会像这样:
\\?\USB#VID_10C4&PID_EA60#0001#{86e0d1e0-8089-11d0-9ce4-08003e301f73}
推荐阅读
- django - 处理 Django 迁移
- regex - 使用正则表达式搜索 ansible 解析日期
- java - 使用 BigDecimal Java / Kotlin 的表达式
- algorithm - 用户到资源映射算法
- visual-studio-code - 我可以将远程 Python 解释器(通过 SSH)添加到本地 VSCode 环境(即混合本地/远程 SSH 设置)吗?
- python - 如何从 Python 中检索 CouchDB 复制状态
- ssh - 我一直在经历烦人且不寻常的 ssh 行为。它只是挂起..超时
- arrays - 在 Powershell 中,为什么 foreach-object 循环不允许您从数组中检索单个值?
- php - 如何从 Laravel 执行 Oracle 存储过程
- regex - How to grep a string in a file that begins and ends with two specific characters?