ESP32 和威纶通触摸屏通讯
ESP32 与威纶通触摸屏通讯——只需记住一句话: “把 ESP32 做成 Modbus-RTU 从站,用 RS-485 总线连到威纶通 HMI,屏做主站轮询即可。”
一、硬件接线(最常用 RS-485)
| ESP32(UART2) | 说明 | 威纶通 COM2 |
|---|---|---|
| GPIO16 (RX2) | ← | RS-485 A (D+) |
| GPIO17 (TX2) | → | RS-485 B (D-) |
| GND | — | GND |
| 5 V 或 3.3 V | — | 485 终端电阻 120 Ω 视距离决定 |
距离 < 3 m 也可直接用 TTL-RS232,但抗干扰差,推荐 485。
二、协议参数
| 项目 | 建议值 |
|---|---|
| 协议 | Modbus RTU |
| 波特率 | 9600 |
| 数据位 | 8 |
| 校验 | 无 (None) |
| 停止位 | 1 |
| 从站地址 | 1(可改) |
三、ESP32 侧代码(Arduino 框架)
#include <ModbusRTU.h>
#include <HardwareSerial.h>
ModbusRTU mb;
const uint8_t SLAVE_ID = 1;
// 映射到寄存器
uint16_t hReg0 = 0; // 威纶通写过来
uint16_t hReg1 = 1234; // 威纶通读过去
void setup() {
Serial2.begin(9600, SERIAL_8N1, 16, 17); // UART2
mb.begin(&Serial2);
mb.slave(SLAVE_ID);
mb.addHreg(0, hReg0); // 地址 0
mb.addHreg(1, hReg1); // 地址 1
}
void loop() {
mb.task();
// 把 hReg0 的值做 LED 控制示例
digitalWrite(LED_BUILTIN, hReg0 ? HIGH : LOW);
}
四、威纶通屏配置(EasyBuilder Pro)
1 系统参数 → 设备 → 新增设备
设备类型:Modbus RTU Zero-based Addressing
2 接口:COM2 (RS-485 2W)
站号 = 1,波特率 9600,8 N 1
3 地址映射
按钮 → 0x0000(保持寄存器 0,写单寄存器)
数值显示器 → 4x0001(保持寄存器 1,只读)
4 测试
屏上按钮置 1/0 → ESP32 LED 亮/灭
ESP32 把 hReg1 改成 5678 → 屏上数值刷新。
五、常见坑 & 排查
| 现象 | 排查要点 |
|---|---|
| Device No Response | 检查 RS-485 线序 A/B、终端电阻、站号、波特率、CRC 校验 |
| 地址错位 | 威纶通默认“0-based”,若用“1-based”寄存器需+1 |
| 距离远丢包 | 降低波特率、加 120 Ω 终端、双绞屏蔽线 |
ESP32 做 Modbus-RTU 从机,威纶通屏做主站轮询寄存器——接线、协议、代码、屏配置全部对齐后,就像“USB 插 U 盘”一样即插即用
文档信息
版权声明:可自由转载(请注明转载出处)-非商用-非衍生
发表时间:2025年8月6日 11:17