WiFi-servo-controller
概述
本项目基于Arduino
环境下的ESP32开发。使用ESP32及继电器对快速门电机控制器进行控制,并使用MQTT
向本地服务器EMQX
进行通讯。
如需修改,请先参阅乐鑫科技中的开发引导了解ESP32模组开发相关概念和乐鑫物联网开发框架。
调试过程可对接EMQX本地服务器,具体教程可参考这篇博客:图文手把手教程–ESP32 MQTT对接EMQX本地服务器(VSCODE+ESP-IDF)
首先从WiFi-servo-controllerGithub仓库获取项目资料,获取到的资料目录结构如下:
.根目录
├── Cloud Server
├── Hardware 硬件资料
│ ├── BOM_V1_2023-08-09 硬件接线图
│ ├── BOM_V1_2023-08-09 物料清单
│ ├── Gerber_V1_2023-08-09 PCB制版文件
│ ├── PCB_V1_2023-08-09 PCB文件
│ └── SCH_Schematic_V1_2023-08-09 原理图文件
├── Software 软件资料
│ ├── Example 参考例程
│ │ ├── MQTT_connect.ino MQTT连接例程
│ │ └── MQTT_control.ino MQTT控制例程
│ └── main
│ └── main20230813.ino ESP32代码
├── Fig 图表
│ ├── architectureV2.jpg 系统整体架构图
│ └── software.jpg 程序执行流程图
├── .git git仓库文件
├── .gitattributes git仓库文件
└── README.md
系统架构
硬件连接
继电器接口:
- H6(上行端口) -> IO25
- H7(下行端口) -> IO26
- H8(停止端口) -> IO27
程序执行流程
通信协议
- 远程控制开关门:订阅MQTT开关门控制主题
- 主题名称:
DoorControl
- 内容格式:
DoorControl/ID/Sender/Operation
其中: - DoorControl : 远程控制开关门:订阅MQTT开关门控制主题。
- ID : 表示通讯板的ID,使用三位数字表示。(
001
: 001号通讯板,031
: 031号通讯板) - Sender : 表示信息传输方。(
TX
:服务器传输给通讯板的指令,RX
:通讯板传输给服务器的信息) - Operation : 表示此次信息执行的操作。(
1
: 开门,0
: 关门,-1
: 停止)
例如 :DoorControl/001/TX/1
表示001号通讯板接收到来自服务器的推送信息,执行相应的关门动作。通讯板返回信息DoorControl/001/RX/1
- 定时设置:订阅定时设置主题
- 主题名称:
TimerSetting
- 内容格式:
TimerSetting/ID/Sender/Operation/Hour/min
其中: - TimerSetting : 远程控制开关门:订阅MQTT开关门控制主题。
- ID : 表示通讯板的ID,使用三位数字表示。(
001
: 1号通讯板,031
: 31号通讯板) - Sender : 表示信息传输方。(
TX
:服务器传输给通讯板的指令,RX
:通讯板传输给服务器的信息) - Operation : 表示此次信息执行的操作。(
1
: 定时开启,0
: 定时关闭,-1
: 关闭定时功能) - Group : 表示定时器设置的组别,一个通讯板默认设置十个定时器。(
0
~9
: 定时组别) - Hour : 表示定时功能的时钟设置。(
07
: 7时XX分 ,11
: 11时XX分) - min : 表示定时功能的分钟设置。(
04
: XX时04分,59
: XX时59分)
例如:TimerSetting/001/TX/1/0/07/04
表示001号通讯板接收到来自服务器的推送信息,第0组定时器使能,在07:04时刻打开风门。通讯板返回信息TimerSetting/001/RX/1/0/07/04
TimerSetting/001/TX/0/5/11/59
表示001号通讯板接收到来自服务器的推送信息,第5组定时器使能,在11:59时刻关闭风门。通讯板返回信息“TimerSetting/001/RX/0/5/11/59
TimerSetting/001/TX/-1/9/11/59
表示001号通讯板接收到来自服务器的推送信息,第9组定时器关闭。通讯板返回信息TimerSetting/001/RX/-1/9/11/59
- 查询定时列表:查询通讯板定时设置主题
- 主题名称:
Listing
- 信息格式:
Listing/ID/TX
其中: - Listing : 远程控制开关门:订阅MQTT开关门控制主题。
- ID : 表示通讯板的ID,使用三位数字表示。(
001
: 1号通讯板,031
: 31号通讯板) - Sender : 表示信息传输方。(
TX
:服务器传输给通讯板的指令,RX
:通讯板传输给服务器的信息)
例如:Listing/001/TX
表示001号通讯板接收到来自服务器的推送信息。 通讯板返回信息Listing/ID/RX/Group1/state/hour/min/Group2/state/hour/min/Group3……
- 心跳包机制
- 主题名称:
Heartbeat
- 信息格式:
Heartbeat/ID/TX
其中: - Heartbeat : 远程控制开关门:订阅MQTT开关门控制主题。
- ID : 表示通讯板的ID,使用三位数字表示。(
001
: 1号通讯板,031
: 31号通讯板) - Sender : 表示信息传输方。(
TX
:服务器传输给通讯板的指令,RX
:通讯板传输给服务器的信息)
- 主题名称:
心跳包机制为接收到信息格式 Heartbeat/ID/TX
的心跳请求时,返回Heartbeat/ID/RX
的心跳信息
例如:
Heartbeat/001/TX
表示001号通讯板接收到来自服务器的推送信息。
通讯板返回信息Heartbeat/ID/RX
修改WiFi信息
通讯板可通过两种方法修改内置WiFi信息
- 修改
Software/main/main.ino
中内置WiFi信息,并通过Arduino.ide烧录
// WiFi
const char *ssid = "huangjiacheng"; // Enter your WiFi name
const char *password = "88888888"; // Enter WiFi password
用户需要根据采用的WiFi
的具体信息进行适配操作
- 使用串口进行WiFi信息修改
使用CH340
或其他USB转TTL模块连接ESP32通讯板与PC
PC上用户可通过任意串口调试软件推荐使用Arduino.ide
MCU
通信串口硬件配置为:波特率115200、8位有效数据、无奇偶校验、1位停止位
串口接线:
- PC – ESP32
- TXD – IO9
- RXD – IO10
- GND – GND
<< changeWIFI\n
>> Enter your WiFi name
<< huangjiacheng
>> Enter your WiFi name
<< 88888888
>> OK
开发日记
- 看门狗饱和导致ESP32重启,注意esp32-timer-hal.c中定时器和中断函数是不可被阻塞的
解决方法:加个定时器标志位,在main
中执行中断函数
参考博客:
ESP32触发定时器中断后无限重启
- 隔次开机会有概率连接不上WiFi网络
导致原因未知
解决方法:使用ESP内置函数ESP.restore
在连接不上WiFi时,尝试重启ESP32