feat:增加蓝牙配网功能
This commit is contained in:
@@ -16,10 +16,15 @@
|
||||
// 1. 硬件引脚定义 (ESP32-S3)
|
||||
// ============================================================
|
||||
|
||||
// --- R60ABD1 毫米波雷达 ---
|
||||
// --- 雷达型号选择 ---
|
||||
#define RADAR_TYPE_ABD1 0 // R60ABD1: 心率/呼吸精准, 跌倒一般
|
||||
#define RADAR_TYPE_AFD1 1 // R60AFD1: 跌倒/姿态精准, 无心率呼吸
|
||||
#define RADAR_TYPE RADAR_TYPE_AFD1 // 演示用 AFD1 (跌倒精准)
|
||||
|
||||
// --- 毫米波雷达 ---
|
||||
#define RADAR_UART_PORT Serial2
|
||||
#define RADAR_RX_PIN 17
|
||||
#define RADAR_TX_PIN 1 // UART 发送 (从18挪到1)
|
||||
#define RADAR_TX_PIN 1
|
||||
#define RADAR_BAUD_RATE 115200
|
||||
|
||||
// --- 雷达备用 GPIO ---
|
||||
@@ -72,8 +77,8 @@
|
||||
// ============================================================
|
||||
|
||||
#define WIFI_AP_SSID "HealthMonitor-Setup"
|
||||
#define WIFI_AP_PASSWORD "12345678"
|
||||
#define WIFI_CONFIG_TIMEOUT 300
|
||||
#define WIFI_AP_PASSWORD "1234567890"
|
||||
#define WIFI_CONFIG_TIMEOUT 0 // 0=不超时, 一直等待配置
|
||||
#define WIFI_CONNECT_TIMEOUT 15
|
||||
#define WIFI_RETRY_INTERVAL 10000
|
||||
|
||||
@@ -130,6 +135,7 @@
|
||||
#define TEMP_LOW 5.0f
|
||||
#define TEMP_HIGH 45.0f
|
||||
#define HUMI_LOW 15.0f
|
||||
#define PRESENCE_HYSTERESIS 8 // 有人无人防抖 (PCB信号抖动时过滤)
|
||||
#define HUMI_HIGH 90.0f
|
||||
#define WATER_DEBOUNCE_MS 50
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ private:
|
||||
void _extractPresence(const RadarFrame& frame);
|
||||
void _extractBreathing(const RadarFrame& frame);
|
||||
void _extractHeartRate(const RadarFrame& frame);
|
||||
void _extractFall(const RadarFrame& frame); // AFD1 跌倒
|
||||
void _extractSleep(const RadarFrame& frame);
|
||||
void _extractWorkStatus(const RadarFrame& frame);
|
||||
void _extractDetectRange(const RadarFrame& frame);
|
||||
@@ -85,6 +86,13 @@ private:
|
||||
RadarCallback _callback;
|
||||
uint32_t _frameCount;
|
||||
uint32_t _errorCount;
|
||||
uint32_t _lastHeartBeat; // 上次心率数据时间
|
||||
uint32_t _lastBreathBeat; // 上次呼吸数据时间
|
||||
|
||||
// 有人无人防抖 (PCB 信号不稳定时过滤跳变)
|
||||
bool _stablePresence; // 防抖后的稳定有人/无人
|
||||
uint8_t _presenceCnt; // 连续一致计数
|
||||
bool _lastRawPresence; // 上一次原始值
|
||||
};
|
||||
|
||||
#endif // RADAR_MANAGER_H
|
||||
|
||||
@@ -33,9 +33,10 @@ enum RadarControl : uint8_t {
|
||||
CTRL_WORK_STATUS = 0x05, // 工作状态
|
||||
CTRL_DETECT_RANGE = 0x07, // 探测范围
|
||||
CTRL_PRESENCE = 0x80, // 人体存在
|
||||
CTRL_BREATHING = 0x81, // 呼吸检测
|
||||
CTRL_SLEEP = 0x84, // 睡眠监测
|
||||
CTRL_HEART_RATE = 0x85, // 心率监测
|
||||
CTRL_BREATHING = 0x81, // 呼吸检测 (仅 ABD1)
|
||||
CTRL_FALL = 0x83, // 跌倒检测 (仅 AFD1)
|
||||
CTRL_SLEEP = 0x84, // 睡眠监测 (仅 ABD1)
|
||||
CTRL_HEART_RATE = 0x85, // 心率监测 (仅 ABD1)
|
||||
};
|
||||
|
||||
// ============================================================
|
||||
|
||||
@@ -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