Files
health-wellness-device-2/include/config.h
2026-08-12 09:22:28 +08:00

257 lines
10 KiB
C

/**
* @file config.h
* @brief 全局配置文件 - 五劳无感康养监测系统
*
* 协议版本: V0.08 (2026-07-17)
* 包含: 硬件引脚定义、WiFi/MQTT 默认参数、
* 雷达协议常量、告警阈值、任务配置等
*/
#ifndef CONFIG_H
#define CONFIG_H
#include <Arduino.h>
// ============================================================
// 1. 硬件引脚定义 (ESP32-S3)
// ============================================================
// --- 雷达型号选择 ---
#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
#define RADAR_BAUD_RATE 115200
// --- 雷达备用 GPIO ---
#define RADAR_GPIO1_PIN 2 // 活跃/静止指示 (从10挪到2)
#define RADAR_GPIO2_PIN 11 // 有人/无人指示
// --- DHT11 温湿度传感器 ---
#define DHT11_PIN 4 // 温湿度传感器
// --- 水浸传感器 ---
#define WATER_SENSOR_PIN 45 // 数字输入, 低电平=有水
// --- 蜂鸣器 (PWM) ---
#define BUZZER_PIN 21
#define BUZZER_PWM_CHANNEL 0
#define BUZZER_PWM_FREQ 2000
#define BUZZER_PWM_RESOLUTION 8
// --- 配网按钮 ---
#define CONFIG_BUTTON_PIN 0 // 长按 3 秒复位 WiFi
#define BUTTON_LONG_PRESS_MS 3000
// --- 状态指示灯 ---
#define LED_WIFI_PIN 8 // 蓝色 - WiFi 状态
#define LED_ALARM_PIN 9 // 红色 - 报警指示
// --- OLED 显示屏 (SSD1306 128x64 I2C) ---
#define OLED_SDA_PIN 15 // I2C 数据线
#define OLED_SCL_PIN 16 // I2C 时钟线
// --- 交互按钮 ---
#define BTN_PROVISION_PIN 14 // 擦除WiFi配网按钮 (长按3秒)
#define BTN_ALARM_DISMISS_PIN 13 // 解除报警按钮
#define BTN_PAGE_SWITCH_PIN 46 // 翻页按钮
#define BTN_DEBOUNCE_MS 50 // 去抖时间
#define BTN_LONG_PRESS_MS 1500 // 长按判定
// ============================================================
// 2. 设备标识 (协议规范 §2)
// ============================================================
#define SALEID_DEFAULT "10100001" // 站点/系统编号
#define GATEID_DEFAULT "10100001001" // 网关唯一编号
#define METER_ID_DEFAULT "ENV001" // 感知节点ID (卧室=ENV001, 卫生间=ENV002, 客厅=ENV003)
#define METER_NAME_DEFAULT "RadarDHT11" // 设备型号名称
#define FW_VERSION "V1.0.0"
// ============================================================
// 3. WiFi 默认配置 (配网使用)
// ============================================================
#define WIFI_AP_SSID "HealthMonitor-Setup"
#define WIFI_AP_PASSWORD "1234567890"
#define WIFI_CONFIG_TIMEOUT 0 // 0=不超时, 一直等待配置
#define WIFI_CONNECT_TIMEOUT 15
#define WIFI_RETRY_INTERVAL 10000
// ============================================================
// 4. MQTT 默认配置 (协议规范 §2)
// ============================================================
#define MQTT_DEFAULT_SERVER "202.110.234.102"
#define MQTT_DEFAULT_PORT 8000
#define MQTT_DEFAULT_PORT_STR "8000" // WiFiManager 参数用字符串
#define MQTT_DEFAULT_USER "test"
#define MQTT_DEFAULT_PASS "testtest"
#define MQTT_DEFAULT_DEVICE "10100001001" // 默认网关ID = gateid
#define MQTT_DEFAULT_ENV "主卧" // 默认环境备注
#undef MQTT_KEEPALIVE
#define MQTT_KEEPALIVE 30 // 30秒 (协议规范)
#define MQTT_RECONNECT_MIN 1000
#define MQTT_RECONNECT_MAX 60000
// ============================================================
// 5. MQTT 主题定义 (协议规范 §3)
// ============================================================
// --- 上行主题 (设备 → 服务端) ---
#define MQTT_TOPIC_REPORT_ALLPOINTS "report/allpoints" // 全量遥测上报 QoS0
#define MQTT_TOPIC_STATUS_ONLINE "status/%s/online" // 上线通知 QoS1
#define MQTT_TOPIC_STATUS_OFFLINE "status/%s/offline" // 离线遗嘱 QoS1
#define MQTT_TOPIC_STATUS_PROVISION "status/%s/provision" // 配网状态 QoS1
#define MQTT_TOPIC_RESPONSE_CMD "response/%s/cmd" // 指令响应 QoS1
#define MQTT_TOPIC_RESPONSE_PROVISION "response/%s/provision" // 配网响应 QoS1
// --- 下行主题 (服务端 → 设备) ---
#define MQTT_TOPIC_CMD_ALARM "cmd/%s/alarm" // 告警指令 QoS1
#define MQTT_TOPIC_CMD_ALARM_RESTORE "cmd/%s/alarm/restore" // 告警恢复 QoS1
#define MQTT_TOPIC_CMD_CONTROL "cmd/%s/control" // 控制指令 QoS1
#define MQTT_TOPIC_CMD_PROVISION_WIFI "cmd/%s/provision/wifi" // WiFi配网 QoS1
// ============================================================
// 6. 上报配置 (协议规范 §4.1, §7.2)
// ============================================================
#define REPORT_INTERVAL_MS 1000 // 遥测上报周期 1秒 (有人时)
#define REPORT_QOS 0 // 遥测 QoS 0
#define PRESENCE_HEARTBEAT_MS 60000 // 无人心跳间隔 60秒 (4G省流量)
#define STATUS_QOS 1 // 状态/响应 QoS 1
// ============================================================
// 7. 报警阈值 (协议规范 §6, 服务端判定用)
// ============================================================
#define HEART_RATE_MIN 50
#define HEART_RATE_MAX 120
#define BREATH_RATE_MIN 8
#define BREATH_RATE_MAX 24
#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
// ============================================================
// 8. 任务配置
// ============================================================
#define RADAR_TASK_STACK 4096
#define RADAR_TASK_PRIORITY 5
#define RADAR_TASK_CORE 0
#define MQTT_TASK_STACK 8192
#define MQTT_TASK_PRIORITY 4
#define MQTT_TASK_CORE 1
// ============================================================
// 9. NTP 时间同步
// ============================================================
#define NTP_SERVER "ntp.aliyun.com"
#define NTP_GMT_OFFSET_SEC 28800 // UTC+8 (北京时间)
#define NTP_DAYLIGHT_OFFSET 0
// ============================================================
// 10. LittleFS 配置文件名
// ============================================================
#define CONFIG_FILE_MQTT "/mqtt_config.json"
#define CONFIG_FILE_WIFI "/wifi_config.json"
#define CONFIG_FILE_DEVICE "/device_config.json"
// ============================================================
// 11. 结构体: 全量遥测数据 (协议规范 §4.1)
// ============================================================
struct TelemetryData {
// --- 设备标识 ---
char saleid[12]; // 站点编号 (已弃用)
char gateid[16]; // 网关编号
char meterId[8]; // 节点ID (已弃用, 新用 gateid+后缀)
char meterName[16]; // 设备型号 "RadarDHT11"
char deviceType[16]; // 设备类型枚举 bedroom/bathroom/...
// --- 环境数据 (DHT11) ---
float temp; // 温度 ℃
float humi; // 湿度 %RH
bool dhtValid; // 温湿度有效性
// --- 雷达: 存在/运动 ---
bool presence; // 有人=1 无人=0
bool motion; // 有运动=1 无运动=0
bool fall; // 跌倒检测 1=触发
bool resident; // 驻留状态 1=驻留
// --- 雷达: 生命体征 ---
uint8_t heartRate; // 心率 bpm (无效=0)
uint8_t breathRate; // 呼吸 次/分 (无效=0)
uint8_t body; // 人体能量/体征值
uint8_t sleepState; // 睡眠状态 0=清醒 1=浅睡 2=深睡
uint8_t sleepScore; // 睡眠评分 0~100
bool radarValid; // 雷达数据有效性
bool vitalValid; // 心率呼吸有效性
// --- 水浸 ---
bool rainDO; // 1=正常 0=水浸触发
bool rainValid; // 水浸传感器有效性
// --- 设备状态 ---
bool wifiReady; // WiFi/MQTT 连接状态
uint32_t uptimeSec; // 设备累计运行秒数
bool buzzerState; // 蜂鸣器状态 1=开启
// --- 时间戳 ---
uint32_t lastUpdate; // 最后更新 ms
};
// 结构体: 下行报警指令 (协议规范 §5.1, §5.2)
struct AlarmCommand {
char cmdId[32]; // 指令唯一ID
char type[20]; // alarm / alarm_restore
char alarmType[24]; // fall/water_leak/heart_abnormal/breath_abnormal
char alarmLevel[8]; // low/medium/high
char alarmDesc[64]; // 告警描述
char meterId[8]; // 触发节点ID
char relatedCmdId[32]; // 关联原始告警ID (恢复用)
// 联动动作
bool buzzerOn; // 蜂鸣器开关
uint16_t buzzerDuration; // 蜂鸣持续秒数 (0=持续到恢复)
bool nightLight; // 夜灯
uint32_t timestamp;
};
// 结构体: 下行控制指令 (协议规范 §5.3)
struct ControlCommand {
char cmdId[32];
char type[20]; // control
char controlType[24]; // buzzer_test/device_restart/report_interval_set/factory_reset
uint32_t params_duration; // 参数: 持续秒数
uint32_t params_interval; // 参数: 上报间隔
uint32_t timestamp;
};
// 结构体: 下行配网指令 (协议规范 §5.4)
struct ProvisionCommand {
char cmdId[32];
char wifi_ssid[33];
char wifi_password[65];
char wifi_encrypt[8]; // OPEN/WPA2/WPA3
char mqtt_broker[64];
uint16_t mqtt_port;
bool mqtt_useTls;
uint32_t timestamp;
};
#endif // CONFIG_H