ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

数据采集卡从入门到精通(39):边缘计算部署——树莓派、系统服务与无人值守

数据采集卡从入门到精通(39):边缘计算部署——树莓派、系统服务与无人值守 实验室的采集系统有人守着产线和野外的采集节点必须自己活。把插着USB线的笔记本变成挂在配电柜里三年不动的监测站需要的是一整套部署工程嵌入式主机选型、Linux服务化、看门狗、远程访问、数据回传。本文给出完整的无人值守方案。全文约4000字。一、为什么边缘计算三个真实需求场景1 车间振动监测站 → 8通道24小时连采, 数据本地FFT, 只回传特征值(谱峰/总振值) → 减少原始数据上传(带宽/存储省99%), 断网时本地照采不误 ★ 场景2 野外光伏电站 → 无线网络不稳定, 节点本地记录断点续传 场景3 产线测试台 → 测试节拍紧凑, 判定必须在本地毫秒级完成, 云端只收结果边缘计算的本质把必须快的控制、判定、记录留在本地把可以慢的分析、汇总、展示放远端。二、边缘主机选型方案算力功耗价格定位树莓派4/54核1.5~2.4GHz3~7W数百元通用王者香橙派/国产派类似类似更低成本敏感工控机( x86)强15~40W千元恶劣环境/ Windows软件遗产树莓派CM4/定制灵活低中嵌入式产品化ESP32等MCU弱1W十元级简单节点(数据卡自带MCU可担纲)选型三问跑什么Pythonnumpy→树莓派级只转发数据→卡自身MCU即可环境多恶劣温度/振动/粉尘→工控机或加固方案功耗预算太阳能供电→低功耗设计逐瓦算。树莓派方案的标配工业级SD卡或SSD——SD卡在连续写入下寿命是头号故障源 优质电源5V/3A电压跌落是树莓派神秘死机的元凶 金属外壳散热EMC。三、系统服务化让程序开机自启、崩溃自拉采集程序不能靠人手ssh进去启动——必须成为系统服务# /etc/systemd/system/daq.service[Unit]DescriptionDAQ MonitorAfternetwork.target[Service]TypesimpleUserdaqExecStart/usr/bin/python3 /opt/daq/main.pyRestartalways# ★ 崩溃自动重启RestartSec5WatchdogSec30# ★ 30s不喂狗→systemd强杀重启StandardOutputappend:/var/log/daq.log[Install]WantedBymulti-user.target# 启用:sudosystemctlenable--nowdaq.servicesudosystemctl status daq两个关键配置Restartalways进程崩溃5秒后自动拉起WatchdogSec配合sd_notify——程序每周期喂狗主循环卡死则强杀重启——第37篇软件看门狗的系统级实现。程序侧喂狗importsystemd.daemonwhileTrue:run_one_cycle()systemd.daemon.notify(WATCHDOG1)# 喂狗四、无人值守的六件套4.1 硬件看门狗最后一道防线软件看门狗防不了内核崩溃。树莓派内置硬件看门狗bcm2835-wdtsudomodprobe bcm2835_wdt# 程序里周期写 /dev/watchdog (不写→整机重启)fopen(/dev/watchdog,w)whileTrue: run_cycle()f.write(1);f.flush()# 喂硬件狗三层看门狗体系业务层超限安全态→systemd层主循环卡死重启进程→硬件层内核死机整机重启——层层兜底无人值守的底气。4.2 存储健康管理SD卡写穿的预防三策日志轮转logrotate限制日志体积、数据分卷每小时新文件自动清理30天前、只读根文件系统overlayfs数据写独立分区——产线级部署的终极方案。# logrotate配置示例/var/log/daq.log{daily rotate7compress missingok}4.3 远程访问SSH密钥登录、禁密码、改端口——公网暴露的基础卫生VPN/WireGuard回内网比暴露端口安全得多远程桌面VNC/RDP调试期用Web面板程序自带简易HTTP页展示状态——最省事的远程看一眼。4.4 数据回传策略分层数据策略: ① 特征值(每分钟几条) → MQTT/HTTP 实时上传 ② 摘要数据(每小时) → 定时批量上传 ③ 原始数据(GB级) → 本地保留N天, 按需拉取/定期淘汰 断点续传: 本地队列上传确认后才删 → 断网一天, 恢复后自动补传 ★4.5 时间同步无人值守节点的时间必须可信时间戳是数据的骨架chrony/ntpd定期对时无网环境用RTC模块DS3231GPS授时野外站。4.6 健康自报告节点定期上报自身状态心跳# 每60s上报一次心跳status{ts:time.time(),uptime:get_uptime(),disk_free_gb:shutil.disk_usage(/).free/2**30,cpu_temp:read_cpu_temp(),daq_frames:frame_counter,# 帧计数(丢帧监测)version:SW_VERSION}mqtt.publish(node/daq01/status,status)# 服务器侧: 心跳超时→告警节点失联心跳里带帧计数与磁盘余量——服务端能提前发现采集在跑但数据异常与存储将满两类慢性病。五、完整部署清单拷贝即用□ 硬件: 树莓派工业SD/SSD金属壳3A电源 □ 系统: Raspberry Pi OS Lite(无桌面省资源) □ 基础: SSH密钥/改端口/静态IP或DDNS □ 服务: daq.service(RestartWatchdogSec) □ 看门狗: 硬件wdt加载程序喂狗 □ 存储: 日志轮转数据分卷空间监控(80%告警) □ 时间: chrony对时 □ 回传: MQTT特征值批量摘要断点续传队列 □ 心跳: 60s自报告(含帧计数) □ 远程: WireGuard回内网 □ 测试: □ 拔网线10分钟→恢复后数据补传✓ □ kill采集进程→5s自重启✓ □ 断电重启→服务自启、采集恢复✓ □ SD写满模拟→清理逻辑触发✓最后四项破坏性测试是无人值守系统的验收标准——没做过这四项测试的系统不能叫无人值守只能叫还没坏过。六、动手实验30分钟搭建最小节点# 1) 服务化(上文daQ.service)sudosystemctlenable--nowdaq.service# 2) 心跳脚本cat/opt/daq/heartbeat.pyEOF import time, socket, shutil, json, urllib.request while True: s {host: socket.gethostname(), ts: time.time(), disk: shutil.disk_usage(/).free//2**30} try: urllib.request.urlopen( http://server:8080/heartbeat, json.dumps(s).encode(), timeout5) except Exception: pass # 断网容忍, 本地继续 time.sleep(60) EOF# 3) 破坏性测试三部曲sudosystemctlkilldaq# ① 杀进程→5s自愈sudoreboot# ② 重启→自启# ③ 拔网线60s再插 → 心跳恢复数据补传七、常见问题FAQQ1树莓派跑采集稳吗系统服务化硬件看门狗工业SD的配置下年重启次数个位数——车间的实际表现合格。省钱的SD卡和山寨电源是两大杀手。Q2数据断网时怎么保证不丢本地优先落盘上传确认后删除的队列模式——“先保住数据再谈传输”。Q3多个节点怎么管理心跳集中监控Nagios/Zabbix/Prometheus配置下发Ansible固件统一版本——节点多了就是运维问题而不是编程问题。Q4卡自带的SRAM/Flash记录仪与边缘主机的分工卡内记录是最后一道本地保险断主机也不丢主机负责分析、回传、联动——两层各有兜底。八、总结边缘部署三句话服务化让程序自愈systemd看门狗三层、存储管理让SD长命轮转分卷空间监控、心跳让远方放心自报告断点续传验收一句话过不了拔网线、杀进程、断电三重破坏测试的节点不算无人值守。工程与部署篇完结下一篇开始三连实战温度监控系统全案。下一篇预告《项目实战一多通道温度监控系统从接线到报表》
返回列表