You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows Forms应用中通过C#读取Arduino串口数据?

问题根因与解决方法

你当前的代码存在串口参数配置缺失、握手规则与Arduino Micro不兼容的问题,按以下方案调整即可正常读取数据:

核心调整点

  • 移除RequestToSend硬件握手配置,Arduino Micro的USB虚拟串口不需要硬件握手,开启后会导致串口等待握手信号,无法接收数据
  • 补全串口核心参数:串口通信要求两端参数完全一致,必须显式配置8位数据位、无校验、1位停止位,和Arduino默认串口参数匹配
  • 开启DTR、RTS信号:Arduino Micro的USB虚拟串口需要这两个信号激活才会向外发送数据
  • 打开串口后增加短延迟,等待Arduino初始化完成,避免漏掉前几帧数据

修改后可运行代码

using System.IO.Ports;
using System.Threading;

class Program
{
    static SerialPort SP;
    static void Main(string[] args)
    {
        SP = new SerialPort();
        SP.PortName = "COM7";
        SP.BaudRate = 9600;
        // 显式设置和Arduino匹配的串口参数
        SP.DataBits = 8;
        SP.Parity = Parity.None;
        SP.StopBits = StopBits.One;
        // 禁用不必要的硬件握手
        SP.Handshake = Handshake.None;
        // 适配Arduino Micro的USB虚拟串口要求
        SP.DtrEnable = true;
        SP.RtsEnable = true;
        SP.Open();
        // 打开串口后等待1秒让Arduino准备就绪
        Thread.Sleep(1000);

        while (true)
        {
            // 临时测试可替换为ReadExisting读取所有缓冲区内容,排除换行符匹配问题
            Console.WriteLine(DateTime.Now.ToString() + " : " + SP.ReadLine());
        }
    }
}

排查补充说明

如果调整后仍无法读取,按以下步骤验证:

  • 确认Arduino代码中使用Serial.println()输出数据,确保每段数据末尾带换行符,匹配ReadLine()的读取逻辑
  • 运行C#代码前必须关闭Arduino IDE的串口监视器,同一个COM口无法被两个程序同时占用
  • 确认代码中波特率和Arduino代码里Serial.begin()传入的参数完全一致

内容的提问来源于stack exchange,提问作者Sylence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:48:02