# esp32_dlt645_controller **Repository Path**: ly_embedded/esp32_dlt645_controller ## Basic Information - **Project Name**: esp32_dlt645_controller - **Description**: 通过 ESP32 对电表 进行 645 命令的调表 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-01 - **Last Updated**: 2026-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README | 支持目标 | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | Linux | | -------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | ----- | # DL/T 645 电表 Web 控制器 基于 ESP32 的 DL/T 645 电力规约智能电表 Web 控制器。通过 RS-485 总线与电表通信,提供 Web 界面进行远程控制和数据采集。 ## 功能特性 - **DL/T 645 协议支持**:支持 DL/T 645-97 / 645-07 规约,可读取电压、电流、功率、电能等数据项 - **Web 调试上位机**:内置专业 DLT645 调试工具(`/tool`),支持帧构造、解析、收发日志 - **UART 透传**:ESP32 作为 RS-485 桥接器,协议解析在浏览器端完成 - **动态串口配置**:支持运行时修改波特率、校验位等 UART 参数,无需重启设备 - **双页面设计**: - `/` — 简洁的手动 hex 指令发送界面 - `/tool` — 完整的专业电表调试上位机 ## 系统架构 ``` 浏览器 (Web 前端: DLT645 协议栈) │ HTTP (WiFi) ▼ ESP32 固件 (UART 透传桥) │ RS-485 ▼ DL/T 645 智能电表 ``` - **前端**:HTML/JS 实现的完整 DLT645 协议栈(帧构造、+0x33 加解密、校验和计算、帧解析) - **固件**:ESP32 仅负责 UART ↔ HTTP 十六进制数据透传,以及 UART 参数远程配置 ## 硬件要求 * ESP32/ESP32-S2/ESP32-S3 等开发板(推荐 ESP32-S3) * TTL 转 RS-485 模块(支持自动收发方向切换) * DL/T 645 协议智能电表 * USB 数据线(供电及烧录) ### 接线说明 | ESP32 引脚 | RS-485 模块 | |-----------|-------------| | GPIO 19 | RX | | GPIO 20 | TX | | 3.3V / 5V | VCC | | GND | GND | RS-485 模块的 A、B 端子连接电表的 RS-485 通信接口。 ## 配置项目 ``` idf.py menuconfig ``` 打开项目配置菜单,配置 Wi-Fi 或以太网连接参数。 ## 编译与烧录 编译项目并烧录到开发板,然后打开串口监视器: ``` idf.py -p PORT flash monitor ``` (将 `PORT` 替换为实际的串口号,如 `COM3`、`COM4` 等。) (按 `Ctrl-]` 退出串口监视器。) ## 使用说明 ### 启动设备 设备上电后自动连接 Wi-Fi,获取 IP 地址后启动 HTTP 服务器(默认端口 80)。 ### 访问 Web 界面 在浏览器中输入 ESP32 的 IP 地址: - **简单控制页**:`http:///` - 手动输入 hex 指令,点击发送 - 查看通信日志 - **专业调试工具**:`http:///tool` - 左侧树形菜单选择电表数据项 - 自动构造 DLT645 读帧 - 彩色渲染帧解析结果 - 支持远程修改 UART 配置 ### API 接口 | 路由 | 方法 | 说明 | |------|------|------| | `/` | GET | 返回简单控制页面 | | `/tool` | GET | 返回专业调试工具页面 | | `/uart/send` | POST | 发送 hex 指令到 RS-485,返回电表应答数据 | | `/uart/config` | GET | 查询当前 UART 配置(JSON) | | `/uart/config` | POST | 修改 UART 配置(波特率、校验位等) | | `/hello` | GET | 测试端点,返回 "Hello World!" | | `/echo` | POST | 回显 POST 内容 | ### curl 测试示例 假设 ESP32 IP 为 `192.168.43.130`: ```bash # 测试连接 curl 192.168.43.130:80/hello # 发送 DLT645 读电表地址指令 curl -X POST -H "Content-Type: text/plain" \ --data "FE FE FE FE 68 AA AA AA AA AA AA AA 68 11 04 33 34 34 35 C5 16" \ 192.168.43.130:80/uart/send # 查询 UART 配置 curl 192.168.43.130:80/uart/config # 修改波特率为 2400 curl -X POST -H "Content-Type: application/json" \ --data '{"baud_rate": 2400}' \ 192.168.43.130:80/uart/config ``` ## 串口输出示例 ``` I (9580) example_connect: - IPv4 address: 192.168.194.219 I (9590) example: Starting server on port: '80' I (9600) example: Registering URI handlers I (66450) example: Found header => Host: 192.168.194.219 ``` ## 故障排查 * 如果服务器日志显示 `httpd_parse: parse_block: request URI/header too long`,尤其是在处理 POST 请求时,需要增大 `HTTPD_MAX_REQ_HDR_LEN`。在项目配置菜单(`idf.py menuconfig`)中修改:`Component config -> HTTP Server -> Max HTTP Request Header Length` * RS-485 通信失败时,检查接线是否正确,确认电表通信参数(默认 9600bps、偶校验、8 数据位、1 停止位)