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

求助:如何通过串口采集数据并导入RRDTool实现O₂读数可视化

解决方案步骤

一、串口数据采集(Python入门示例)

新手优先用Python实现,无需编译,上手快。首先安装串口操作库:

pip install pyserial

以下是基础采集代码,需根据你的氧气分析仪输出格式调整解析逻辑:

import serial
import time
import subprocess

# 串口参数务必匹配分析仪说明书(端口、波特率等)
ser = serial.Serial(
    port='/dev/ttyUSB0',  # Windows系统可能为'COM3'/'COM4'
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)

try:
    while True:
        # 读取串口一行数据并转成字符串
        raw_data = ser.readline().decode('utf-8').strip()
        if raw_data:
            # 示例:假设分析仪输出格式为 "O2:21.3%",提取数值
            if 'O2:' in raw_data:
                o2_value = float(raw_data.split(':')[1].replace('%', ''))
                print(f"当前O₂浓度: {o2_value} %")
                # 直接调用RRDTool写入数据(下文会讲数据库初始化)
                subprocess.run(
                    ['rrdtool', 'update', 'o2_monitor.rrd', f"N:{o2_value}"],
                    check=True
                )
        time.sleep(60)  # 每分钟采集一次,可按需调整
except KeyboardInterrupt:
    ser.close()
    print("串口已关闭")

如果分析仪输出纯数值(比如直接返回"21.3"),去掉字符串解析逻辑,直接o2_value = float(raw_data)即可;若出现乱码,尝试把decode('utf-8')换成decode('ascii')。

二、RRDTool数据库初始化

先安装RRDTool:

  • Debian/Ubuntu:sudo apt install rrdtool
  • CentOS/RHEL:sudo yum install rrdtool
  • Windows:下载官方安装包手动配置环境变量

执行以下命令创建适配5小时数据的数据库:

rrdtool create o2_monitor.rrd \
    --step 60 \  # 采样间隔60秒(1分钟)
    DS:o2:GAUGE:120:0:100 \  # 数据源:o2为实时值,120秒无数据标记为未知,范围0-100%
    RRA:AVERAGE:0.5:1:300 \  # 归档:每分钟平均值,存300条(刚好5小时)
    RRA:MAX:0.5:1:300 \      # 归档:每分钟最大值
    RRA:MIN:0.5:1:300        # 归档:每分钟最小值

三、生成5小时趋势图表

执行以下命令生成PNG格式的趋势图:

rrdtool graph o2_trend.png \
    --start -3600*5 \  # 从5小时前开始统计
    --title "O₂浓度5小时趋势图" \
    --vertical-label "O₂浓度 (%)" \
    --width 800 --height 400 \
    DEF:o2_avg=o2_monitor.rrd:o2:AVERAGE \
    DEF:o2_max=o2_monitor.rrd:o2:MAX \
    DEF:o2_min=o2_monitor.rrd:o2:MIN \
    LINE2:o2_avg#0000FF:"平均浓度" \
    LINE1:o2_max#FF0000:"最高浓度" \
    LINE1:o2_min#00FF00:"最低浓度" \
    GPRINT:o2_avg:LAST:"当前值\: %6.2f %%" \
    GPRINT:o2_avg:AVERAGE:"平均值\: %6.2f %%" \
    GPRINT:o2_max:MAX:"最大值\: %6.2f %%" \
    GPRINT:o2_min:MIN:"最小值\: %6.2f %%"

实用提示

  • 若要持续运行采集脚本,Linux可配置systemd服务,Windows可添加到任务计划程序。
  • 串口连接前务必确认分析仪的通信参数(波特率、奇偶校验等),参数不匹配会导致读取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:28