树莓派接入4-20mA变送器实战指南:从引脚图到工业信号采集
你有没有遇到过这样的场景?手头有个高精度的工业级压力传感器,输出是4-20mA电流信号,想用树莓派做数据采集和远程监控——结果发现,树莓派根本读不了模拟信号,更别说直接接电流了。
这不是你的问题,而是设计上的天然鸿沟:一边是工业现场坚固耐用、抗干扰强的4-20mA标准;另一边是消费级嵌入式系统如树莓派,虽然计算能力强、接口丰富,但连一个模拟输入引脚都没有。
那怎么办?放弃吗?当然不。本文就带你一步步打通这条“数字世界”与“工业现场”的桥梁。我们不会堆砌术语,也不会甩一张复杂的电路图让你自己琢磨。相反,我会像一位老工程师坐在你旁边一样,从最基础的树莓派4B引脚功能图讲起,手把手教你如何安全、可靠地把4-20mA变送器接入树莓派,并实现精准读数。
为什么工业都爱用4-20mA?它比电压强在哪?
在深入硬件连接之前,先搞清楚一个问题:为什么非得折腾4-20mA这么麻烦的东西?不能直接给个0~5V电压吗?
答案很简单:稳定性 + 可靠性 + 故障检测能力。
想象一下工厂车间,几十米甚至上百米的电缆穿行在电机、变频器、高压设备之间。如果你用0~5V电压传信号,哪怕有一点电磁干扰,采样值可能就跳了几百毫伏,误差大得没法看。
而4-20mA不一样:
- 它是电流驱动,线路阻抗变化不影响信号(只要电源够劲);
- 4mA代表“最小值”,不是0mA——这意味着如果断线或设备掉电,电流会降到0,系统立刻知道“出事了”;
- 长距离传输(几百米甚至上千米)也能保持精度;
- 多数采用两线制,既供电又传信号,布线简单。
所以,你在石油、化工、水处理、暖通空调等领域看到的绝大多数传感器,都是4-20mA输出。
但这也带来一个问题:树莓派GPIO只能处理3.3V数字电平,怎么敢碰这种工业回路?
别急,关键就在于“隔离”和“转换”。
看懂树莓派4B引脚图:你的第一张地图
拿到一块树莓派4B,正面那个40针排母就是所有外设连接的生命线。这张“地图”决定了你能怎么扩展功能。
别被名字绕晕:BCM编号 vs 物理编号
你会看到两种编号方式:
-物理引脚号(Pin Number):从1开始数,按位置排列。
-BCM编号(GPIOxx):Broadcom芯片内部通道号,编程时要用这个。
比如你想用I2C通信,就得找标着SDA1和SCL1的引脚——它们对应的是:
- GPIO2 → SDA1(数据线)
- GPIO3 → SCL1(时钟线)
这两个引脚就在物理第3脚和第5脚上。
还有几个必须记住的关键引脚:
-3V3:提供3.3V电源,可为小模块供电(最大50mA左右);
-GND:接地,至少有6个地脚可供选择;
-5V:来自USB电源,不稳定,建议外部稳压后再用。
⚠️血的教训提醒:千万不要把外部24V接到任何标有“GPIO”的引脚!轻则烧IO,重则SoC报废。
所以我们的策略很明确:让树莓派只负责“读数字”,其他事情交给专用模块去办。
如何把“电流”变成“电压”?核心在于一个电阻
既然树莓派不能读电流,那就把它变成能读的——电压。
这就是所谓的I/V 转换(电流转电压),原理极其简单:欧姆定律 $ V = I \times R $。
假设我们放一个250Ω 精密电阻在4-20mA回路中:
| 电流 | 电压 |
|---|---|
| 4mA | 4 × 0.001 × 250 =1.0V |
| 20mA | 20 × 0.001 × 250 =5.0V |
于是,1V ~ 5V 的电压就出现在这个电阻两端,接下来只要测量这个电压,就能反推出原始电流。
但这还不是终点——因为树莓派依然不能直接测模拟电压!
树莓派没有ADC?那就外挂一个:ADS1115登场
没错,树莓派4B本身没有内置ADC(模数转换器),但它支持I2C、SPI等总线协议,可以轻松外接高精度ADC芯片。
其中最受欢迎的就是TI出品的ADS1115。
为什么选ADS1115?
- ✅ 16位分辨率(比很多单片机自带的10位ADC还高)
- ✅ 支持4路单端或2路差分输入
- ✅ 内置PGA(可编程增益放大器),量程灵活
- ✅ I2C接口,仅需两根线即可通信
- ✅ 工作电压兼容3.3V,完美匹配树莓派
- ✅ 开源Python库完善,几分钟就能跑通
更重要的是,它的典型应用之一就是配合4-20mA信号调理电路使用。
实战接线:一步一步搭建完整链路
现在我们来组装整个系统。记住一句话:高压归高压,低压归低压,中间要有“翻译官”。
元件清单
| 名称 | 数量 | 说明 |
|---|---|---|
| 树莓派4B | 1台 | 主控板 |
| 4-20mA变送器(如温度/压力) | 1个 | 输出工业电流信号 |
| 外部24V直流电源 | 1个 | 给变送器供电(不可省!) |
| 250Ω ±0.1%金属膜电阻 | 1个 | 用于I/V转换 |
| ADS1115模块 | 1个 | 模数转换核心 |
| 杜邦线若干 | —— | 连接各部件 |
接线步骤详解
第一步:构建电流环
[24V+] ----+---- [4-20mA变送器 +] | [保险丝(可选)] | [24V-] <---+---- [4-20mA变送器 -] ----+---- [250Ω电阻] ---- [GND of 24V电源] ↑ 此处取电压 → 接ADS1115 AIN0⚠️ 注意:
- 变送器由24V独立供电,不要试图用树莓派的5V或3.3V供电!
- 250Ω电阻一端接变送器负极,另一端接地(即24V电源负极);
- 电压从电阻两端取出,正端接ADC输入,负端接GND。
第二步:连接ADS1115到树莓派
| ADS1115引脚 | 接树莓派引脚 | 功能 |
|---|---|---|
| VDD | 3V3 | 模块供电 |
| GND | GND | 共地 |
| SCL | GPIO3 (SCL) | I2C时钟 |
| SDA | GPIO2 (SDA) | I2C数据 |
| ADDR | GND | 设置I2C地址为0x48 |
📌 提示:确保树莓派已启用I2C接口:
sudo raspi-config # → Interface Options → I2C → Yes安装必要库:
sudo apt update sudo apt install python3-smbus i2c-tools pip3 install adafruit-circuitpython-ads1x15检查是否识别到设备:
i2cdetect -y 1应能看到48地址出现。
Python代码实战:实时读取电流并换算工程值
下面这段代码不仅能读电压,还能自动转成电流,并判断是否正常。
import time import board import busio from adafruit_ads1x15.ads1115 import ADS1115 from adafruit_ads1x15.analog_in import AnalogIn # 初始化I2C总线 i2c = busio.I2C(board.SCL, board.SDA) # 创建ADS1115对象(默认地址0x48) ads = ADS1115(i2c) # 设置采样率和增益 ads.data_rate = 860 # 最高速度860SPS ads.gain = 1 # ±4.096V量程(适合1~5V输入) # 创建模拟输入通道(AIN0-GND) chan = AnalogIn(ads, 0) # AIN0 对应P0 print("开始采集4-20mA信号...") print("电压(V)\t\t电流(mA)\t状态") while True: voltage = chan.voltage # 单位:伏特 current = (voltage / 250.0) * 1000 # I = V/R × 1000 → mA # 判断状态 if current < 3.8: status = "❌ 断线或故障" elif current > 20.5: status = "⚠️ 超量程" else: status = "✅ 正常" print(f"{voltage:.3f}V\t\t{current:.2f}mA\t{status}") time.sleep(1)运行效果示例:
电压(V) 电流(mA) 状态 1.203V 4.81mA ✅ 正常 3.750V 15.00mA ✅ 正常 0.000V 0.00mA ❌ 断线或故障你可以进一步将电流映射为实际物理量,例如:
# 假设4mA对应0℃,20mA对应100℃ temperature = (current - 4.0) * (100 / 16) print(f"当前温度: {temperature:.1f}℃")常见坑点与调试秘籍
别以为接完线就能万事大吉。以下是新手最容易踩的几个坑:
❌ 问题1:电压始终为0或接近0
排查方向:
- 是否忘了接24V电源?
- 变送器是否需要单独供电(三线制)?
- 250Ω电阻是否虚焊或阻值错误?
🔧 秘籍:用电压表直接测电阻两端,确认是否有1~5V压降。
❌ 问题2:电压超过5V,ADS1115报警甚至损坏
原因:某些变送器负载电压上限较低,当供电24V、压降过大时可能导致输出异常。
💡 解决方案:
- 改用100Ω采样电阻 → 输出0.4V~2.0V,更安全;
- 或改用带过压保护的信号隔离模块(推荐用于工业环境)。
❌ 问题3:读数跳动剧烈、噪声大
原因:工业现场电磁干扰严重,导线如同天线。
🛠 应对措施:
- 在ADS1115输入端加RC低通滤波:串联10kΩ电阻 + 并联100nF电容到地;
- 使用屏蔽双绞线连接变送器;
- 将24V电源与树莓派电源物理隔离。
✅ 高阶玩法:加一级隔离保命
如果你的应用环境恶劣(强电、雷击风险、长距离),强烈建议加入信号隔离模块,例如:
- AMC1200:隔离型ΔΣ调制器,直接替换采样电阻;
- HX-4I系列模块:集成I/V转换+光耦隔离+稳压输出,即插即用;
- 带隔离的DC-DC电源:彻底切断地环路。
这类模块虽然贵一点,但能避免一次烧板子带来的损失。
总结:这套方案到底适不适合你?
这套基于树莓派4B + ADS1115 + 250Ω电阻的4-20mA采集方案,特别适合以下场景:
✅教育实验:学生理解工业信号采集全流程
✅原型开发:快速验证传感器可行性
✅小型自动化项目:楼宇监控、农业温室、水质检测
✅边缘计算前端:本地采集后通过MQTT上传云平台
但它也有局限:
⛔ 不适用于多通道高速采集(I2C速度有限)
⛔ 无原生隔离,需自行增加防护
⛔ 对电源共地要求较高,设计不当易引入噪声
最后一句真心话
技术从来不是孤立存在的。当你真正动手把一根4-20mA的线接到树莓派上,并看到屏幕上跳出第一个“4.02mA”的瞬间,那种连接“现实世界”与“数字系统”的成就感,远比背一百遍理论来得深刻。
而这套方法,正是无数工业物联网项目的起点。
如果你正在尝试类似项目,欢迎留言交流你遇到的问题。也可以分享你是如何校准系统的、用了哪些传感器,我们一起把这条路走得更稳、更远。