欢迎光临
我们一直在努力

基于STM32物联网WiFi云平台温湿度烟雾报警器设计

基于STM32物联网WiFi云平台温湿度烟雾报警器设计

本设计包含proteus仿真+程序代码+设计报告+讲解视频

一、开发环境

仿真图:proteus 8.17

程序编译器:keil 5

编程语言:C语言

设计编号:C0134

二、主要功能

STM32物联网WiFi云平台温湿度烟雾报警器仿真设计

  • 烟雾采集传感器选用MQ-2,由于该传感器输出的是模拟信号,STM32内部ADC将模拟信号转为数字信号。
  • proteus仿真使用电位器模拟;

  • 温湿度采集使用DHT11数字传感器;

  • 显示设备使用OLED,可以在屏幕上显示实时烟雾浓度值、温湿度值等信息;

  • 报警模块则采用蜂鸣器和LED灯组成,烟雾浓度超过阈值蜂鸣器会鸣叫报警,灯光闪烁;

  • 系统带有通风风扇,烟雾浓度高的时候开启;

  • 设计采用1个按键作为操作输入设备,可以用来关闭报警;

  • 6.通过WIFI模块ESP01S将数据实时上传至物联网云平台,仿真中使用串口通信模拟。

    实物图

    img

    资料下载链接:

    KEY_C0134 STM32远程WIFI温湿度烟雾监测报警OLED显示

    链接: https://pan.baidu.com/s/1a5ZDB_Z1Ac4AYOm4tLU0rg?pwd=yzis

    提取码: yzis

    以下为本设计资料展示:

    三、仿真设计

    打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

    img

    img

    四、程序代码

    程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序有注释可以结合讲解视频理解。

    img

    //单片机头文件
    #include "stm32f10x.h"

    //网络协议层
    #include "onenet.h"

    //网络设备
    #include "esp8266.h"

    //硬件驱动
    #include "delay.h"
    #include "usart.h"
    #include "beep.h"
    #include "led.h"

    #include "fan.h"
    #include "key.h"
    #include "dht11.h"
    #include "oled.h"
    #include "mq2.h"
    #include "fan_pwm.h"

    //C库
    #include <string.h>
    #include <stdio.h>

    #define ESP8266_ONENET_INFO"AT+CIPSTART=\\"TCP\\",\\"mqtts.heclouds.com\\",1883\\r\\n"

    void Hardware_Init(void);
    void Display_Init(void);
    void Refresh_Data(void);

    u8 temp,humi,fan_adj;
    float mq2_vol,smog_th=200.0;
    uint8_t Fan_Status=0;
    uint8_t Beep_Status;

    uint8_t Status_Change;

    /*
    ************************************************************
    *函数名称:main
    *
    *函数功能:
    *
    *入口参数:无
    *
    *返回参数:0
    *
    *说明:
    ************************************************************
    */

    int main(void)
    {
    DHT11_Data_TypeDef DHT11_Data;
    unsigned short timeCount = 0;//发送间隔变量

    unsigned char *dataPtr = NULL;

    uint8_t smog_lock=0;

    Hardware_Init();//初始化外围硬件

    ESP8266_Init();//初始化ESP8266

    ////UsartPrintf(USART_DEBUG, "Connect MQTTs Server…\\r\\n");
    //OLED_Clear(); OLED_ShowString(0,0,"Connect MQTTs Server…",16);
    //while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
    //DelayXms(500);
    ////UsartPrintf(USART_DEBUG, "Connect MQTT Server Success\\r\\n");
    //OLED_ShowString(0,4,"Connect MQTT Server Success",16); DelayXms(500);

    //OLED_Clear(); OLED_ShowString(0,0,"Device login …",16);
    //while(OneNet_DevLink())//接入OneNET
    //{
    //ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT");
    //DelayXms(500);
    //}

    //OneNET_Subscribe();

    Display_Init();
    //Led_Set(LED_ON);
    mq2_vol=65;
    temp=25;
    humi=45;
    while(1)
    {

    if(++timeCount >= 100)//发送间隔5s
    {
    //DHT11_Read_Data(&temp,&humi);
    if(DHT11_Read_TempAndHumidity(&DHT11_Data) == SUCCESS) {
    humi = DHT11_Data.humi_int;
    temp = DHT11_Data.temp_int;
    }
    //UsartPrintf(USART_DEBUG, "OneNet_SendData\\r\\n");
    OneNet_SendData();//发送数据

    timeCount = 0;
    ESP8266_Clear();

    mq2_vol=MQ2_GetData_PPM();
    UsartPrintf(USART_DEBUG, "mq2_data—-%.2f\\r\\n",mq2_vol);
    if(Status_Change){
    Status_Change=0;
    Display_Init();
    }
    }

    dataPtr = ESP8266_GetIPD(0);
    if(dataPtr != NULL)
    OneNet_RevPro(dataPtr);

    Refresh_Data();

    /***利用smog_lock进行自锁操作,避免重复无效控制,超阈值后,只执行一次,实现蜂鸣器可以被手动按停,
    直到降到阈值以下,才解锁,进入下轮阈值检测***/

    if(mq2_vol>smog_th && smog_lock==0)
    {
    smog_lock = 1;
    Fan_Set(FAN_ON);
    Beep_Set(BEEP_ON);
    }
    if(mq2_vol<smog_th && smog_lock==1)
    {
    smog_lock = 0;
    }

    if(smog_lock && (timeCount>50)){
    Led_Set(LED_ON);
    }else{
    Led_Set(LED_OFF);
    }

    DelayMs(10);

    }

    }
    /*
    ************************************************************
    *函数名称:Hardware_Init
    *
    *函数功能:硬件初始化
    *
    *入口参数:无
    *
    *返回参数:无
    *
    *说明:初始化单片机功能以及外接设备
    ************************************************************
    */

    void Hardware_Init(void)
    {

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断控制器分组设置

    Delay_Init();//systick初始化

    Usart1_Init(115200);//串口1,打印信息用

    Usart2_Init(115200);//串口2,驱动ESP8266用

    Key_Init();
    Led_Init();
    Beep_Init();
    DHT11_Init();
    OLED_Init();//初始化OLED

    //while(DHT11_Init())
    //{
    ////UsartPrintf(USART_DEBUG, "DHT11 Error \\r\\n");
    //OLED_ShowString(0,0,"DHT11 Error",16);
    //DelayMs(1000);
    //}

    Fan_Init();

    UsartPrintf(USART_DEBUG, " Hardware init OK\\r\\n");
    OLED_Clear(); OLED_ShowString(0,0,"Hardware init OK",16); DelayMs(1000);

    }

    void Display_Init(void)
    {

    OLED_Clear();

    OLED_ShowCHinese(0,0,1);//温
    OLED_ShowCHinese(18,0,2);//度
    OLED_ShowCHinese(36,0,0);//:
    OLED_ShowCHinese(72,0,3);//℃

    OLED_ShowCHinese(0,3,4);//湿
    OLED_ShowCHinese(18,3,5);//度
    OLED_ShowCHinese(36,3,0);//:
    OLED_ShowString(72,3,"%",16);//%

    OLED_ShowCHinese(0,6,10);//烟
    OLED_ShowCHinese(18,6,11);//雾
    OLED_ShowCHinese(36,6,0);//:

    }

    void Refresh_Data(void)
    {
    static u8 changeflag = 0;
    static u8 last_status = 0; // 记录上一次的Status_Change状态
    char buf[5];
    if(Status_Change) {
    // 如果状态从非Status_Change变为Status_Change,才执行OLED_Clear()
    if(last_status == 0) {
    OLED_Clear();
    }

    OLED_ShowCHinese(0,4,10); //烟
    OLED_ShowCHinese(18*1,4,11);//雾
    OLED_ShowCHinese(18*2,4,12);//阈
    OLED_ShowCHinese(18*3,4,13);//值
    OLED_ShowCHinese(18*4,4,0); //:

    memset(buf, 0, sizeof(buf));
    sprintf(buf, "%4.0fppm", smog_th);
    OLED_ShowString(18*2,6,(u8*)buf,16); //烟雾阈值
    }
    else {
    // 原有的其他代码…
    sprintf(buf, "%2d", temp);
    OLED_ShowString(54,0,(u8*)buf,16); //温度值

    sprintf(buf, "%2d", humi);
    OLED_ShowString(54,3,(u8*)buf,16); //湿度值

    sprintf(buf, "%4.0f PPM", mq2_vol);
    OLED_ShowString(54,6,(u8*)buf,16); //烟雾测量值
    }

    last_status = Status_Change; // 更新状态记录
    }

    程序流程图:

    img

    五、设计说明书

    10761字,内容包括硬件设计、软件设计、结论等。

    img

    六、资料清单&下载链接

    img

    资料下载链接:

    链接: https://pan.baidu.com/s/1a5ZDB_Z1Ac4AYOm4tLU0rg?pwd=yzis

    提取码: yzis

    赞(0)
    未经允许不得转载:171主机测评 » 基于STM32物联网WiFi云平台温湿度烟雾报警器设计
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址