主程序文件负责初始化各个模块并协调它们的工作。程序采用非阻塞式设计,确保即使WiFi未连接也能正常运行。
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配置模块提供了完整的WiFi管理功能,包括:
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(): 检查是否已连接WiFigetIPAddress(): 获取当前IP地址NTC温度传感器模块负责读取和处理NTC热敏电阻的温度数据,支持多路传感器同时工作。
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)
其中:
继电器控制模块实现了多种控制逻辑,包括温度条件控制和定时任务控制,并新增了温度滞后控制功能。
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)
highTempOn(默认35°C)时,开启继电器22并标记保持状态highTempOff(默认25°C)且已触发保持状态时,才关闭继电器22-diffThreshold(默认-15°C)且GPIO6温度高于gpio6High(默认35°C)时,开启继电器22diffThreshold(默认15°C)且GPIO6温度低于gpio6Low(默认15°C)时,开启继电器23void RelayController::handleTimedTasks(float currentGpio6Temp)