# esp32_py32_uart **Repository Path**: Ergou-/esp32_py32_uart ## Basic Information - **Project Name**: esp32_py32_uart - **Description**: 针对ESP32和Python32的UART通信开发库,提供稳定高效的串口通信功能,适用于物联网设备与计算机间的简单快速数据交换。 - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-05 - **Last Updated**: 2025-07-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32与PY32通讯协议实现 这个项目实现了ESP32和PY32之间的UART通讯协议,用于智能设备控制和状态上报。 ## 协议概述 协议基于UART串口通信,波特率115200,数据位8位,停止位1位,无校验位,无流控。 ### 数据帧格式 ``` | 帧头 | 长度 | 命令字 | 数据 | 校验 | 帧尾 | |------|------|--------|------|------|------| | 2字节| 1字节| 1字节 |N字节 | 1字节| 2字节| ``` - **帧头**: 0xAA55 (固定) - **长度**: 数据字段长度 (0-255) - **命令字**: 命令类型标识 - **数据**: 命令参数数据 - **校验**: 异或校验 (长度+命令字+数据) - **帧尾**: 0x0D0A (固定) ## 命令字定义 ### ESP32主机下发命令 (0x10-0x1F) | 命令字 | 描述 | 数据格式 | |--------|------|----------| | 0x10 | UV控制 | [状态] 0x00=关, 0x01=开 | | 0x11 | 制氢控制 | [状态] 0x00=关, 0x01=开 | | 0x12 | 灯光颜色 | [颜色码] 1=红, 2=黄, 3=蓝, 4=紫, 5=绿, 6=青, 7=白 | | 0x13 | 灯光模式 | [模式] 0=关, 1=常亮, 2=呼吸, 3=七彩渐变 | | 0x14 | 蜂鸣器控制 | [次数] 0=关, 1-255=响几声 | | 0x15 | 清洗控制 | [状态] 0x00=关, 0x01=开 | | 0x16 | 关机 | [状态] 0x00=关机 | | 0x17 | 背光控制 | [状态] 0x00=关, 0x01=开 | ### PY32从机上报命令 (0x20-0x2F) | 命令字 | 描述 | 数据格式 | |--------|------|----------| | 0x20 | 充电状态 | [状态] 0=未充电, 1=充电中, 2=已充满 | ### 通用响应命令 (0x30-0x3F) | 命令字 | 描述 | 数据格式 | |--------|------|----------| | 0x31 | 心跳包 | [状态] 0x00 | ## 协议示例 ### 开启UV功能 ``` AA 55 01 10 01 10 0D 0A ``` 解析:帧头(AA55) + 长度(01) + 命令(10) + 数据(01开启) + 校验(10) + 帧尾(0D0A) ### 关闭UV功能 ``` AA 55 01 10 00 11 0D 0A ``` ### 开启制氢 ``` AA 55 01 11 01 11 0D 0A ``` ### 关闭制氢 ``` AA 55 01 11 00 10 0D 0A ``` ### 设置灯光颜色-红灯 ``` AA 55 01 12 01 12 0D 0A ``` ### 设置灯光颜色-黄灯 ``` AA 55 01 12 02 11 0D 0A ``` ### 设置灯光颜色-蓝灯 ``` AA 55 01 12 03 10 0D 0A ``` ### 设置灯光颜色-紫灯 ``` AA 55 01 12 04 17 0D 0A ``` ### 设置灯光颜色-绿灯 ``` AA 55 01 12 05 16 0D 0A ``` ### 设置灯光颜色-青灯 ``` AA 55 01 12 06 15 0D 0A ``` ### 设置灯光颜色-白灯 ``` AA 55 01 12 07 14 0D 0A ``` ### 设置灯光模式-关闭 ``` AA 55 01 13 00 12 0D 0A ``` ### 设置灯光模式-常亮 ``` AA 55 01 13 01 13 0D 0A ``` ### 设置灯光模式-呼吸 ``` AA 55 01 13 02 10 0D 0A ``` ### 设置灯光模式-七彩渐变 ``` AA 55 01 13 03 11 0D 0A ``` ### 蜂鸣器一声 ``` AA 55 01 14 01 14 0D 0A ``` ### 蜂鸣器255声 ``` AA 55 01 14 FF EA 0D 0A ``` ### 关蜂鸣器 ``` AA 55 01 14 00 15 0D 0A ``` ### 开清洗 ``` AA 55 01 15 01 15 0D 0A ``` ### 关清洗 ``` AA 55 01 15 00 14 0D 0A ``` ### 关机 ``` AA 55 01 16 00 17 0D 0A ``` ### 开背光 ``` AA 55 01 17 01 17 0D 0A ``` ### 关背光 ``` AA 55 01 17 00 16 0D 0A ``` ### 充电状态上报-未充电 ``` AA 55 01 20 00 21 0D 0A ``` ### 充电状态上报-充电中 ``` AA 55 01 20 01 20 0D 0A ``` ### 充电状态上报-已充满 ``` AA 55 01 20 02 23 0D 0A ``` ### 心跳包 ``` AA 55 01 31 00 30 0D 0A ``` ## 项目文件说明 - **uart_protocol.h**: 协议头文件,定义了协议常量、数据结构和API函数 - **uart_protocol.c**: 协议实现文件,包含协议解析和构建函数 - **esp32_example.c**: ESP32端示例代码 - **py32_example.c**: PY32端示例代码 - **protocol_test.c**: 协议测试程序 ## 编译和运行 使用ESP-IDF编译ESP32端代码: ```bash cmd /c "G:\Espressif\v541\v5.4.1\esp-idf\export.bat && idf.py build" ``` 烧录到ESP32: ```bash cmd /c "G:\Espressif\v541\v5.4.1\esp-idf\export.bat && idf.py -p COM3 flash" ``` ## 注意事项 1. 确保串口波特率设置为115200 2. 校验和计算方法为:长度字节、命令字节和所有数据字节的异或 3. 心跳包每1秒发送一次 4. 充电状态每0.5秒上报一次