使用 UWP 连接到 Arduino

Connect to Arduino with UWP

我正在尝试写入 Arduino Uno 设备,但 SerialDevice.FromIdAsync 始终 returns 为空。这是我的代码:

    DeviceInformationCollection devices = await DeviceInformation.FindAllAsync();

    foreach (DeviceInformation deviceInfo in devices)
    {
        if (deviceInfo.Name.IndexOf("Arduino") >= 0) {
            Debug.Log("Arduino found with id="+deviceInfo.Id);
            serialDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
            if (serialDevice == null) Debug.Log("it's null");
            break;
        }
    }

运行 这个代码给我 "Arduino found with id=\?USB#VID_2341&PID_0001#55...." 然后 "it's null"

在我的 manfiest 中,我有以下内部功能:

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

Connect to Arduino with UWP

为了获取SerialDevice,我们建议使用SerialDevice.GetDeviceSelector()获取deviceSelector并使用以下创建SerialDevice watcher。我们提供了code sample,您可以直接参考。我已经测试过,它在我这边有效,该应用程序可以列出具有 USB\VID_2341&PID_0043\xxxxx 设备 ID 的 Arduino Uno 设备。

var deviceWatcher = DeviceInformation.CreateWatcher(deviceSelector);

Microsoft 提供了几个简单的示例,用于与通过 USB 电缆连接的 Arduino 进行通信。

第一个是 https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/SerialArduino

处的 C# 示例

第二个包含 C# 和 C++ UWP 示例,位于 https://github.com/microsoft/Windows-iotcore-samples/tree/develop/Samples/SerialUART

我使用了 SerialUART 示例中的 C++ UWP 示例,它在 Visual Studio 2017 和 Arduino Uno 上运行良好。

这是我使用的程序。

我用 USB 数据线将 Arduino 连接到 Windows 10 笔记本电脑。我检查了设备管理器,发现当我插入已经插入 Arduino USB 连接器的 USB 电缆时,创建了一个 USB 串行端口,在我的例子中是 COM3。

我打开了 Arduino IDE 并克隆了示例 Blinky LED 项目,该项目使 Arduino 板上的内置 LED 闪烁。刚好有这个草图,修改起来很方便

我添加了 SoftwareSerial.h include 指令并使用 Serial class 在 setup() (Serial.begin(9600);) 中初始化串行连接,然后在 loop() 我创建了一个全局 static unsigned long ulCounter; 然后用 (Serial.print("line "); Serial.print(ulCounter); Serial.print("\n"); ulCounter++;) 进行打印,这样我就可以看到循环正在工作并且计数器递增。

我编译了草图,下载了它,然后在 Arduino IDE 中打开串行监视器工具以确保打印语句正常工作并且计数器递增。然后我关闭了串行监视器 window 以便为另一个应用程序释放串行端口。

接下来我克隆了 SerialUART 文件夹,导航到 C++ 文件夹,打开解决方案文件,然后重新编译。我确实必须在属性中更改目标 Windows 版本。

然后我 运行 在调试器中编译了应用程序,它运行良好。看起来文本行覆盖了文本框中已有的内容,这就是为什么使用计数器很有帮助的原因。 USB 的 VID 显示在示例应用程序中 window。

经验教训

当Arduino通过USB线连接到USB接口时,会在Windows10.

下创建一个分配有COM号的USB串口

一次只有一个应用程序可以访问 USB 串行端口。串行监视器和编译的示例应用程序不能同时在同一个 USB 串行端口上使用。

Arduino 的串行监视器IDE 可用于检查是否正在打印 Arduino 的输出。在文本中有一个递增的计数器可以更容易地知道循环正在工作。