ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

树莓派5进车间:六大踩坑记录与实用部署方案

树莓派5进车间:六大踩坑记录与实用部署方案

树莓派5进车间,一开始很多人都觉得是玩票。把一块开发板放到加工车间里当看板、做数据采集,听着就挺野。但真把树莓派5装进车间跑三个月后,我得说一句:它是目前性价比最高的边缘数据采集设备之一,同时也是一台专门用来考验工程师耐心的设备。为什么会这么说?因为树莓派5不是为车间设计的。从供电到散热、从中文输入法到GPIO引脚图,再到系统掉电与车间网络,处处都是坑。这篇文章是完整踩坑记录,适合想做车间看板、设备数据采集、本地轻量边缘节点的朋友,也欢迎那些想把树莓派5从“客厅玩具”升级成“生产工具”的人。

1. 卡在供电:树莓派5在车间里的第一道坎

1.1 为什么USB-C供电在车间会频繁假死

树莓派5换成了USB-C供电,官方建议是5V/5A,并且带有USB-PD握手。这个设计在书桌上用原装电源没问题,但到了车间就不一样了。我第一次把树莓派5装进电柜旁边,同一个回路里还挂着空压机和几台机床。空压机一启动的瞬间,树莓派5直接黑屏重启,重启后又正常,过一会儿再来一次。一开始我还怀疑系统镜像有问题,后来用万用表测电压才明白,是供电扛不住。

车间电网和大楼办公室电网完全是两种东西。大功率电机启动瞬间会把电压拖低,持续几百毫秒甚至更久。树莓派5的USB-PD握手对电压非常敏感,电压一跌落,握手就断了,相当于手机充着电时充电协议被重置,系统为了保护存储和硬件,立刻触发重启。更隐蔽的是,有些便宜电源适配器虽然写了5V/5A,但线材太细,带载后实际到板端电压只有4.6V,树莓派5也容易出现莫名其妙的行为。判断方法不复杂,直接在5V和GND测试点上用万用表盯着看,或者打开日志查有没有电压告警。树莓派5的日志里出现和“voltage”相关的警告时,先别怀疑系统,先怀疑供电。

1.2 我的供电改造方案

折腾一圈之后,我把“原装电源适配器”这个思路彻底抛弃了。车间柜子里最可靠的供电方式,是直接从DIN导轨上取电,走一个5V/5A的工业开关电源。操作上可以买一条Type-C供电端子线,或者用PD诱骗器加Type-C头自己压接,总之就是把USB-PD那套协议绕过去,让树莓派5直接吃干净的5V。

这里有三条经验值得记。

第一,供电回路必须单独拉。不要和电机、接触器、变频器共用一路空气开关,哪怕麻烦一点,也要从控制柜里找个相对干净的接线排取电。我在现场实测同一个回路里空压机启动时电压会跌到4.5V,单独回路后稳定在5.02V。第二,线要用粗的,0.75平方毫米以上,长度控制在两米以内。USB-PD对压降很敏感,线越长越容易出问题。第三,如果预算允许,在树莓派5前面串一个小型断电保持模块,相当于一个大电容阵列,能抗住几十毫秒的电压跌落。这样即使电网闪断,树莓派5也能撑过最危险的瞬间,不会因为掉电把文件系统写坏。

有人问过我用POE供电行不行。行,但真不建议。树莓派5峰值功耗接近12W,普通POE分离器只有5V/2A或5V/3A,要么降频,要么欠压。真要上POE就得搞POE++,成本比树莓派5本身还贵。车间场景我最终选的就是工业电源加电容保持模块,稳定运行三个月没有因为供电重启过一次。

2. 卡在散热与粉尘:树莓派5在车间的第一条命

2.1 树莓派5的发热量和车间粉尘加起来等于麻烦

树莓派5的性能提升是实打实的,代价就是发热量比前代高了不少。满载状态下,CPU功耗能到12W左右,温度轻松冲破80℃,然后触发降频。这点在书房里无所谓,但在车间就麻烦了。车间里不只有高温,还有粉尘、油雾、金属屑。一开始我用的是官方主动散热器,小风扇靠在CPU上,跑了一个星期左右,散热片的缝隙里就全是灰,风扇转速明显下降,温度比刚装时高了不少。

