STM32单片机wifi云平台+温度+烟雾+火焰+短信+蜂鸣器 源程序原理图

本文主要是介绍STM32单片机wifi云平台+温度+烟雾+火焰+短信+蜂鸣器 源程序原理图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.     整体设计

2.     液晶显示

3.     Ds18b20温度传感器

4.     Mq2烟雾传感器

5.     火焰传感器传感器

6.     蜂鸣器驱动控制

7.     按键

8.     Gsm短信模块

9.     Esp8266wifi模块

10、源代码

11、资料内容

资料下载地址:STM32单片机wifi云平台+温度+烟雾+火焰+短信+蜂鸣器 源程序原理图

1.     整体设计

设计由stm32f103c8t6单片机为控制核心

2.     液晶显示

单片机通过iic接口(pa6、pa7)与oled12864的液晶显示屏(scl、sda)连接,驱动液晶数据和阈值。

3.     Ds18b20温度传感器

Ds18b20温度传感器是单总线接口,把数据端接到单片机的pb9管脚,通过传感器协议读取温度值。


 

4.     Mq2烟雾传感器

Mq2传感器输出模电压会随着烟雾浓度的增大而增大。单片机通过模拟量采集管脚PA0采集mq2传感器输出的电压值,然后单片机通过计算把0-vcc电压转化成0-100%烟雾浓度。


 

5.     火焰传感器传感器

火焰传感器是数字量do输出,当检测到有明火时输出低电平0,无明火时输出高电平1。单片机通过io口pa6读取火焰传感器状态。

6.     蜂鸣器驱动控制

如果蜂鸣器接电源3.3v和地,蜂鸣器有电就会发声。1k电阻是限流电阻。单片机通过控制pa7管脚输出高低电平,从而达到控制风扇转动的效果。单片机输出高电平1时,三极管导通,蜂鸣器接地,蜂鸣器响。输出低电平0时,三极管截至不导通,蜂鸣器没有接地,蜂鸣器不响。


7.     按键

单片机io口接按键,按键按下的接地。Io口读取到低电平0,按键松开时,由于单片机有内置上拉电阻,Io口读取到高电平1。其他两个按键原理一样。

8.     Gsm短信模块

Sim900a gsm短信模块是通过串口通讯的,将单片机串口1发送端pa9接到gsm模块的接收端rxd,然后单片机通过at指令控制gsm模块发送短信。

9.     Esp8266wifi模块

8266是串口控制得模块,单片机通过串口1(pa9和pa10)与wifi模块通讯,从而控制wifi模块工作。首先wifi模块上电自动连接热点,然后连接onenet云平台得ip地址,通过mqtt协议登录云平台设备,订阅app(订阅了才能接收到app下发得信息)。单片机会定时上传数据(以mcu得身份发布数据)到onenet云平台,在app订阅了mcu设备得前提下,云平台接收到单片机上传得数据后会自动转发到app显示。反之app下发数据过程也一样。

10、源代码

