1. 系统概述
本系统为一个基于STM32单片机的物联网环境检测系统,结合温湿度传感器、光照传感器、烟雾传感器及ESP8266 WiFi通信模块,构建了一个能够实时采集环境信息并上传至OneNet云平台的智能监测平台。用户可通过网页或手机APP实时查看各类环境参数,实现对温度、湿度、光照强度、烟雾浓度的远程监控,为智慧农业、智慧家居、智慧校园等场景提供数据支撑。
该系统主要分为三大部分:功能模块设计、电路设计、程序设计,下面将逐一进行详细介绍。
2. 功能介绍
本系统具有如下核心功能:
- 实时采集环境数据,包括温度、湿度、光照强度、烟雾浓度;
- 实时通过ESP8266 WiFi模块上传数据至OneNet云平台;
- 支持用户通过网页端或手机APP远程查看数据;
- 具有较强的可扩展性,便于添加更多传感器或控制模块。
这些功能的实现依赖于STM32单片机的高速处理能力、ESP8266的网络通信能力,以及各类环境传感器对不同物理量的敏感检测能力。
3. 电路设计
系统硬件电路由以下几个子模块组成:
3.1 STM32最小系统电路
STM32F103C8T6为核心控制芯片,提供强大的数据处理与外设接口能力。其最小系统包括:
- 电源输入(3.3V稳压)
- 时钟电路(8MHz晶振)
- 下载接口(SWD或串口)
- 复位电路(上拉电阻+按钮)
此部分为整个系统的核心,协调各传感器与WiFi模块的通讯、处理与控制。
3.2 温湿度传感器模块(DHT11)
DHT11是一款数字式温湿度传感器,使用单总线协议与STM32通信。其特点为:
- 测量范围:温度050°C,湿度2090%RH;
- 测量精度:±2°C(温度),±5%RH(湿度);
- 通信方式:单总线,需定时采样与校验。
模块引脚简单,仅需VCC、GND和数据线,与STM32的GPIO口相连即可。
3.3 光照传感器模块(模拟型光敏电阻)
使用光敏电阻通过分压电路转化为电压信号,接入STM32的ADC通道实现光照强度测量。该模块特点:
- 模拟量输出;
- 对环境光线变化灵敏;
- 通常与10KΩ电阻组成分压器。
STM32通过ADC读取电压即可判断环境亮度等级。
3.4 烟雾传感器模块(MQ-2)
MQ-2气体传感器用于检测空气中的烟雾浓度,输出包括:
- 模拟信号(烟雾浓度对应电压);
- 数字信号(超过设定浓度时为高电平)。
在本系统中使用模拟输出接入ADC通道,提高检测精度。
3.5 ESP8266 WiFi模块
ESP8266模块用于将采集到的数据上传到云平台。模块支持:
- 802.11 b/g/n 协议;
- AT命令控制;
- 与STM32通过串口通信;
- 模块需配置SSID、密码及OneNet平台通信协议。
ESP8266是连接本地设备与云端的重要桥梁。
3.6 电源模块
系统采用5V供电,经过AMS1117稳压芯片降压至3.3V供STM32与ESP8266使用。为了系统稳定运行,需注意:
- 电源滤波电容;
- 模块之间地线共用;
- ESP8266电流需求高,需提供足够电流。
4. 程序设计
程序设计是本系统实现功能的关键部分,主要包括各模块初始化、数据采集、数据上传、通信处理等子模块。
4.1 主函数设计
主函数负责系统的初始化与主循环调度。
c
int main(void)
{
SystemInit();
DHT11_Init();
ADC_Config();
USART1_Init(115200);
ESP8266_Init();
while (1)
{
Read_Env_Data();
Upload_Data_To_OneNet();
Delay_ms(5000);
}
}
4.2 DHT11温湿度采集程序
c
void DHT11_ReadData(uint8_t* temperature, uint8_t* humidity)
{
// 初始化与发送起始信号
// 接收40位数据:8位湿度整数 + 8位湿度小数 + 8位温度整数 + 8位温度小数 + 8位校验位
// 简化后仅提取整数部分
}
此函数定时调用,读取DHT11的温度与湿度数据并存储在变量中供上传使用。
4.3 光照强度采集程序
c
uint16_t Read_Light_Intensity(void)
{
uint16_t adc_value = ADC_Read(LIGHT_SENSOR_CHANNEL);
return adc_value;
}
通过STM32的ADC模块读取光敏电阻的模拟电压值,换算为光照强度。
4.4 烟雾浓度采集程序
c
uint16_t Read_Smoke_Level(void)
{
uint16_t adc_value = ADC_Read(SMOKE_SENSOR_CHANNEL);
return adc_value;
}
同样使用ADC模块获取MQ-2传感器输出电压,用于判断当前空气中烟雾浓度。
4.5 ESP8266初始化程序
c
void ESP8266_Init(void)
{
USART_SendString("AT\r\n");
Delay_ms(1000);
USART_SendString("AT+CWMODE=1\r\n");
Delay_ms(1000);
USART_SendString("AT+CWJAP=\"YourSSID\",\"YourPassword\"\r\n");
Delay_ms(3000);
}
该初始化步骤用于配置ESP8266的工作模式与WiFi连接信息。
4.6 上传数据到OneNet
c
void Upload_Data_To_OneNet(void)
{
char data_buffer[128];
sprintf(data_buffer, "{\"datastreams\":[{\"id\":\"temp\",\"datapoints\":[{\"value\":%d}]},"
"{\"id\":\"humi\",\"datapoints\":[{\"value\":%d}]},"
"{\"id\":\"light\",\"datapoints\":[{\"value\":%d}]},"
"{\"id\":\"smoke\",\"datapoints\":[{\"value\":%d}]}]}",
temperature, humidity, light_intensity, smoke_level);
ESP8266_SendTo_OneNet(data_buffer);
}
该函数负责格式化各项环境数据并通过ESP8266上传至OneNet平台,符合OneNet的MQTT或HTTP数据结构要求。
4.7 串口通信函数
c
void USART1_Init(uint32_t baudrate)
{
// USART1初始化配置波特率、数据位、停止位、校验等
}
STM32通过USART1与ESP8266进行数据交互。
4.8 延时函数
c
void Delay_ms(uint32_t ms)
{
// 基于SysTick或定时器实现的毫秒级延迟
}
用于定时控制传感器采样与上传周期,避免数据重复或阻塞。
5. 总结
本项目完整实现了一个基于STM32单片机的智能环境监测系统,系统稳定、功能丰富,具有如下优势:
- 实时监控:可实时监测温度、湿度、光照强度与烟雾浓度;
- 云端管理:依托OneNet云平台实现远程数据查看;
- 可视化展示:配合网页或APP界面便于用户操作;
- 模块化设计:系统结构清晰,便于扩展与维护;
- 实用性强:适用于家庭环境监测、智慧农业、环境科研等多种场景。
未来可进一步增加LCD显示、语音播报、报警功能、自动化执行等模块,扩展系统的智能化水平。通过对物联网平台深入应用,推动智慧生活向更高水平发展。