更危险的是粉尘吸附在裸露的GPIO排针上。金属粉尘一旦落在两个相邻的GPIO引脚之间,轻则信号乱跳,重则短路烧引脚。我见过一次继电器莫名其妙乱动作,排查到最后,就是排针上落了一小撮金属碎屑。所以散热策略不能只想着“压温度”,还要想着“防进灰”。

2.2 我用的散热组合和温控脚本

后来我把散热方案改成了三层:全金属外壳做被动散热,内部用导热硅胶垫把CPU热量导到铝壳上;机箱侧面的进风口加上一层2mm厚的粗效滤棉;一个小型5V风扇对着外壳吹,不直接吹电路板。这套组合的好处是风扇基本不吸灰,因为空气经过滤棉才进机箱,而且风扇是吹机壳不是吹板子,金属屑不会被卷到芯片上。

温度控制我写了个简单脚本,用Python读取CPU温度,超过58℃就开风扇,低于45℃就关掉。虽然树莓派5自带风扇控制,但车间环境里我还是更愿意自己掌握开关逻辑,免得风扇一直转,没几天就堵死。脚本长这样:

from gpiozero import OutputDevice import subprocess import time fan = OutputDevice(17) while True: temp_str = subprocess.check_output(["vcgencmd", "measure_temp"]).decode() temp = float(temp_str.split("=")[1].split("'")[0]) if temp > 58: fan.on() elif temp < 45: fan.off() time.sleep(20)

跑了一个夏天,树莓派5的CPU温度基本稳定在52℃到61℃之间,没有再触发降频。换滤棉的周期大概是三个月一次,打开外壳看一眼,滤棉黑了就换。如果是油雾特别重的车间,滤棉消耗会快很多,可以改成一个月一换。

3. 卡在中文输入:给老师傅配输入法比写业务代码还费劲

3.1 车间看板需要中文录入,默认拼音不够用

我做的看板系统要在触摸屏上让老师傅填故障记录,比如“主轴异响”“刀库卡刀”“漏油”这些短句。树莓派OS自带的输入法是ibus-pinyin,默认安装完不怎么好用,候选词顺序怪,词库也旧。老师傅本来就对触摸屏打字不熟悉,如果输入法还别扭,项目就很难往下推。

第一步得先把中文字体装好,不然桌面上全是方框。apt装一个fonts-noto-cjk就能解决。然后要把系统locale切成zh_CN.UTF-8,这个不做,很多中文输入法框架会在半中半英的状态下出奇怪问题。

然后是输入法框架的选择。树莓派OS默认集成了ibus,但很多中文输入法是为fcitx开发的,尤其是搜狗输入法,历史上是绑定fcitx框架的。我的建议是不要混装ibus和fcitx,否则两个框架会抢快捷键,切换输入法时经常无响应。既然目标是搜狗系体验,那就统一走fcitx5。

3.2 树莓派5安装搜狗输入法:一场依赖修罗场

热词榜上那个“树莓派5安装搜狗输入法”,我确实硬刚过,结果不算理想。搜狗官方Linux版deb包主要面向x86桌面发行版,想在树莓派5的arm64架构上跑,首先会卡在包架构不匹配。就算找到ARM移植版,还会卡在fcitx版本和依赖缺失上。

我的实际经历是这样的:先下载了搜狗的deb包,执行dpkg -i,系统直接抛出一长串依赖错误。然后跑apt -f install,又拉了一堆fcitx4的老库,装完发现输入法托盘图标根本没有出现。折腾半天,最后勉强能切到中文,但Ctrl加空格经常失灵,还和系统自带的ibus打架。老实讲,那体验还不如直接老老实实用fcitx5。

所以我最终的方案是:放弃在树莓派5上硬刚搜狗输入法,改用fcitx5加自带的pinyin输入法。安装命令很干净:apt安装fcitx5、fcitx5-chinese-addons。装完重启,在设置里选pinyin,再把默认输入法切到fcitx5,开机自动启动。词库虽然不如搜狗那么智能,但通过导入词库文件把车间常用术语加进去,老师傅打“主轴”、“异响”这些词就方便多了。如果你一定要用搜狗,可以找第三方的ARM打包版本试,但不要把这套方案用在生产环境里,哪天依赖崩了,车间现场等着你救火,那压力真不小。

