feat:增加蓝牙配网功能
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
/**
|
||||
* @file wifi_manager.h
|
||||
* @brief WiFi 配网管理器
|
||||
* @brief WiFi 配网管理器 (AP + WebServer)
|
||||
*
|
||||
* 功能:
|
||||
* - 自动连接已保存的 WiFi
|
||||
* - 配网失败/首次启动 → AP 模式 + 强制门户页面
|
||||
* - 配网失败/首次启动 → AP 模式 + Captive Portal
|
||||
* - 自定义参数: MQTT 服务器/端口/用户/密码、设备名称、环境备注
|
||||
* - 长按按钮重置配置
|
||||
* - LED 状态指示
|
||||
@@ -15,7 +15,9 @@
|
||||
#define WIFI_MANAGER_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <WiFiManager.h>
|
||||
#include <WiFi.h>
|
||||
#include <WebServer.h>
|
||||
#include <DNSServer.h>
|
||||
#include <LittleFS.h>
|
||||
#include <ArduinoJson.h>
|
||||
#include "config.h"
|
||||
@@ -27,7 +29,9 @@ struct DeviceConfig {
|
||||
char mqtt_user[20];
|
||||
char mqtt_pass[20];
|
||||
char device_id[20];
|
||||
char env_note[20]; // 环境备注 (如: "主卧", "客厅", "老人房")
|
||||
char env_note[20]; // 环境备注
|
||||
char wifi_ssid[33]; // WiFi SSID (持久化)
|
||||
char wifi_pass[65]; // WiFi 密码 (持久化)
|
||||
};
|
||||
|
||||
class WiFiMgmt {
|
||||
@@ -38,100 +42,55 @@ public:
|
||||
// 单例指针 (用于静态回调)
|
||||
static WiFiMgmt* _instance;
|
||||
|
||||
/**
|
||||
* @brief 初始化 WiFi 管理器
|
||||
* @return true=成功
|
||||
*/
|
||||
bool begin();
|
||||
|
||||
/**
|
||||
* @brief 主循环, 处理配网流程和按钮检测
|
||||
* @return true=WiFi 已连接
|
||||
*/
|
||||
bool loop();
|
||||
|
||||
/**
|
||||
* @brief WiFi 是否已连接
|
||||
*/
|
||||
bool isConnected() const;
|
||||
|
||||
/**
|
||||
* @brief 获取设备配置
|
||||
*/
|
||||
bool justProvisioned(); // 刚配网成功 (读取后自动清除)
|
||||
DeviceConfig getConfig() const;
|
||||
|
||||
/**
|
||||
* @brief 获取设备 ID (用于 MQTT client_id)
|
||||
*/
|
||||
const char* getDeviceId() const;
|
||||
|
||||
/**
|
||||
* @brief 获取环境备注
|
||||
*/
|
||||
const char* getEnvNote() const;
|
||||
|
||||
/**
|
||||
* @brief 强制进入配网模式
|
||||
*/
|
||||
void startConfigPortal();
|
||||
|
||||
/**
|
||||
* @brief 清除所有配置并重启
|
||||
*/
|
||||
void resetSettings();
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief 尝试连接 WiFi
|
||||
*/
|
||||
bool _connectWiFi();
|
||||
|
||||
/**
|
||||
* @brief 设置 LED 模式 (线程安全, 无阻塞)
|
||||
* @param mode 0=灭 1=慢闪(断连1s) 2=快闪(配网300ms) 3=常亮(已连接)
|
||||
*/
|
||||
void _setLEDMode(uint8_t mode);
|
||||
|
||||
/**
|
||||
* @brief LED 闪烁独立任务 (FreeRTOS, 不受主循环阻塞影响)
|
||||
*/
|
||||
static void _ledTaskFunc(void* param);
|
||||
|
||||
/**
|
||||
* @brief 检测按钮长按
|
||||
*/
|
||||
bool _checkButtonLongPress();
|
||||
|
||||
/**
|
||||
* @brief 加载/保存配置到 LittleFS
|
||||
*/
|
||||
bool _connectWiFi(); // 仅尝试已保存凭据
|
||||
bool _tryConnect(const char* ssid, const char* pass); // 尝试连接指定 WiFi
|
||||
bool _loadConfig();
|
||||
bool _saveConfig();
|
||||
void _setLEDMode(uint8_t mode);
|
||||
static void _ledTaskFunc(void* param);
|
||||
bool _checkButtonLongPress();
|
||||
|
||||
/**
|
||||
* @brief 保存 WiFi 参数回调 (WiFiManager 的回调)
|
||||
*/
|
||||
static void _saveParamsCallback();
|
||||
static void _apCallback(WiFiManager* wm);
|
||||
// Web 服务器
|
||||
void _startPortal();
|
||||
void _stopPortal();
|
||||
void _handleRoot();
|
||||
void _handleSave();
|
||||
void _handleReset();
|
||||
void _updateWifiScan(); // WiFi 扫描缓存
|
||||
String _htmlPage(); // 返回配网 HTML 页面
|
||||
|
||||
WiFiManager _wm;
|
||||
DeviceConfig _config;
|
||||
bool _connected;
|
||||
uint32_t _lastCheckTime;
|
||||
uint32_t _buttonPressTime;
|
||||
bool _buttonPressed;
|
||||
WebServer* _server;
|
||||
DNSServer* _dns;
|
||||
DeviceConfig _config;
|
||||
bool _connected;
|
||||
bool _portalActive;
|
||||
bool _portalStopFlag; // 延迟关闭标记
|
||||
uint32_t _portalStartTime;
|
||||
String _pendingSSID;
|
||||
String _pendingPass;
|
||||
bool _provisionSuccess; // 刚配网成功标记
|
||||
uint32_t _lastCheckTime;
|
||||
uint32_t _buttonPressTime;
|
||||
bool _buttonPressed;
|
||||
|
||||
// LED 独立任务 (不被 startConfigPortal 阻塞影响)
|
||||
// WiFi 扫描缓存 (避免每次打开页面都扫描3-8秒)
|
||||
String _wifiScanCache;
|
||||
uint32_t _lastScanTime;
|
||||
|
||||
// LED 独立任务
|
||||
TaskHandle_t _ledTaskHandle;
|
||||
volatile uint8_t _ledMode; // 0=灭 1=慢闪 2=快闪 3=常亮
|
||||
|
||||
// WiFiManager 自定义参数
|
||||
WiFiManagerParameter* _param_mqtt_server;
|
||||
WiFiManagerParameter* _param_mqtt_port;
|
||||
WiFiManagerParameter* _param_mqtt_user;
|
||||
WiFiManagerParameter* _param_mqtt_pass;
|
||||
WiFiManagerParameter* _param_device_id;
|
||||
WiFiManagerParameter* _param_env_note;
|
||||
};
|
||||
|
||||
#endif // WIFI_MANAGER_H
|
||||
|
||||
Reference in New Issue
Block a user