Modbus + MKR WiFi 1010 + RS485 实现用电监测
组件与物料
| Arduino MKR WiFi 1010 | ×1 |
| Arduino MKR 485 Shield | ×1 |
| USB-A 转 Micro-USB 线 | ×1 |
| USB 电源适配器(7-24V,MKR485 自带降压) | ×1 |
| 单对屏蔽双绞线(电话线规格) | ×1 |
必需工具
- 数字万用表(验电必备)
- 电工剪、小一字螺丝刀(MKR485 接线端子)、中十字螺丝刀
应用与在线服务
- Home Assistant
- Arduino Web Editor
- MQTT
项目简介
想让家庭更智能,先从月度账单(电、气)入手。“利国、利民、利己”。开源硬件助力家庭可持续!本方案简单安全,通过 MQTT 集成任意家庭自动化软件(以 Home Assistant 为例)。
概览
选用 Finder 能量计(导轨安装,适配家庭配电箱),自带 RS485 Modbus 接口——工业标准协议,Arduino 官方 MKR485 Shield 配合两个库轻松解析。主控选 MKR WiFi 1010,同款 MKR 外形且自带 WiFi。
硬件安装
警告! 遵守当地电气规范,极度小心,高压致命!不懂请找电工。
- 断开总开关,万用表双重确认无电压。
- 能量计进线端接主开关出线(欧标:蓝=零线,棕/黑/灰=火线),出线端接后续回路。
- RS485 接线:A、B、COM。MKR485 支持全双工,额外有 Y、Z 端子。半双工通讯仅用 Y、Z。COM 接 ISOGND。
- 拨码开关设置:HALF (2→OFF)、Y-Z 终端电阻 (3→ON);第 1 位无影响。终端电阻抑制干扰。
- 合上配电箱,转软件开发。
软件设计
代码需处理三大任务:Modbus 通讯、WiFi 管理、MQTT 协议。使用 ArduinoModbus 库简化 Modbus 交互。读取寄存器需依据仪表数据手册获取功能码、寄存器地址、字长。
Modbus 报文结构示例:01 03 04 00 16 00 02 25 C7
0x01:设备地址0x03:功能码(读保持寄存器)0x04:字节数00 16:寄存器地址00 02:寄存器长度(字,1 字=2 字节)- 后 4 字节:CRC 校验
Arduino 中封装在 if 条件中:
float readCurrent(){
float ampere = 0;
if(!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)){
Serial.print("failed to read voltage! "); Serial.println(ModbusRTUClient.lastError());
}else{
uint16_t word1 = ModbusRTUClient.read(); // 高字
uint16_t word2 = ModbusRTUClient.read(); // 低字
int32_t milliamp = (word1 << 16) | word2; // 合成 32 位有符号整数
ampere = milliamp / 1000.0; // 转安培
}
return ampere;
}
其余电压、功率、电能等同理。剩余代码处理 MQTT 发布和 WiFi 重连。
Home Assistant 集成
配置 MQTT Broker 后,在 configuration.yaml 添加传感器定义:
sensor:
- platform: mqtt
name: "Main Voltage"
state_topic: "energy/main/voltage"
unit_of_measurement: "V"
保存、检查配置、重载 Home Assistant,主页即显示实时测量值及历史图表,可触发自动化。
教程结束,后续可自行扩展功能!
代码
完整桥接代码(Modbus RTU → MQTT)见 GitHub 仓库,专为 Casa Jasmina 监测电费用量开发。
制造工艺
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- 打造可靠的 Arduino 能源监测与数据记录仪——分步指南
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
- Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- 透彻理解动能与势能:公式、形式及生活实例