4. 卡在引脚图:树莓派5的GPIO接线翻车现场

4.1 40Pin引脚图看似一样,细节全不一样

树莓派5的40Pin排针从物理布局上看,和树莓派4几乎一模一样,左上角是3V3,中间一堆GND,右侧是5V。但软件层面的变化非常大。最明显的是wiringPi库在树莓派5上不好用了,很多老教程里的“GPIO 0对应物理针脚11”这种说法在树莓派5上会把人带沟里去。真正有用的还是树莓派官方的BCM编号,或者直接用gpiozero这类库,按BCM编号操作就行。

我的建议是打印一张树莓派5引脚图贴在机柜门内侧。接线时看一眼,比什么教程都好用。这张图不复杂,常见引脚就那么几个,我把自己常用的列出来:

物理针脚BCM编号车间里的用途
13V3给传感器供电(小电流)
25V给继电器模块供电
45V备用电源
11GPIO17风扇启停控制
13GPIO27DS18B20温度传感器数据
15GPIO22继电器控制
29GPIO5备用输入
31GPIO6备用输入
6/9/14/20/25/30/34/39GND公共地

这里特别提醒一句,树莓派5的外设控制器换了BCM2712,底层设备树策略和老款有区别。如果你要接摄像头、串口屏或者走I2C外设,尽量先查树莓派5对应的设备树设置,不要直接套老教程。

4.2 车间接线的三条纪律

第一,弱电和强电必须分槽走。GPIO线是3.3V/5V的弱电信号,车间里到处是220V甚至380V的强电线路。我的教训是有一段GPIO线直接和变频器输出线平行走了同一个线槽,结果继电器频繁误动作,后来换成屏蔽双绞线并换成独立金属线槽,问题立刻消失。第二,给传感器供电时不要直接从树莓派5的5V引脚拉一大把电。传感器用DC-DC隔离模块单独供电,再和树莓派5共地。否则车间里复杂的接地回路会形成电势差,烧GPIO口是常有的事。第三,接线前一定用万用表蜂鸣档确认引脚位置。我翻过一次车,明明写的是物理针脚15,结果线插到了16,程序跑起来没反应,排查了半天,最后用万用表一量才发现错了一格。

另外,车间里裸露的GPIO排针一定要保护起来。可以用排针保护帽,或者直接电工胶带封住不用的针脚。我之前说过的金属屑导致继电器乱动作,就是排针惹的祸。这个细节看上去不起眼,但在粉尘车间里属于高发问题。

5. 卡在系统稳定性:SD卡、日志、掉电和看门狗

5.1 树莓派5最怕的不是CPU过热,而是SD卡掉盘

树莓派5一直在跑看板应用,每天产生的日志和地方数据不算多,但车间里有一个隐藏杀手:频繁的异常断电。每次异常断电,都是对TF卡的一次冲击。工厂里电压闪断很常见,哪怕只是一两百毫秒的跌落,TF卡就可能出现文件系统异常。我第一台车间机用的是一张三线品牌的高速TF卡,跑了不到一个月就出现了“只读文件系统”的提示,重启也没用,最后只能换卡重刷。

后来我把系统盘换成了USB3.0固态U盘。树莓派5的USB3.0接口性能比树莓派4好很多,系统装在上面启动快,关键是固态U盘不像TF卡那样一掉电就脆,稳定性提升了一个量级。如果你的项目已经稳定在TF卡上,强烈建议做个镜像备份,然后迁移到USB固态启动。

系统盘之外,日志策略也要改。默认情况下,系统日志会持续写入SD卡或U盘,时间长了会产生大量碎片。我把journald改成volatile模式,让日志写到内存里,再通过定时任务每天把关键日志打包传到车间服务器。这样既保留现场记录,又减少存储写入压力。生产数据单独挂一个数据分区,用noatime挂载,避免无谓的元数据更新。

5.2 掉电保护与看门狗配置

硬件上我给树莓派5加了断电检测信号。具体做法很简单:用一个中间继电器的常开触点接在GPIO上,控制柜断电时触点断开,树莓派5收到GPIO下降沿后立即执行安全关机命令,配合前面说的电容保持模块,能在断电后的几秒内完成文件系统卸载。这样处理之后,我手上这台树莓派5经历了四五次车间意外断电,没有再出现过文件系统损坏。

