求助:如何通过串口采集数据并导入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
相关产品推荐
相关产品推荐

