15单片机通过WIFI模块ESP8266实现手机远程监控可燃气体浓度
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

一,系统方案
1、方案描述
当烟雾报警系统处于正常环境中,系统会主动向手机终端发送实时温度,和当前环境中的可燃气体数值。当烟雾报警系统处于达到可燃气体检测设定值时或当温度达到预设定值时,单片机控制端会自动启动继电器进行断气和开窗指令,并且通过互联网向手机终端发送报警,提醒人们采取相应的指示。
2、原理框图3、设计好的实物图
4、设计系统原理图
二、系统软件设计
1、单片机软件设计
系统采用15单片机(51内核高速单片机内置8通道10位高速ADC,速度可达30万次/秒)
主函数展示:
main()
{

LCD1602_Init();  //初始化LCD
WriteString(0,0,"TEMP: ");//LCD中写入 TEMP:
WriteString(12,0,"C"); //LCD中写入 C
WriteString(0,1,"KAD:");//LCD中写入KAD
WriteString(10,1,"M%");//LCD中写入PPM
ADC_P11_init();//初始化ADC
esp8266_init(); //初始化ESP8266
delay1ms();  //一毫秒延时while(1)
{Process_receiveData(); //处理接收数据,并控制继电器操作LcdDisplayDS18B20(Ds18b20ReadTemp());//LCD显示ds18b20数据LcdDisplayADC(ADData); //LCD显示AD采集MQ-2数据ESP8266_Set("AT+CIPSEND=0,18");    //向esp8266发送传输18字节数据请求Delay100ms() ;    Temp_data(Ds18b20ReadTemp()); //获取ds18b20温度传感器数据ESP8266_ArraySends(ds18b20Wd_buf,8);        //发送ds18b20温度数组Delay100ms() ;ADC_data(ADData); //获取AD采集 数据ESP8266_ArraySends(   ADC_datas_buf,6); //发送AD采集数组Delay100ms() ;//AlertLogic();   处理接受设置上限值//ESP8266_ArraySends(AlertLogic_buf,3);返回上限数据结果    ESP8266_ArraySends(Recive_table,4);//返回接收数据Delay100ms() ;ControlLogic();}

}
串口初始化以及ESP8266初始化函数:
/*********************************************************************
名称: 初始化esp8266
作用: 配置esp8266参数
*********************************************************************/
void esp8266_init()
{
UsartConfiguration();
ms_delay(500);
/ESP8266_Set(“AT+CWMODE=1”);选择WiFi模式1
ms_delay(500);
ESP8266_Set(“AT+RST”);
ms_delay(1000);
ESP8266_Set("AT+CWJAP=“haqimeme”,“guoxuan@123"”);
ms_delay(3000);
ESP8266_Set("AT+CIPSTA=“192.168.1.113”,“192.168.1.1”,“255.255.255.0"”);
ms_delay(1000);
ESP8266_Set(“AT+RST”);
ms_delay(6000);
ESP8266_Set(“AT+CIPMUX=1”);
ms_delay(500);
//ESP8266_Set(“AT+CIFSR”); //查看ip地址
ESP8266_Set(“AT+CIPSERVER=1,8080”);
ms_delay(500);
ESP8266_Set(“AT+CIPSTO=0”);
/

ESP8266_Set("AT+CIPMUX=1");//允许多连接
ms_delay(500);

// ESP8266_Set(“AT+CIFSR”); //查看ip地址
ESP8266_Set(“AT+CIPSERVER=1,8080”);
ms_delay(500);

ES = 1;             //开串口中断

}

/*******************************************************************************

  • 函 数 名 : UsartConfiguration()
  • 函数功能 : 设置串口
  • 输 入 : 无
  • 输 出 : 无
    *******************************************************************************/

void UsartConfiguration()
{
ACC = P_SW1;
ACC &= ~(S1_S0|S1_S1);//S1_S0=1,S1_S1=0;
ACC |= S1_S0; //(P3.6/RxD_2,P3.7/TxD_2)
P_SW1 = ACC;

TMOD = 0x20;    // 0010 0000 定时器1工作于方式2(8位自动重装方式)l
TH1  = 0xFD;   // 波特率:9600 /11.0592MHZ
TL1  = 0xFD;   // 波特率:9600 /11.0592MHZ
TR1  = 1;      //下面代码设置定串口
AUXR &= 0xBE;  //先对需要设置的位进行清零 1011 1110
AUXR = 0x00;             // 很关键,使用定时器1作为波特率发生器,S1ST2=0
SCON = 0x50;   // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允许接受)
ES = 1;                         //开放串口中断
EA = 1;                         //开放CPU中断

}
esp8266发送数组函数
/*********************************************************************************

  • 函数名 :ESP8266_ArraySends
  • 函数功能 :发送数组
  • 输出 :无
  • 输入 :发送数组,发送数组位数
    *********************************************************************************/

void ESP8266_ArraySends(uint send_data[],uchar num)

{
uchar i;

 for(i=0; i<num; i++)  //    sizeof(send_data)求出send_data[]数组的长度。例如:sizeof(Wd_buf)=8.           sizeof(send_data)/sizeof(*send_data){/*    SBUF = send_data[i];   //将要发送的数据放入到发送寄存器while(!TI);          //等待发送数据完成TI=0;            //清除发送完成标志位*/ Send_Uart(send_data[i]);}ms_delay(50);        //延时一下再发

}
esp8266在收到数据并转发给单片机时的数据格式:+IPD,<client号>,<收到的字符长度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号,esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4,在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello是收到的字符。在本例中esp8266发送给单片机的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以’+'和’I’开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。
/*********************************************************************
名称:串行通讯中断
作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数
据正常的收发。
********************************************************************/

void Uart_Interrupt() interrupt 4 using 1
{

  if(RI){EA=0;Recive_esp8266mode[j]=SBUF; RI=0;j++;if(j==2){      if(Recive_esp8266mode[0]=='+'&&Recive_esp8266mode[1]=='I')  //判断接收到数据是否是上位机发送的数据{;         }else{j=0;}}     if(j==13){j=0;                Recivedata_flag=1;}EA=1;     }

}
2、Android APP软件开发部分
Android APP软件开发环境为Android studio ,界面简洁终端ID输入的是IP地址192.168.1.112,端口号是8080;因为esp8266选择的是WiFi模式一与家中的路由器组成局域网,在通过指令AT+CIPSTA=“192.168.1.112”,“192.168.1.1”,“255.255.255.0”);//设置静态IP方便连接互联网时能够寻址。连接互联网时需要公网ip,这里博主通过花生壳解析域名获取公网IP达到访问系统效果。


Android APP软件逻辑接收代码:
class Myhandler extends Handler {
byte[] SocketReadData= new byte[socketclient.RC_DATA.length];
@Override
public void handleMessage(Message msg) {
SocketReadData=(byte[])msg.obj;
if(SocketReadData[0]==0&&SocketReadData[1]==1){

            Temp= SocketReadData[3]*10000+SocketReadData[4]*1000+SocketReadData[5]*100+SocketReadData[6]*10+SocketReadData[7];if(SocketReadData[2]==0){Temp=-(Temp/100);}else{Temp=Temp/100;}}else{Temp=0;}if(SocketReadData[8]==0&&SocketReadData[9]==2){KAD=SocketReadData[10]*1000+SocketReadData[11]*100+SocketReadData[12]*10+SocketReadData[13];}if ( KAD>550||Temp>50){flag++;if(flag==2){//flag 为出发警报Activity标志位,数值为2 防止数据误发导致出发报警Intent intent1 = new Intent(SecondActivity.this, ThirdActivity.class);//显示intentstartActivity(intent1);}}if(SocketReadData[14]==1&&SocketReadData[15]==1&&SocketReadData[16]==1&&SocketReadData[17]==1){imageButton1.setImageDrawable(getResources().getDrawable(R.mipmap.shut));a=1;}if(SocketReadData[14]==1&&SocketReadData[15]==1&&SocketReadData[16]==2&&SocketReadData[17]==2){imageButton1.setImageDrawable(getResources().getDrawable(R.mipmap.open));a=0;}/*if(SocketReadData[19]==1&&SocketReadData[20]==2&&SocketReadData[21]==1&&SocketReadData[22]==1){imageButton2.setImageDrawable(getResources().getDrawable(R.mipmap.shut));b=1;}if(SocketReadData[19]==1&&SocketReadData[20]==2&&SocketReadData[21]==2&&SocketReadData[22]==2){imageButton2.setImageDrawable(getResources().getDrawable(R.mipmap.open));b=0;}*/tvReceive.setText("DS18B20温度 :  "+ Temp+"℃"+"\n"+"KAD :  "+ KAD +"M%");}}

Android APP软件逻辑向可燃气体监测系统发送数据代码:
public void sends(String j){
switch (j){
case “0x00156f4”:SD_DATA[1]=1;SD_DATA[2]=1;SD_DATA[3]=1;break;//闭合继电器1
case “0x00256f4”:SD_DATA[1]=1;SD_DATA[2]=2;SD_DATA[3]=2;break;//断开继电器1
// case “0x00356f4”:SD_DATA[1]=2;SD_DATA[2]=1;SD_DATA[3]=1;break;//闭合继电器2
// case “0x00456f4”:SD_DATA[1]=2;SD_DATA[2]=2;SD_DATA[3]=2;break;//闭合继电器2

                }socketclient.Sends(SD_DATA);}}

报警界面代码:
public class ThirdActivity extends AppCompatActivity {
MediaPlayer player;
Vibrator vibrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
player = MediaPlayer.create(this, R.raw.huozaijingbaosheng);
player.start();
vibrator = (Vibrator)this.getSystemService(this.VIBRATOR_SERVICE);
long[] patter = {1000, 1000, 2000, 5000};//首先,这里使用的是一个长整型数组,数组的a[0]表示静止的时间,a[1]代表的是震动的时间,然后数组的a[2]表示静止的时间,a[3]代表的是震动的时间……依次类推下去,然后这里的代码有一点小小的改变:
vibrator.vibrate(patter, 0);//最后一行中vibrate的第二参数表示从哪里开始循环,比如这里的0表示这个数组在第一次循环完之后会从下标0开始循环到最后,这里的如果是-1表示不循环。

}
public void click(View v) {flag=0;player.release();vibrator.cancel();finish();
}

}

系统博主挂到淘宝上,如需详细资料可点击下面链接购买:
https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.75dc1debztCHw3&ft=t&id=602060950301

15单片机通过WIFI模块ESP8266实现手机远程监控可燃气体浓度相关推荐

  1. 51单片机通过WIFI模块ESP8266控制LED灯

    完整源码下载地址:https://download.csdn.net/download/tongxin082/21440621 一.系统方案 手机APP通过ESP8266 WIFI模块与51单片机通信 ...

  2. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...

  3. 天问51单片机结合WIFI模块上传温度数据到TCP服务器

    目 录 一.前言 二.项目准备 三.设计思路 四.项目主要代码 五.项目成果 一.前言: 天问51系统单片机作为增强型51单片机,它比传统的51单片机性能提升很多,而公司开发的天问BLOCK软件编程也 ...

  4. 物联网系列之WIFI模块ESP8266一介绍

    内容 Change history 内容 1        前言 1.1        目的 2        计划 2.1        测试环境 2.2        计划 3        行动 ...

  5. 天问51单片机结合WIFI模块上传温度数据到巴法云平台

    目 录 一.前言 二.项目准备 三.设计思路 四.项目主要代码 五.项目成果 六.项目不足 一.前言: 继前一个项目<天问51单片机结合WIFI模块上传温度数据到TCP服务器>,本次项目是 ...

  6. 基于51单片机的WIFI模块的简单通信

    文章目录 ESP-01S-WIFI模块 AT指令 用到的AT指令 软件下载 如果是新WIFI设备,例如波特率9600,双模等等需要配置 与单片机通信接线 如何接线 代码(当作客户端接入自己家路由器,单 ...

  7. C51单片机连接wifi模块,发送AT指令

    一.AT指令 AT 指令集是从终端设备( Terminal Equipment , TE) 或 数据终端设备 ( Data Terminal Equipment , DTE) 向终端适配器 (Term ...

  8. STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)

    STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)   最近在做毕业设计,在做wifi数据传输与接收时,涉及到了STM32 ...

  9. wifi摄像模组连接手机远程监控的操作方法,家里监控怎么连接手机远程监控

    WiFi摄像机种类有很多,比如无线WiFi模组摄像机,4G无线远程监控摄像机,移动WiFi加WiFi摄像机组合配置.看到WiFi一词,那么我们想到的就是无线远程监控.利用无线WiFi传输数据,在手机下 ...

最新文章

  1. 关于ACCESS的事务与存储过程的调用
  2. (原創) 如何讓Linux開機時,不要在圖形介面顯示開機訊息? (OS) (Linux) (CentOS)
  3. Windows 1.0 to Windows 10
  4. 儿童的身高标准对照表_2020“儿童身高标准”出炉,10岁身高140,你家娃达标吗...
  5. 关于工作的选择之软件开发还是软件维护的建议
  6. opencv:用最邻近插值和双线性插值法实现上采样(放大图像)与下采样(缩小图像)
  7. WebAPI PUT,DELETE请求404
  8. Android Device Monitor 的 File Explorer 打开一片空白,不显示文件
  9. 中亿验钞机升级_最前线|火山小视频升级为抖音火山版,抗衡快手火力更足了吗?...
  10. vue echart甘特图
  11. cas 单点登录_CAS 单点登录简介
  12. VNPY_IB API封装
  13. centos检测不到磁盘_IBM服务器安装CentOS找不到硬盘的解决方法
  14. 网络中的海底隧道——MPLS
  15. 帮我用js写一个微信聊天那种气泡效果
  16. 基于Go语言GoFrame+Layui的OA办公系统
  17. iphone 图片等比例缩小
  18. DHCP如何分配IP地址
  19. 中兴通讯某产品大规模敏捷转型实践
  20. linux环境下conda更改pkg和env缓存路径

热门文章

  1. 什么是真值什么是假值
  2. 韩国要对机器人征税,因为它们取代了人类工作
  3. 原型设计模式—解决随机乱序出试卷(试题顺序、选项顺序随机打乱)
  4. 上海市高校计算机等级(一级)考试成绩查询,上海市高校计算机等级考试(一级).doc...
  5. 基于加取模和循环左移运算的扩散算法matlab
  6. linux网络安装pxe及无人值守安装
  7. kedacom摄像头怎么预置_[功能测评]科达(Kedacom)200万红外网络摄像机
  8. 杭电2043,小细节。。。。。
  9. Java之Excel导出工具类使用教程
  10. poj2421修建道路