我正在运行一个IoT边缘模块的Windows 10 IoT核心上的一个Minnowboard。此模块需要从USB端口读取流。我们使用的是System.Io.Ports (与.net核心2.1代码兼容的.net标准版本)。
我在Windows10pro的笔记本电脑上看到了这种工作,但是它不工作IoT核心。我可以找到一些消息来源,说明由于System.Io.Ports端口的命名方案( SerialPort必须调用COM{x}才能正常工作),IoT核心上不支持SerialPort。SerialIOPrts示例来自IoT示例(https://go.microsoft.com/fwlink/?linkid=860459)的自述声明
“本示例使用标准的.NET核心System.IO.Ports API访问串行设备。这些API只适用于COM{x}的串行设备。因此,这种方法适用于Windows10 IoT企业,而不是Windows 10 IoT IoT。”
有人想办法绕过这件事吗?我可能可以让它在Windows10 IoT企业版上工作,但我真的想证明我们可以在最小的硬件/os上运行这个模块。
发布于 2019-03-27 10:01:40
在Windows上使用System.IO.Ports,您可以引用“IoT”。(注意:这些说明将在运行Windows10 IoT企业或Windows 17763的PC上工作。目前只支持x64体系结构。Arm32将来会来。)
(对于Azure IoT边缘模块而言)在Windows核心上访问没有端口名的串行设备(COMx),您可以使用Win32 API CreateFile。有一个用于为创建Win32控制台应用程序的项目模板。

在这里,我使用设备id创建一个示例来打开一个串行设备并进行读写:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
DWORD errCode = 0;
LPCWSTR pDeviceId = L"\\\\?\\FTDIBUS#VID_0403+PID_6001+A50285BIA#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73}";
HANDLE serialDeviceHdl = CreateFile(pDeviceId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (!serialDeviceHdl)
{
errCode = GetLastError();
cout << "Open device failed. Error code: " << errCode << endl;
return 0;
}
DWORD writenSize = 0;
BOOL result = WriteFile(serialDeviceHdl, "hello", 5, &writenSize, NULL);
if (FALSE == result)
{
errCode = GetLastError();
cout << "Write to device failed. Error code: " << errCode << endl;
}
CHAR readBuf[5];
DWORD readSize = 0;
result = ReadFile(serialDeviceHdl, readBuf, 5, &readSize, NULL);
if (FALSE == result)
{
errCode = GetLastError();
cout << "Read from device failed. Error code: " << errCode << endl;
}
}例如,您可以通过官方示例"SerialUART“- "DeviceInformation.Id”找到设备Id。
如何在Windows上部署和调试win32 C++控制台,您可以参考这里。
https://stackoverflow.com/questions/55373166
复制相似问题