为了实现一个优雅的移动端主动控制,我们还提供了一个WiFi连接控制方案。
这个流程主要是:
- 初始化WiFi连接,进入STA模式,否则进AP模式
- 进入STA模式,创建WebSocket服务
- 启动WebSocket服务器
- 处理客户端请求
- 处理不同的WebSocket消息:电机参数、舵机参数、平衡控制、摇杆控制、其他参数的解析
- 设置为WebCommand
- 进入主循环处理命令
8.1 核心程序
初始化WiFi:
bool WiFiHandler::begin() {
Serial.println("\n[WiFi] 正在初始化...");
// 先尝试使用SmartConfig连接WiFi
if (connectWiFiSmartConfig()) {
currentMode = WiFiMode::STA;
Serial.printf("[WiFi] STA模式已连接,IP: %s\n", WiFi.localIP().toString().c_str());
} else {
// 连接失败,启动AP模式
startAP();
currentMode = WiFiMode::AP;
Serial.printf("[WiFi] AP模式已启动,IP: %s\n", apIP.toString().c_str());
}
// 创建Web服务器和WebSocket服务器
webServer = new WebServer(80);
wsServer = new WebSocketsServer(81);
// 设置路由
setupWebServer();
// 启动WebSocket服务器
wsServer->begin();
wsServer->onEvent([](uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
if (instance != nullptr) {
instance->webSocketEvent(num, type, payload, length);
}
});
// 启动Web服务器
webServer->begin();
Serial.println("[WiFi] Web服务器已启动");
Serial.printf("[访问] http://%s\n", getIPAddress().c_str());
return true;
}
这个程序主要实现了如下流程:
- 选择配网方式:优先选择STA模式,否则使用AP模式。
- 网络服务启动:创建一个Web服务器,端口号为80;创建一个WebSocket服务器,端口号为81。启动Web、WebSocket服务器实现双向通信,处理控制命令,设置事件回调处理消息。设置三个路由,分别是"/"、"/debug"、"/control"。
8.2 SmartConfig配置
我们将使用乐鑫推荐的SmartConfig来进行WiFi配网。
SmartConfig简介:
代码中已实现SmartConfig的连接处理。主要的配置处理代码:
bool WiFiHandler::connectWiFiSmartConfig() {
WiFi.mode(WIFI_STA);
// 尝试使用保存的WiFi凭证连接
Serial.println("[WiFi] 尝试使用已保存的WiFi凭证连接...");
WiFi.begin();
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
Serial.println();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("[WiFi] 使用已保存凭证连接成功");
return true;
}
// 如果没有保存的凭证或连接失败,启动SmartConfig
Serial.println("[WiFi] 启动SmartConfig配置模式...");
Serial.println("[WiFi] 请使用ESP Touch APP配置WiFi");
WiFi.beginSmartConfig();
// 等待SmartConfig完成(最多等待2分钟)
int smartConfigTimeout = 240; // 120秒 = 2分钟
while (!WiFi.smartConfigDone() && smartConfigTimeout > 0) {
delay(500);
Serial.print(".");
smartConfigTimeout--;
}
Serial.println();
if (WiFi.smartConfigDone()) {
Serial.println("[WiFi] SmartConfig配置成功");
Serial.println("[WiFi] 正在连接WiFi...");
// 等待连接完成
attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
Serial.println();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("[WiFi] WiFi连接成功");
Serial.printf("[WiFi] SSID: %s\n", WiFi.SSID().c_str());
return true;
}
} else {
Serial.println("[WiFi] SmartConfig超时");
}
WiFi.stopSmartConfig();
return false;
}
烧录固件后,我们可以通过下载EspTouch来配置网络,它通过扫描附近存在的ESP系列设备,为其提供连接到路由器的桥接作用。(EspTouch仅为参考连接手段,其他手段请自行查找相关工具)
EspTouch下载链接:https://www.espressif.com/en/products/software/esp-touch/resources
下载后,界面如图所示。请先用手机连接到目标的2.4G网络,再输入密码进行配置。输入后选择广播,即可配置成功。

此时即可打开串口监视器看分配到ESP32的IP是什么。例如:
[WiFi] STA模式已连接,IP:192.168.1.11
[访问] http://192.168.1.11
然后进入浏览器输入该IP进行控制。

您可以进入”机器人控制“页面,进行物理参数的调试控制,比如拖动摇杆操控:

还可以进入“调试工具”获取机器人更详细的参数和状态:

如上述方法不起作用,您可更换配网工具或在示例程序中更改为固定WIFI名称和密码进行连接。
注:如果使用AP模式,那么分配给ESP32的IP地址是固定的,为192.168.1.11,直接访问这个IP就好。