#include "stm32f10x.h" //头文件
#include "./usart/bsp_usart1.h"
#include "./OLED_I2C/OLED_I2C.h"
#include "./delay/delay.h"
#include "adc.h"
#include "string.h"
#include "bsp_ds18b20.h"
#include "./TIMER/timer.h"#define  Speaker   PAout(7)//pa7接蜂鸣器#define   Key1         PBin(12)//按键
#define   Key2         PBin(13)//按键
#define   Key3         PBin(14)//按键
#define   HY         PAin(6)//火焰传感器TIM_TimeBaseInitTypeDef  TIM3_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM3_OCInitStructure; void DelayStm32(__IO u32 nCount)
{for(; nCount != 0; nCount--);
} 
u16 Time_1MS=0;
u16 TX_10MS=0;
u16 A0Value = 0; //烟雾值
u16 Ds18b20Value; //温度
u16 Cnt=0;
u8 AlarmT=35; //温度阈值
u8 AlarmM=60; //烟雾阈值char dispBuff[10];u8 FlagUpData = 0;
u8 FlagFS = 0;       //风扇手动标志位
u8 FlagDelayA = 0;  //继电器手动标志位
u8 StateDelayA = 0; //继电器状态
u8 StateFS = 0;     //风扇状态u8  Stm32[17];
u16 KeyCnt = 0;
u8 FlagSet=0; //按键设置标志位
u8 FlagAlarm=0; //告警标志位
u8 RxBuf1[32];
u8 RxBuf2[32];
u8 RxBuf3[32];  //串口3数据缓存
u8 pass[11];/**********************MQTTdata***********************/
char MqttDataDL[37]=
{         0x10, 0x23, 0x00, 0x04, 0x4D, 0x51, 0x54, 0x54, 0x04, 0xC0, 0x00, 0x78, 0x00, 0x0A, 0x31, 0x30, 0x36, 0x35, 0x36, 0x30, 0x31, 0x35, 0x35, 0x39, 0x00, 0x06, 0x35, 0x38, 0x39, 0x35, 0x35, 0x34, 0x00, 0x03, 0x6D, 0x63, 0x75 };//mqtt登录数组char MqttDataDY[10]=
{0x82, 0x08, 0x00, 0x02, 0x00, 0x03, 'a', 'p', 'p', 0x00
};//mqtt订阅数组char MqttDataFB[24]=
{0x30, 0x16, 0x00, 0x03, 0x6D, 0x63, 0x75, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};//mqtt发布数组void SendASC1(u8 d) //串口1发送一个字节
{USART_SendData(USART1, d);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);                                
}void SendASC2(u8 d)   //串口2发送一个字节
{USART_SendData(USART2, d);while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);                                
}void SendASC3(u8 d)
{USART_SendData(USART3, d);while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);                                
}void DengLu(void) //mqtt登录函数
{u8 k=0;printf("AT+CIPSEND=37\r\n");DelayS(1);for(k=0; k<37; k++){SendASC1(MqttDataDL[k]);}
}void DingYue(void)  //mqtt订阅函数
{u8 k=0;printf("AT+CIPSEND=10\r\n");DelayS(1);for(k=0; k<10; k++){SendASC1(MqttDataDY[k]);}
}void FaBu(void)  //mqtt发布函数
{u8 k=0;printf("AT+CIPSEND=24\r\n");DelayS(1);for(k=0; k<24; k++){SendASC1(MqttDataFB[k]);}
}/*************************************************/void GPIO_Config(void)  //io口配置
{ GPIO_InitTypeDef GPIO_InitStructure; /* GPIOA and GPIOA clock enable */ //pb8、pb12、pb13、pb14设置为输入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8 |GPIO_Pin_12 | GPIO_Pin_13  | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);  /* GPIOA and GPIOA clock enable */ //pa6设置为输入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6  ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* GPIOA and GPIOA clock enable */  //pa7.pa4配置为推免输出RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 |GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* GPIOA and GPIOA clock enable */  //pc13配置为推免输出RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); } void DispOled(void)//液晶显示函数
{//显示温度和阈值sprintf(dispBuff,"WenDu=%d%d.%dC %d%dC", Ds18b20Value %1000/100, Ds18b20Value%100/10, Ds18b20Value%10, AlarmT%100/10, AlarmT%10);  OLED_ShowStr(0,0,dispBuff,2);//显示烟雾和阈值sprintf(dispBuff,"YanWu = %0.2d%% %0.2d%%",A0Value,AlarmM);  OLED_ShowStr(0,2,dispBuff,2);//显示接收短信的号sprintf(dispBuff,"%d%d%d%d%d%d%d%d%d%d%d",pass[10],pass[9],pass[8],pass[7],pass[6],pass[5],pass[4],pass[3],pass[2],pass[1],pass[0]);OLED_ShowStr(0,6,dispBuff,2);}void SendDx(void) //发送短信函数
{Uart3_printf("AT+CSCS=\"GSM\"\r\n");DelayS(1);Uart3_printf("AT+CMGF=1\r\n");DelayS(1);/*******************************************************///printf("AT+CMGS=\"18xxxxxxxx\"\r\n");Uart3_printf("AT+CMGS=\"");   //按设置的号码发送短信SendASC3(pass[10]+0x30);SendASC3(pass[9]+0x30);SendASC3(pass[8]+0x30);SendASC3(pass[7]+0x30);  SendASC3(pass[6]+0x30);   SendASC3(pass[5]+0x30);SendASC3(pass[4]+0x30);SendASC3(pass[3]+0x30);SendASC3(pass[2]+0x30);SendASC3(pass[1]+0x30);SendASC3(pass[0]+0x30);Uart3_printf("\"\r\n");/*******************************************************/DelayS(1);Uart3_printf("Have a Fire!!!"); //发送短信的内容DelayS(1);SendASC3(0x1A);  //启动发送短信DelayS(1);
}int main(void) //主函数
{ USART1_Config();  //串口初始化GPIO_Config();//io口初始化Adc_Init();//ad初始化DelayInit(); //定时函数初始化Speaker = 0;//关闭输出设备I2C_Configuration();//iic初始化OLED_Init();//液晶初始化OLED_Fill(0xFF);DelayS(1);DelayS(1);DelayS(1);DelayS(1);printf("AT\r\n");DelayS(1);printf("AT\r\n");DelayS(1);printf("AT\r\n");DelayS(1);printf("AT+CWMODE=3\r\n");  //8266设置为模式3DelayS(1);printf("AT+CWJAP=\"win\",\"123123123\"\r\n");  //连接热点 DelayS(1);DelayS(1);DelayS(1);DelayS(1);DelayS(1);while(DS18B20_Init()); //温度初始化DelayS(1);Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10); //上电连续读取几次温度值使其稳定DelayStm32(0xFFFFF);Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10);DelayStm32(0xFFFFF);Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10);DelayStm32(0xFFFFF);Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10);DelayStm32(0xFFFFF);Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10);DelayStm32(0xFFFFF);DelayS(1);DelayS(1);DelayS(1);DelayS(1);DelayS(1);DelayS(1);/*******************************************************/printf("AT+CIPSTART=\"TCP\",\"183.230.x.x\",6002\r\n");  //连接云平台ip和端口号/*******************************************************/DelayS(1);DelayS(1);DelayS(1);DelayS(1);DelayS(1);DelayS(1);DengLu();   //调用mqtt登录函数DelayS(1);DelayS(1);DelayS(1);DingYue();   //调用mqtt订阅函数DelayStm32(0xFFFFF);OLED_Fill(0x00);DelayStm32(0xFFFFF);TIM4_Int_Init(9,7199); //定时器初始化while(1){ Ds18b20Value = (u16)(DS18B20_GetTemp_SkipRom ( )*10);//读取稳定A0Value = (Get_Adc_Average(0,20)*100/4096);//读取烟雾DispOled(); //调用显示函数MqttDataFB[10] = Ds18b20Value/100;  //把要上传得数据填进mqtt发布数据MqttDataFB[11] = Ds18b20Value%100/10;MqttDataFB[12] = Ds18b20Value%10;MqttDataFB[13] = A0Value;MqttDataFB[14] = 0;MqttDataFB[15] = 0;MqttDataFB[16] = FlagAlarm;if(FlagUpData==1)  //上传数据时间到,上传数据{FlagUpData = 0; FaBu();  //发布数据}        if( (Ds18b20Value>(AlarmT*10))||(A0Value>AlarmM)||(HY) ) //如果温度或者烟雾大于阈值或者有火焰{Speaker = 1; //蜂鸣器响if(FlagAlarm==0) //每个告警值发送一次短信{SendDx(); //调用发送短信函数}FlagAlarm = 1;}else{FlagAlarm = 0;Speaker = 0;}if(!Key1) //按键1 {while(!Key1);pass[0]++;if(pass[0]>=10) pass[0]=0;}if(!Key2)//按键2 {while(!Key2);pass[10] = pass[9];pass[9] = pass[8];pass[8] = pass[7];pass[7] = pass[6];pass[6] = pass[5];pass[5] = pass[4];pass[4] = pass[3];pass[3] = pass[2];pass[2] = pass[1];pass[1] = pass[0];pass[0] = 0;}        /**************************************************************************************/
/**************************************************************************************/}                        
}void TIM4_IRQHandler(void) //定时中断每1ms中断一次
{         if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)//?????{                                    TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //??TIM4??????  TX_10MS++;if(TX_10MS>=5000){TX_10MS = 0;FlagUpData = 1;}        }            
}void USART1_IRQHandler(void)
{uint8_t ucTemp;if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){        ucTemp = USART_ReceiveData(USART1);RxBuf1[0] = RxBuf1[1];RxBuf1[1] = RxBuf1[2];RxBuf1[2] = RxBuf1[3]; RxBuf1[3] = ucTemp;if( (RxBuf1[0]=='F')&&(RxBuf1[1]=='t') )  //Ftxx 设置温度阈值{AlarmT = (RxBuf1[2]-0x30)*10 + (RxBuf1[3]-0x30);}else if( (RxBuf1[0]=='F')&&(RxBuf1[1]=='m') )  //Fmxx  设置烟雾阈值{AlarmM = (RxBuf1[2]-0x30)*10 + (RxBuf1[3]-0x30);}}         
}void USART2_IRQHandler(void)
{uint8_t ucTemp2;if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET){        ucTemp2= USART_ReceiveData(USART2);RxBuf2[0] = RxBuf2[1];RxBuf2[1] = RxBuf2[2];RxBuf2[2] = RxBuf2[3]; RxBuf2[3] = ucTemp2;if( (RxBuf2[0]=='F')&&(RxBuf2[1]=='T') ) {        }}         
}void USART3_IRQHandler(void)
{uint8_t ucTemp3;if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET){        ucTemp3= USART_ReceiveData(USART3);RxBuf3[0] = RxBuf3[1];RxBuf3[1] = RxBuf3[2];RxBuf3[2] = RxBuf3[3];RxBuf3[3] = ucTemp3;}}

11、资料内容

这篇关于STM32单片机wifi云平台+温度+烟雾+火焰+短信+蜂鸣器 源程序原理图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959405

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud