
你用Python跑树莓派、边缘工控机做传感器数据采集时,是不是经常碰到选的工具要么占内存太高跑俩礼拜就死机,要么实时性不够漏采关键数据?
实测参数不玩虚的
我在树莓派4B(1G内存版)上,用同样10Hz采样率读Modbus温湿度传感器,连续跑24小时测了三种最常用实现方案的稳定数据:
- 原生串口/网口轮询:CPU占用稳定在2%-3%,常驻内存11M,自行实现异常捕获的前提下丢包率约0.2%,无第三方多余依赖。
- Paho-MQTT + PySerial组合:CPU占用7%-9%,常驻内存26M,自带QoS消息重传,丢包率<0.01%,端到端上报延时12-35ms。
- EdgeX Python SDK:CPU占用21%-25%,常驻内存118M,内置多协议适配、规则引擎、设备自动发现,丢包率为0但冷启动耗时超过8秒。
选对方案不浪费性能
不存在通吃所有场景的最优方案,按自己的需求对号入座就行:
- 做电池供电的野外低功耗采集节点,比如森林防火、农田监测的单点设备,直接选原生轮询方案,少装一个依赖就多一周续航,核心代码甚至可以短到十几行:
import serial, time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
while True:
if data := ser.readline().strip():
with open('data.log', 'a') as f:
f.write(f'{int(time.time()*1000)},{data.decode()}\n')
time.sleep(0.1)
- 50个节点以内的小型设备集群,需要稳定上报云端,选Paho-MQTT+PySerial组合就行,生态成熟踩坑资料多,不用自己写消息重传、离线缓存逻辑,开发效率高。
- 中大型工业网关场景,需要同时接Modbus、OPC UA、CAN等多类协议,还要做本地阈值告警、数据预处理,再考虑用EdgeX这类重型框架。
别信网上“一套框架通吃所有场景”的说法,我之前拿EdgeX跑单节点大棚温湿度采集,整体功耗比原生方案高3.7倍,跑了18天树莓派的TF卡就因为持续高负载读写挂了。
评论一下?