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

如何通过串口将Arduino多路传感器数据发送至Python并正确解析

问题原因

你当前使用Arduino的Serial.write()发送的是原始二进制字节数据,十进制20对应的十六进制值为0x14,因此Python端读到的原始字节就是b'\x14',和预期的数值输出不符。

目标1 实现单传感器数值正确输出

Arduino端修改代码

void setup(){
  Serial.begin(9600);
  // 启动后等待2秒,避免串口初始化阶段丢包
  delay(2000);
}

void loop(){
  int sensor1 = 20;
  // 用print发送ASCII格式数值,加换行作为数据结束标识
  Serial.println(sensor1);
  delay(1000);
}

Python端修改代码

import serial
ser = serial.Serial("/dev/ttyACM1",9600,timeout=1)
while True:
    # 读取完整一行数据,直到遇到换行符
    data_raw = ser.readline()
    if data_raw:
        # 字节转字符串,去掉首尾空白符后转整数
        sensor_val = int(data_raw.decode().strip())
        print(f"data: {sensor_val}")
目标2 实现多路传感器数据同时发送接收

Arduino端修改代码

发送时用空格分隔不同传感器数值,末尾加换行作为结束标识:

void setup(){
  Serial.begin(9600);
  delay(2000);
}

void loop(){
  int sensor1 = 20;
  int sensor2 = 40;
  int sensor3 = 60;
  // 依次发送数值+分隔符,最后一个数值用println加换行
  Serial.print(sensor1);
  Serial.print(" ");
  Serial.print(sensor2);
  Serial.print(" ");
  Serial.println(sensor3);
  delay(1000);
}

Python端修改代码

读到完整行后拆分即可得到所有传感器数值:

import serial
ser = serial.Serial("/dev/ttyACM1",9600,timeout=1)
while True:
    data_raw = ser.readline()
    if data_raw:
        data_str = data_raw.decode().strip()
        # 按空格拆分得到所有传感器数值字符串
        sensor_list = data_str.split()
        # 输出要求格式
        print(f"data: {' '.join(sensor_list)}")
注意事项
  • 串口设备路径/dev/ttyACM1需要根据你自己的实际设备路径修改,Windows系统下一般是COMx格式
  • Arduino连接串口时会自动重启,因此代码中加了2秒启动延迟,避免初始化阶段的数据丢失
  • 发送间隔不要太短,避免串口缓冲区溢出丢数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:07