第2章:Linux工控网关硬件选型:树莓派、RK3588、x86工控机对比,GPIO与串口扩展
做工业物联网网关,硬件选型是第一道坎。很多朋友一上来就问我:「到底用树莓派行不行?」我的回答通常是:看场景。但别急着下单,咱们先把这三类主流平台掰开揉碎了聊。
我个人习惯把工控网关的硬件需求分成三层:算力层、接口层、可靠性层。算力决定你能跑多少协议栈,接口决定你能接多少设备,可靠性决定你能在产线上撑多久。下面这张图能帮你快速建立整体认知。
3.1 树莓派:原型验证的利器,但别太当真
树莓派在工控圈的名声,说实话有点被神化了。我见过不少团队拿树莓派直接上产线,结果三个月后SD卡坏了,系统起不来。嗯,这里要泼盆冷水——树莓派适合做原型验证和教学,但不适合7×24的工业环境。
先看优点:
- 生态成熟:社区资源丰富,GPIO库(RPi.GPIO、wiringPi)随手可得
- 成本极低:树莓派4B 2GB版本不到400元,适合预算有限的教学场景
- 功耗低:典型功耗5-7W,不需要主动散热
再看硬伤:
- SD卡可靠性差:工业环境震动+频繁写入,SD卡很容易挂。我曾经有个项目,树莓派跑了两个月,SD卡突然只读了,现场工程师差点骂娘
- 实时性不足:没有硬件RTC,时间同步依赖NTP;GPIO中断响应延迟不稳定,做高速Modbus轮询容易丢包
- 接口有限:原生只有1路UART(mini UART性能还拉胯),扩展多路串口必须靠USB Hub
3.2 RK3588:ARM阵营的「六边形战士」
RK3588是瑞芯微的旗舰芯片,4个A76大核+4个A55小核,算力比树莓派高了不止一个档次。我去年给一个光伏电站做数据采集网关,用的就是RK3588方案,跑了6个Modbus RTU主站+1个OPC UA服务器,CPU占用率才30%左右。
它的核心优势:
- 多核异构:大核跑协议栈,小核跑管理任务,互不干扰
- 接口丰富:原生支持5路UART、3路SPI、4路I2C,扩展串口不用堆USB Hub
- NPU加持:6 TOPS算力,可以做边缘AI推理(比如设备振动分析)
- 视频编解码:支持4K@60fps的H.265编解码,适合带摄像头质检的场景
但也不是没缺点:
- 开发资料偏少:相比树莓派,社区资源没那么丰富,很多坑得自己踩
- 散热压力大:满载功耗15-20W,必须加散热片和风扇
- 成本中等:核心板+底板大约600-1000元,比树莓派贵但比x86便宜
3.3 x86工控机:工业级的「老黄牛」
说到x86工控机,很多搞嵌入式的朋友会觉得「太笨重了」。但你想想看,工厂产线上的PLC、DCS系统,哪个不是x86架构?工业场景要的不是花哨,是稳定。
我参与过一个钢铁厂的项目,环境温度45°C,粉尘大,震动强。树莓派和RK3588都试过,撑不过一周。最后换了研华的x86工控机,配工业级SSD和冗余电源,三年没出过问题。
x86工控机的核心优势:
- 生态最成熟:Windows/Linux随便装,驱动齐全,OPC UA、Modbus库随便选
- 扩展性最强:PCIe插槽可以插多串口卡、CAN卡、数据采集卡
- 可靠性最高:工业级宽温设计(-20°C~70°C),MTBF通常超过10万小时
- 实时性可控:配合PREEMPT-RT内核或INTime,可以实现微秒级响应
缺点也很明显:
- 功耗高:典型功耗30-60W,需要主动散热
- 体积大:标准4U机箱占地方,对安装空间有要求
- 成本高:入门级也要2000元以上,高端配置上万
3.4 三平台核心参数对比
下面这张表是我自己整理的,方便你快速决策:
| 对比维度 | 树莓派4B/5 | RK3588 | x86工控机 |
|---|---|---|---|
| CPU架构 | ARM Cortex-A72/A76 | 4×A76 + 4×A55 | Intel Celeron/Core |
| 主频 | 1.8GHz / 2.4GHz | 2.4GHz (A76) | 2.0~4.0GHz |
| 内存 | 1~8GB LPDDR4 | 4~16GB LPDDR4X | 4~64GB DDR4/DDR5 |
| 原生UART | 1路(mini UART) | 5路 | 2路(需扩展卡) |
| GPIO数量 | 26个(3.3V电平) | 40个(3.3V电平) | 无原生GPIO(需IO卡) |
| 典型功耗 | 5~7W | 15~20W | 30~60W |
| 工作温度 | 0~50°C | -10~60°C | -20~70°C |
| 成本(入门) | 300~500元 | 600~1000元 | 2000~5000元 |
| 适用场景 | 原型验证、教学 | 中等规模数据采集 | 工业级7×24部署 |
3.5 GPIO与串口扩展实战
不管选哪个平台,最终都要面对一个问题:怎么接设备?工控网关最常见的接口就是GPIO(数字量输入输出)和串口(RS232/RS485)。
3.5.1 GPIO扩展方案
树莓派和RK3588都自带GPIO,但电平是3.3V,工业设备通常是24V。直接接会烧IO口,必须做电平转换或加光耦隔离。
我常用的方案:
- 光耦隔离模块:比如EL354,输入侧24V,输出侧3.3V,隔离电压3750V。适合数字量输入
- 继电器输出模块:比如SRD-05VDC-SL-C,用GPIO控制继电器,再去驱动24V设备。适合数字量输出
- I2C/SPI扩展GPIO:用MCP23017(I2C接口)或MCP23S17(SPI接口),一个芯片扩展16个GPIO
3.5.2 串口扩展方案
串口是Modbus RTU的物理层。树莓派只有1路UART,RK3588有5路,x86工控机通常只有2路。但实际项目中,你可能需要8路、16路甚至更多串口。
扩展方案对比:
| 扩展方式 | 最大路数 | 优点 | 缺点 |
|---|---|---|---|
| USB转串口 | 8~16路 | 即插即用,驱动成熟 | USB Hub有延迟,不稳定 |
| SPI转串口 | 8路 | 延迟低,占用资源少 | 需要写驱动,调试麻烦 |
| PCIe多串口卡 | 16~32路 | 稳定可靠,工业级 | 仅x86可用,成本高 |
| 串口服务器 | 不限(网络扩展) | 远程部署,隔离性好 | 增加网络延迟 |
我个人最推荐的是SPI转串口方案,用SC16IS752芯片,一片扩展2路UART,支持硬件流控。在RK3588上我最多挂过4片,扩展出8路RS485,跑Modbus RTU非常稳。
3.5.3 串口扩展代码示例(RK3588 + SC16IS752)
下面是在RK3588上通过SPI挂载SC16IS752的配置示例,设备树覆盖文件:
// sc16is752-overlay.dts
/dts-v1/;
/plugin/;
/ {
compatible = "rockchip,rk3588";
fragment@0 {
target = &spi2;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
sc16is752: sc16is752@0 {
compatible = "nxp,sc16is752";
reg = <0>;
spi-max-frequency = <4000000>;
clocks = <&sc16is752_clk>;
interrupt-parent = <&gpio3>;
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
gpio-controller;
#gpio-cells = <2>;
sc16is752_clk: sc16is752-clk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <14745600>;
};
};
};
};
};
编译并加载后,系统会生成 /dev/ttySC0 和 /dev/ttySC1 两个串口设备。然后你就可以用标准的Linux串口API操作它们了:
# 设置波特率9600,8N1
stty -F /dev/ttySC0 9600 cs8 -cstopb -parenb
# 发送Modbus RTU请求(读取从站1的保持寄存器)
echo -ne '\x01\x03\x00\x00\x00\x02\xC4\x0B' > /dev/ttySC0
# 读取响应
cat /dev/ttySC0 | xxd
3.6 选型决策总结
说了这么多,最后给个简单粗暴的建议:
- 做原型、写课程、搞演示 → 树莓派,便宜够用,坏了不心疼
- 中等规模数据采集(10-50个设备) → RK3588,算力够、接口多、成本可控
- 工业级7×24部署、环境恶劣 → x86工控机,稳定压倒一切