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

如何使用Python 3捕获Arduino Nano输出到树莓派3的轮询串口数据?

在Python 3中捕获Arduino Nano到树莓派的串口轮询数据

嘿,这事儿不难搞定!你要抓Arduino通过/dev/ttyUSB0发过来的土壤湿度数据,用Python 3的话,最常用的就是pyserial库——专门处理串口通信的工具,能帮你轻松搞定数据捕获。

首先得先安装这个库,打开树莓派的终端,跑这个命令:

pip install pyserial

接下来给你写个实用的示例代码,完全适配你给出的那种连续输出的缓冲区数据:

import serial

# 初始化串口,这里的参数必须和Arduino代码里的串口设置完全匹配!
ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=9600,  # 重点!Arduino里Serial.begin(xxx)的数值要和这个一致,一般默认是9600
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1  # 设置1秒超时,避免程序一直卡着等数据
)

try:
    # 无限循环轮询数据
    while True:
        # 读取串口缓冲区里的所有数据,转成字符串并去掉首尾空白
        raw_data = ser.read_all().decode('utf-8').strip()
        if raw_data:
            # 你的数据是连续拼接的,比如"Soil Moisture = 697 Soil Moisture = 699..."
            # 我们用" Soil"作为分隔符,把每个湿度条目拆出来
            data_entries = raw_data.split(' Soil')
            # 遍历处理每个条目,跳过空字符串
            for entry in data_entries:
                if entry:
                    # 把拆分时去掉的"Soil"补回来,然后打印每条独立数据
                    full_entry = f"Soil{entry}"
                    print(full_entry)
except KeyboardInterrupt:
    # 按Ctrl+C的时候,优雅关闭串口并退出程序
    ser.close()
    print("\n串口已关闭,程序退出")

给你划几个必须注意的点:

  • 波特率必须匹配:如果Arduino代码里写的是Serial.begin(115200),那这里的baudrate也要改成115200,不然会读出一堆乱码
  • 权限问题:如果运行脚本时提示无法访问/dev/ttyUSB0,把你的树莓派用户加入dialout组就行:sudo usermod -aG dialout pi,改完记得重新登录或者重启设备
  • 数据处理逻辑:因为你的串口数据是连续输出拼接在一起的,所以用split(' Soil')拆分每个独立的湿度记录,这样就能把每条数据单独打印出来,不会混在一起

要是你还遇到问题,比如乱码或者读不到数据,先检查串口线有没有插好,Arduino的串口设置是不是和代码里的一致,一般都能解决~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:18