基于STM32的物联网OneNet火灾报警系统设计
1. 系统功能介绍
本设计的主题为"基于STM32的物联网OneNet火灾报警系统",旨在利用物联网技术实现火灾的实时监测、报警与远程数据上传。系统以STM32F103单片机为核心控制器,通过温湿度传感器、火焰传感器实时采集环境信息。当检测到异常情况时,系统会立即触发蜂鸣器报警并点亮LED警示灯,同时将监测数据通过WiFi模块上传至中国移动OneNet云平台,实现远程火灾预警与环境监控。
系统主要功能如下:
- 温湿度实时检测:利用温湿度传感器实时采集环境温度与湿度数据,并在OLED屏幕上显示当前值。
- 火焰检测与报警:通过火焰传感器检测环境中是否存在火焰或强光变化,一旦检测到火焰,蜂鸣器与LED灯立即报警。
- 物联网数据上传:利用ESP8266 WiFi模块实现与中国移动OneNet物联网平台的数据交互,将温湿度、火焰状态等参数上传至云端。
- 远程监控:用户可通过手机或网页端查看实时的火灾环境数据。
- 本地显示与状态指示:OLED显示模块实时显示温湿度、火焰状态与网络连接状态,LED灯闪烁指示不同系统状态。
该系统集成了传感器采集、电路控制、数据通信和云端监控等功能,具备响应快速、可扩展性强、操作简便的特点,具有较高的实用价值和教学示范意义。
2. 系统电路设计
整个系统由以下几个模块组成:STM32F103单片机最小系统、DHT11温湿度传感器电路、火焰传感器模块、蜂鸣器与LED报警电路、ESP8266 WiFi通信模块、电源模块和OLED显示模块。下面将详细介绍各个模块的电路组成与工作原理。
2.1 STM32F103最小系统电路
STM32F103单片机是系统的核心控制部分,主要负责传感器数据采集、信号处理、逻辑判断和数据上传。
最小系统主要由以下部分组成:
- 主控芯片:选用STM32F103C8T6,内置Cortex-M3内核,主频72MHz,具有丰富的外设接口。
- 时钟电路:采用8MHz晶振作为系统时钟源,配合内部PLL倍频实现高频稳定运行。
- 复位电路:由按键、上拉电阻与电容组成,用于手动复位单片机。
- 供电系统:通过稳压芯片AMS1117-3.3V为主控芯片提供稳定的3.3V电源。
该部分为系统提供了稳定的控制平台,为外设通信与数据处理提供硬件基础。
2.2 DHT11温湿度传感器电路
DHT11是一种常用的数字温湿度传感器,具有体积小、响应快、价格低廉的特点。其通过单总线通信方式与STM32进行数据交互。
- 信号接口:DHT11共有三根引脚,分别为VCC、GND和DATA。DATA引脚通过上拉电阻接入STM32的GPIO端口,实现数据读写。
- 工作原理:传感器内部集成了电容式湿度传感器与NTC温度传感器,采集到的信号经过A/D转换后以数字信号输出。
- 通信协议:DHT11采用特定的时序通信协议,主控通过发送起始信号,DHT11响应并发送40位的数据,其中包括温度整数、湿度整数及校验位。
该模块能为系统提供实时的温湿度环境信息,是火灾早期监测的重要依据。
2.3 火焰传感器电路
火焰传感器用于检测火焰的存在,其通过红外敏感二极管感知火焰辐射光谱。
- 工作原理:火焰在燃烧时会释放特定波长(约760nm左右)的红外光,传感器通过滤波与放大电路检测该波段光信号。
- 信号输出:火焰传感器一般提供模拟量输出(AO)与数字量输出(DO),本系统选用DO口连接STM32,通过GPIO读取火焰状态信号。
- 报警触发:当火焰信号被检测到时,系统立即点亮红色LED并启动蜂鸣器报警。
火焰检测模块反应灵敏,能快速识别火焰出现,是系统的核心安全防护单元。
2.4 蜂鸣器与LED报警电路
报警模块由有源蜂鸣器与多色LED组成,用于在检测到火焰或异常温度时进行声光提示。
- 蜂鸣器:采用有源蜂鸣器,直接由STM32控制,通过高低电平信号驱动。
- LED指示灯:系统设置多种状态显示方式,如绿色表示正常、红色闪烁表示报警、黄色常亮表示网络未连接。
该模块通过GPIO口控制,能够及时提醒用户异常情况,增强系统的实时警示能力。
2.5 ESP8266 WiFi通信模块电路
ESP8266模块是系统连接OneNet物联网平台的关键部件。
- 通信方式:采用UART串口通信方式,TXD、RXD分别连接STM32的USART1接口。
- 供电电压:工作电压为3.3V,需注意与主控电平匹配。
- 工作原理:STM32通过AT指令控制ESP8266连接WiFi热点,并将传感器数据上传至OneNet平台。
ESP8266具备高性价比和良好的网络兼容性,能有效实现设备到云端的数据传输。
2.6 OLED显示模块电路
OLED显示模块用于显示实时监测到的温湿度、火焰状态以及网络连接信息。
- 通信接口:采用I2C通信方式,SCL与SDA分别连接STM32的PB6与PB7引脚。
- 显示内容:包含温度、湿度、火焰状态以及WiFi连接状态等。
- 刷新机制:系统通过定时任务定期刷新屏幕,确保显示数据实时更新。
OLED模块显示清晰、功耗低,适合嵌入式监测系统的使用。
3. 系统程序设计
本系统的软件部分采用模块化编程思路,主要包括主控程序、传感器数据采集模块、WiFi通信模块、显示模块与报警控制模块。整体程序采用Keil环境编写,C语言实现。
3.1 主程序设计
主程序负责系统初始化与主循环逻辑控制。包括时钟初始化、外设初始化、任务调度与数据上传。
c
int main(void)
{
SystemInit();
OLED_Init();
DHT11_Init();
FireSensor_Init();
ESP8266_Init();
Buzzer_Init();
LED_Init();
OLED_ShowString(0,0,"Fire Alarm System");
while(1)
{
DHT11_Read(&temperature, &humidity);
fire_status = FireSensor_Read();
OLED_ShowNum(0,2,temperature);
OLED_ShowNum(0,3,humidity);
if(fire_status == 1)
{
Buzzer_On();
LED_RedBlink();
}
else
{
Buzzer_Off();
LED_GreenOn();
}
ESP8266_SendData(temperature, humidity, fire_status);
delay_ms(2000);
}
}
3.2 温湿度检测程序设计
温湿度模块使用DHT11传感器,通过单总线协议读取温湿度值。
c
void DHT11_Read(uint8_t *temp, uint8_t *humi)
{
uint8_t buf[5];
DHT11_Start();
if(DHT11_Check() == 0)
{
for(uint8_t i=0;i<5;i++)
buf[i] = DHT11_ReadByte();
if(buf[4] == buf[0]+buf[1]+buf[2]+buf[3])
{
*humi = buf[0];
*temp = buf[2];
}
}
}
该程序通过严格的时序控制读取数据,并校验结果,确保采集的温湿度数据准确可靠。
3.3 火焰检测程序设计
火焰传感器模块采用数字输出方式,读取GPIO口电平即可判断火焰状态。
c
uint8_t FireSensor_Read(void)
{
return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1);
}
当检测到火焰信号为高电平时,系统将触发报警模块并上传数据。
3.4 蜂鸣器与LED控制程序
c
void Buzzer_On(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_10);
}
void Buzzer_Off(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
}
void LED_RedBlink(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_0);
delay_ms(200);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
void LED_GreenOn(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_1);
}
该模块通过GPIO口实现蜂鸣器与LED灯的灵活控制,用于不同状态下的警示显示。
3.5 ESP8266 WiFi通信与OneNet数据上传
WiFi模块通过串口通信与OneNet平台交互,使用标准AT指令实现网络连接与数据上传。
c
void ESP8266_SendData(uint8_t temp, uint8_t humi, uint8_t fire)
{
char data[64];
sprintf(data,"{\"temperature\":%d,\"humidity\":%d,\"fire\":%d}",temp,humi,fire);
USART_SendString(USART1, "AT+CIPSEND=0,");
USART_SendString(USART1, data);
USART_SendString(USART1, "\r\n");
}
程序将温湿度与火焰状态封装为JSON格式数据,发送至OneNet平台进行远程存储与显示。
3.6 OLED显示程序设计
OLED模块通过I2C接口显示实时信息。
c
void OLED_Display(uint8_t temp, uint8_t humi, uint8_t fire)
{
OLED_ShowString(0,0,"Fire Alarm");
OLED_ShowString(0,2,"Temp:");
OLED_ShowNum(60,2,temp);
OLED_ShowString(0,3,"Humi:");
OLED_ShowNum(60,3,humi);
if(fire)
OLED_ShowString(0,4,"Fire: YES!");
else
OLED_ShowString(0,4,"Fire: NO");
}
该模块保证系统实时显示环境信息,方便用户本地监控。
4. 总结
本设计通过STM32F103单片机、DHT11温湿度传感器、火焰传感器、ESP8266 WiFi模块以及OLED显示模块的协同工作,实现了火灾的实时监测、现场报警与物联网云端数据上传。系统具备响应迅速、稳定可靠、可扩展性强等特点,可广泛应用于智能建筑、仓库防火、实验室安全监控等场景,具有良好的实际应用价值与推广前景。