开源地址:GitHub - chen1880/esp8266_modbus: esp8266_modbus
工具下载
串口工具
链接:https://pan.baidu.com/s/1UC19I2vIGau9_zQwHfMMLA
提取码:nzzh
最好用的modbus仿真工具—调试必备
链接:https://pan.baidu.com/s/11j3jIbSgaTOHt-k2f8_PEw
提取码:u6ot
源码下载:
esp8266_modbus
链接:百度网盘-链接不存在
提取码:https://fgk.pw/i/yVTlx6i1746
术语介绍
Modbus主站(modbusMaster):主动发出指令,要求读取数据的一端(此实验中为arduino)。
Modbus从站(modbusSlaver):被动接收指令,并随指令读自己寄存器内的信息给主站,或是改写寄存器内的信息(此实验中为DDS283-1ZN电能表)
Modbus 03协议解析
Master发送命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
Slaver设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
ESP8266接线
USB转TTL,一端接电脑USB,一端接ESP8266 D7,D8

mbslave 从机模拟器设置 Setup->Slave Definition

Connection->Connect

双击数值可修改值

运行测试:

核心代码
#include "ModbusMaster232.h"
#include "SoftwareSerial.h" // Modbus RTU pins D7(13),D8(15) RX,TX
ModbusMaster232 node;
void setup()
{
Serial.begin(9600);
delay(100);
node.begin(9600); // Modbus RTU
delay(100);
Serial.println("Connected ");
Serial.println("Modbus RTU Master Online");
}
void loop()
{
uint8_t slaveId = 1;
uint8_t startAddress = 0;
uint8_t readLength = 2;
Serial.println("Modbus,SlaveId:" + String(slaveId) + ",StartAddress:" + String(startAddress) + ",ReadLength:" + String(readLength));
//
node.setSlaveAddress(slaveId);
uint8_t result = node.readHoldingRegisters(startAddress, readLength);
if (result == node.ku8MBSuccess)
{
Serial.println("=======");
for (uint8_t j = 0; j < readLength; j++)
{
String stringOne = String(node.getResponseBuffer(j), DEC);//以DEC(十)进制显示你要的数据
Serial.println(stringOne);
}
Serial.println("=======");
}
node.clearResponseBuffer();
//
delay(3000);
}
参考资料:
https://blog.csdn.net/ubibots/article/details/51613685
本文详细介绍如何使用ESP8266模块通过Modbus RTU协议与Arduino和DDS283-1ZN电能表进行通信。文章提供了必要的开源代码、串口工具下载链接以及Modbus03协议的解析示例。通过本文,读者可以学习到ESP8266的接线方式、从机模拟器设置及核心代码实现。

1329

被折叠的 条评论
为什么被折叠?



