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

Python读取Arduino串口传感器数据:将字符串转为numpy数组

解决Python读取Arduino传感器数据并转换为NumPy数组的问题

核心处理步骤

  • 先将串口读取的字节数据解码为字符串,再按硬件输出的格式解析出各字段(sensorID、采样数、加速度三轴数据、陀螺仪三轴数据)
  • 将解析后的数值集合转换为NumPy数组,便于后续分析与计算

修改后的完整代码

import serial
import time
import numpy as np
import matplotlib.pyplot as plt

# 初始化串口连接
ser45 = serial.Serial('COM4', baudrate=500000, writeTimeout=0)
config = 'n45'
k = 0
# 用于存储所有解析后的传感器数据
sensor_records = []

while k < 10:
    ser45.flush()
    ser45.flushInput()
    ser45.write(config.encode())
    time.sleep(1)
    
    # 读取串口数据并解码为字符串,去除首尾空白字符
    raw_data = ser45.read(ser45.inWaiting()).decode('utf-8').strip()
    print(f"原始串口数据: {raw_data}")
    
    # 假设Arduino输出为逗号分隔格式,例如:"4,101,0.23,-0.15,0.98,0.5,1.2,2.1"
    # 请根据实际硬件输出的分隔符、字段顺序调整以下解析逻辑
    if raw_data:
        try:
            # 分割字符串为单个字段
            fields = raw_data.split(',')
            # 转换各字段为对应数值类型
            sensor_id = int(fields[0])
            sample_count = int(fields[1])
            accel_x = float(fields[2])
            accel_y = float(fields[3])
            accel_z = float(fields[4])
            gyro_g1 = float(fields[5])
            gyro_g2 = float(fields[6])
            gyro_g3 = float(fields[7])
            
            # 将单条数据存入列表
            sensor_records.append([sensor_id, sample_count, accel_x, accel_y, accel_z, gyro_g1, gyro_g2, gyro_g3])
        except (IndexError, ValueError) as e:
            print(f"数据解析失败: {e}")
    
    k += 1

# 将列表转换为NumPy数组
sensor_np_array = np.array(sensor_records)
print("\n转换完成的NumPy数组:")
print(sensor_np_array)
print(f"数组维度: {sensor_np_array.shape}")

# 关闭串口连接
ser45.close()

关键注意事项

  • 编码匹配:确保decode('utf-8')与Arduino端的字符编码一致,若硬件输出为其他编码需对应调整
  • 格式适配:必须根据Arduino实际发送的数据格式(比如分隔符、字段数量、顺序)修改split参数和字段提取逻辑,这是解析成功的核心
  • 异常防护:加入try-except块捕获解析时的索引越界、类型转换错误,避免程序因异常数据直接崩溃
  • 类型优化:转换NumPy数组时可通过dtype指定存储类型(如dtype=np.float32),减少内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:20