项目功能:
温湿度采集 (DHT11/SHT30)
光照检测 (光敏电阻 + ADC)
烟雾检测 (MQ-2 传感器 + ADC)
数据显示 (OLED/I2C)
异常报警 (蜂鸣器 + LED)
数据存储 (SD 卡)
远程传输 (ESP8266/WiFi)
硬件连接:
DHT11:PA0 (ADC)、PB0 (GPIO 控制)
光敏电阻:PA1 (ADC)
烟雾传感器:PA2 (ADC)
OLED:I2C(PB6-SCL, PB7-SDA)
蜂鸣器:PA3 (PWM 控制)
ESP8266:USART2(TX-PA2, RX-PA3)
SD 卡:SPI (PA5-SCK, PA6-MISO, PA7-MOSI, PB4-SS)
软件架构:
多任务调度 (基于 SysTick 中断):
100ms:读取传感器数据
500ms:更新 OLED 显示
1s:数据存储到 SD 卡
5s:数据上传至云端
核心代码:(温湿度读取 + 显示)
// 主函数
int main(){
// 初始化所有模块
SysTick_Init(72); // 系统滴答定时器(1ms)
DHT11_Init(); // DHT11初始化
ADC1_Init(); // ADC初始化(光敏电阻、烟雾)
I2C1_Init(); // I2C初始化(OLED)
OLED_Init(); // OLED初始化
USART2_Init(); // USART2初始化(ESP8266)
SD_Init(); // SD卡初始化
float temp=0, humi=0; // 温湿度变量
u16 light=0; // 光照强度变量
float lat=0, lon=0, alt=0;// 经纬度、海拔变量
u32 systick_cnt=0; // 系统滴答计数
while(1){
// 100ms任务:更新OLED显示
if(systick_cnt % 100 == 0){
DHT11_Read_Data(&temp, &humi); // 读取温湿度
light = ADC_Get_Light(); // 读取光照
OLED_Display_Data(temp, humi, light); // OLED显示
}
// 1s任务:存储数据到SD卡
if(systick_cnt % 1000 == 0){
SD_Write_Log(temp, humi, light);
}
// 5s任务:上传数据到服务器
if(systick_cnt % 5000 == 0){
USART2_Send_Data(temp, humi, light);
}
systick_cnt++;
}
}