CODE_DOCUMENTATION.md 5.6 KB

代码详细文档

主程序文件 (sketch_sep25a.ino)

功能概述

主程序文件负责初始化各个模块并协调它们的工作。程序采用非阻塞式设计,确保即使WiFi未连接也能正常运行。

主要组件

  1. WiFiConfigurator: WiFi配置管理器
  2. NtcThermistor: NTC温度传感器管理器
  3. RelayController: 继电器控制器

核心逻辑

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

构造函数

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

构造函数

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

构造函数

RelayController(int pin22, int pin23, int pin4);

主要方法

  • begin(): 初始化继电器模块
  • controlByTempConditions(): 根据温度条件控制继电器
  • handleTimedTasks(): 处理定时任务
  • updateNtpTime(): 更新网络时间
  • getPowerOnTime(): 获取系统开机时间

控制逻辑详解

温度条件控制
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
  • 注意:原有控制逻辑仅在未触发高温保持时生效
定时任务控制
void RelayController::handleTimedTasks(float currentGpio6Temp)
  • 每天8点开启继电器4,持续15分钟
  • 记录继电器22的开启时间和温度,用于超时保护

安全机制

  1. 继电器初始状态为高阻态(HIGH_Z)
  2. 继电器22具有超时保护机制
  3. 系统支持无WiFi运行,不影响基本控制功能