【问题标题】:Raspberry pi Windows IoT Arduino USB communication树莓派 Windows IoT Arduino USB 通信
【发布时间】:2016-04-16 08:57:10
【问题描述】:

我有一个通过 USB 连接到我的 Raspberry Pi 2 的 Arduino,并在其上安装了 Windows 10 IOT。我在 Visual Studio 中制作了一个通用应用程序,它可以在 Pi 上运行。我需要包含哪些参考资料才能通过 USB 与 Arduino 进行通信?

【问题讨论】:

    标签: arduino raspberry-pi usb communication windowsiot


    【解决方案1】:

    此代码允许 PC 通过 USB 与 Arduino 通信。 Arduino 上的 USB 并不是真正的 USB。它是串行的。

    http://arduino.cc/playground/Csharp/SerialCommsCSharp.

    【讨论】:

    • 我试过了,但我无法将“使用 System.IO.Ports”导入通用应用程序...
    • 这很奇怪。 System.IO.Ports 在系统程序集中。我假设您的应用程序引用 System.也许我不理解。这个“Visual Studio 中的通用应用程序”是 .Net 应用程序吗?
    • 这是我正在运行的空白应用程序(通用):prntscr.com/ata9fs 并且 System.IO... 不包含在其中。
    • 哦,是的。 System.IO.Portsis 从通用应用程序中删除。它仍然存在于 .Net4.5 这似乎是一个常见的抱怨。查看。 ms-iot.github.io/content/en-US/win10/samples/SerialSample.htmstackoverflow.com/questions/36380925/…
    • 谢谢,它有效。我需要添加“使用 Windows.Devices.SerialCommunication;”
    【解决方案2】:

    只需将您的 Arduino 连接到 Raspberry PI 的 USB 端口之一。

    此方法将尝试查找已连接的 Arduino 并向串口写入内容。

        private async void ConnectToArduino()
        {
            //Enumerate devices.
            var devices = DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector()).AsTask();
            devices.Wait();
    
            //This will probably get you the connected arduino. (You can also use vendor id to be more accurate).
            var serialDevice = devices.Result.FirstOrDefault(x => x.Name == "USB Serial Device");
    
            if (serialDevice != null)
            {
                Debug.WriteLine("Found Arduino: " + serialDevice.Name + " " + serialDevice.Id);
    
                // Create a serial port.
                var serialPort = await SerialDevice.FromIdAsync(serialDevice.Id);
                serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
                serialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
                serialPort.BaudRate = 9600;
                serialPort.Parity = SerialParity.None;
                serialPort.StopBits = SerialStopBitCount.One;
                serialPort.DataBits = 8;
    
                //Write to serial port.
                DataWriter writer = new DataWriter(serialPort.OutputStream);
                writer.WriteString("Hello World!");
                await writer.StoreAsync();
    
                //Done.
                writer.DetachStream();
            }
            else
            {
                Debug.WriteLine("Arduino not found!");
            }
        }
    

    将以下功能添加到您的 Package.appxmanifest 文件中。

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

    此外,请查看此项目,了解如何使用 Firmata 协议从 Windows IoT Core 上的 Raspberry PI 轻松控制 Arduino。 我试过了,效果很好!

    https://www.arduino.cc/en/Reference/Firmata

    https://github.com/ms-iot/serial-wiring

    【讨论】:

      【解决方案3】:

      问题是在 win iot 上未检测到 Arduino,因此无法进行串行通信,因为从 iot 的角度来看不存在串行端口。 非常感谢任何在 windows iot 上正确检测 Arduino 的测试解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        相关资源
        最近更新 更多