# 代码详细文档 ## 主程序文件 (sketch_sep25a.ino) ### 功能概述 主程序文件负责初始化各个模块并协调它们的工作。程序采用非阻塞式设计,确保即使WiFi未连接也能正常运行。 ### 主要组件 1. **WiFiConfigurator**: WiFi配置管理器 2. **NtcThermistor**: NTC温度传感器管理器 3. **RelayController**: 继电器控制器 ### 核心逻辑 ```cpp void loop() { // 处理WiFi配置(即使WiFi未连接也继续运行) wifiConfig.loop(); // 定期更新 unsigned long currentMillis = millis(); if (currentMillis - lastUpdate >= updateInterval) { lastUpdate = currentMillis; // 尝试同步时间(仅在WiFi可用时有效,失败不影响其他功能) relays.updateNtpTime(); // 更新温度 ntcSensor.updateTemperatures(); // 打印状态信息 Serial.print("运行时间: "); Serial.print((currentMillis - relays.getPowerOnTime())/1000); Serial.print("秒, 当前小时: "); Serial.print(relays.getCurrentHour()); Serial.print(", 温度 - GPIO2: "); Serial.print(ntcSensor.getTemperature1String()); Serial.print(", GPIO3: "); Serial.print(ntcSensor.getTemperature2String()); Serial.print(", GPIO6: "); Serial.println(ntcSensor.getTemperature3String()); // 获取温度值并控制继电器 float tempGpio2 = ntcSensor.getTemperature1(); float tempGpio3 = ntcSensor.getTemperature2(); float tempGpio6 = ntcSensor.getTemperature3(); relays.controlByTempConditions(tempGpio2, tempGpio3, tempGpio6); relays.handleTimedTasks(tempGpio6); } } ``` ## WiFi配置模块 (WiFiConfigurator) ### 功能概述 WiFi配置模块提供了完整的WiFi管理功能,包括: - 热点模式配置 - Web界面配置 - WiFi连接管理 - 连接状态指示 ### 核心类: WiFiConfigurator #### 构造函数 ```cpp WiFiConfigurator(int slowLedPin, int fastLedPin, int configButtonPin, const char* ap_ssid, const char* ap_password, IPAddress apIP = IPAddress(192, 168, 4, 1), IPAddress gateway = IPAddress(192, 168, 4, 1), IPAddress subnet = IPAddress(255, 255, 255, 0)); ``` #### 主要方法 - `begin()`: 初始化WiFi配置模块 - `loop()`: 主循环处理函数,需要在主程序loop中定期调用 - `isConnected()`: 检查是否已连接WiFi - `getIPAddress()`: 获取当前IP地址 #### 工作流程 1. 初始化时检查是否已保存WiFi配置 2. 如果有配置则尝试连接WiFi 3. 监控配置按钮状态,长按5秒进入配置模式 4. 配置模式下启动热点并提供Web配置界面 ## NTC温度传感器模块 (NtcThermistor) ### 功能概述 NTC温度传感器模块负责读取和处理NTC热敏电阻的温度数据,支持多路传感器同时工作。 ### 核心类: NtcThermistor #### 构造函数 ```cpp NtcThermistor(int pin1, int pin2, int pin3, float referenceResistance = 10000.0, float ntcNominalResistance = 10000.0, float ntcBetaValue = 3950.0, float referenceTemperature = 25.0, int adcResolution = 4095); ``` #### 主要方法 - `updateTemperatures()`: 更新所有温度读数 - `getTemperature1()`, `getTemperature2()`, `getTemperature3()`: 获取各路温度值 - `getTemperature1String()`, `getTemperature2String()`, `getTemperature3String()`: 获取格式化的温度字符串 #### 计算原理 使用标准NTC热敏电阻计算公式: ``` 1/T = 1/T0 + 1/B * ln(R/R0) ``` 其中: - T: 当前温度(开尔文) - T0: 标称温度(开尔文,默认25°C) - B: NTC的Beta值(默认3950) - R: 当前电阻值 - R0: 标称电阻值(默认10kΩ) ## 继电器控制模块 (RelayController) ### 功能概述 继电器控制模块实现了多种控制逻辑,包括温度条件控制和定时任务控制,并新增了温度滞后控制功能。 ### 核心类: RelayController #### 构造函数 ```cpp RelayController(int pin22, int pin23, int pin4); ``` #### 主要方法 - `begin()`: 初始化继电器模块 - `controlByTempConditions()`: 根据温度条件控制继电器 - `handleTimedTasks()`: 处理定时任务 - `updateNtpTime()`: 更新网络时间 - `getPowerOnTime()`: 获取系统开机时间 #### 控制逻辑详解 ##### 温度条件控制 ```cpp void RelayController::controlByTempConditions(float tempGpio2, float tempGpio3, float tempGpio6, float diffThreshold, float gpio6High, float gpio6Low, float highTempOn, float highTempOff) ``` ###### 新增温度滞后控制(高温控制) - 当GPIO6温度高于`highTempOn`(默认35°C)时,开启继电器22并标记保持状态 - 当GPIO6温度低于`highTempOff`(默认25°C)且已触发保持状态时,才关闭继电器22 - 这种控制方式可以避免在临界温度点频繁开关继电器 ###### 原有温度差控制逻辑 - 当GPIO2和GPIO3温度差小于`-diffThreshold`(默认-15°C)且GPIO6温度高于`gpio6High`(默认35°C)时,开启继电器22 - 当GPIO2和GPIO3温度差大于`diffThreshold`(默认15°C)且GPIO6温度低于`gpio6Low`(默认15°C)时,开启继电器23 - 注意:原有控制逻辑仅在未触发高温保持时生效 ##### 定时任务控制 ```cpp void RelayController::handleTimedTasks(float currentGpio6Temp) ``` - 每天8点开启继电器4,持续15分钟 - 记录继电器22的开启时间和温度,用于超时保护 #### 安全机制 1. 继电器初始状态为高阻态(HIGH_Z) 2. 继电器22具有超时保护机制 3. 系统支持无WiFi运行,不影响基本控制功能