软件看门狗也要配上。树莓派5的内核里有硬件看门狗驱动,加载之后可以让systemd每隔一段时间检查系统状态,如果系统无响应,硬件看门狗会强制重启。我在系统服务里加了两行配置:

[Service] WatchdogSec=15s Restart=always

这个配置的意思是:如果服务15秒内没有状态更新,看门狗就认为系统卡死,自动重启。对于无人值守的车间看板来说,这个兜底非常重要。应用层和系统层都崩了,只要硬件还在通电,树莓派5就能自己恢复。

最后是应用开机自启。看板程序写成systemd服务,设置Restart=always,开机自动拉起。这样师傅们早上进车间按一下电源按钮,看板程序自己就起来了,不需要任何人去点鼠标。

6. 卡在车间网络:别把外网那套思维带进来

6.1 树莓派5的网络到底怎么规划

很多搞IT的人拿到树莓派5,第一反应是查WiFi能不能连上。但车间环境里,WiFi是最不靠谱的选项。机床是金属机身,对无线信号屏蔽严重,变频器和电机还会产生电磁干扰,5GHz信号在车间里衰减得非常快,2.4GHz虽然穿墙好一点,但频段里全是工业设备的干扰源。

我的选择是优先走有线以太网。树莓派5自带千兆口,直接插到车间交换机上,配一个静态IP,稳定又简单。网线也要用工业级超五类或六类屏蔽双绞线,最好走金属线槽。如果设备位置不方便拉线,宁可加一个工业级无线AP,把树莓派5放在AP旁边,也不要指望内置WiFi穿到车间另一头。

网络拓扑上,我把树莓派5放进了一个专门给边缘设备的VLAN。车间里PLC、数控系统、上位机都在同一个大网段,广播报文很多,树莓派5如果直接扔进去,SSH会时不时断流。后来在交换机上做了端口隔离和风暴抑制,问题才解决。树莓派5只和车间服务器、数据采集网关通信,其他设备的请求一概不理会。

6.2 离线安装包、SSH和防火墙

车间环境很多上不了外网,这不影响部署。关键是在开发环境里提前准备好离线安装包。用apt下载好需要的deb包,确实可以用“apt download”或者“apt-get install --download-only”把包抓下来,然后拷到U盘,带到车间机上用dpkg安装。依赖关系能折腾一阵,但胜在没有网络也能装环境。我自己是直接把一台树莓派5做成模板机,把常用的开发工具、输入法框架、看板依赖全装好,然后做成镜像,车间机一键刷入就行。

安全方面,SSH千万不要用密码登录。车间网络内部人员杂,万一密码泄露,树莓派5就成了内网跳板。改成密钥登录,并且把SSH端口限制在管理网段。防火墙用ufw,默认拒绝所有入站,只放行SSH和本地业务端口,比如MQTT的1883端口:

sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp sudo ufw allow 1883/tcp sudo ufw enable

排查网络问题的时候,步骤也很固定:先看ip a,确认地址有没有拿到;再ping网关,确认二层三层通不通;如果网关都通但不通业务,就要检查交换机端口隔离和防火墙规则。这套流程就算交给刚接触树莓派5的人,照着做也能快速定位。

7. 写在最后:如果让我再装一次

如果让我再装一次树莓派5进车间,我会把第一台开发机和生产机彻底分开。开发机随便折腾,装什么输入法、改什么GPIO都无所谓;生产机从头到尾只跑一套固定镜像,所有软件版本锁定,配置文件全部放到版本仓库里。这样就算某台树莓派5被师傅踢坏了、被灰尘堵死了,换一台新机,刷镜像,十分钟恢复到一模一样的状态。

车间里做IT项目,和办公室完全不同。办公室追求快速迭代,车间追求稳定和可维护。树莓派5确实是个好东西,但能不能在生产环境里跑起来,不取决于性能参数,而取决于供电、散热、输入法、GPIO接线、系统稳定性和网络规划这六件事。我现在的体会是,把这六件事当基础设施来做,树莓派5能比很多昂贵的工控机更亲民,也更好用。后面我再做新车间部署时,已经打算把这套流程整理成自动刷机脚本,写好了再来分享。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进