1. 前言 随着人们生活质量的提高,对于生活环境的问题,人们的关注度进一步提高,同时政府部门采取了许多措施来改善环境状况。但是总体上来说我国的环境监测技术水平比较落后,传统上的监测手段比较单一,监测数据也不够准确,耗尽了大量的人力和财力,却成效不高。
针对上述缺点,当前文章综合了嵌入式处理技术、传感器技术、无线网络通信等技术,设计了一个基于stm32的无线环境监测系统,系统主要实现了对湿度、温度、有毒气体、烟雾浓度、空气质量等参数进行实时监测的功能。为了实现无线数据传输功能,采用了无线wifi技术。系统的测试分析表明系统整体数据采集性能良好,数据传输稳定性可靠,到达了预期目标。
系统与传统的监测技术相比,具有监测数据准确,监测范围广,智能化高等特点。且系统具有一定的创新性,在实际的工程运用和理论研究上体现出了一定的研究价值最后通过实物的调试,各项参数及功能符合设计要求,能达到预期的目的。
设计以stm32微控制器为平台,采用dht11温湿度传感器、烟雾传感器mq-2、易燃气体传感器mq-4、空气质量检测传感器mq-135对室内温湿度和危险气体进行采集。通过wifi无线网络将数据传送给微控制器,stm32微控制器处理数据后,由自带oled液晶屏显示。当室内温度达到预警值或有危险气体时,系统将会自动警报并将警报信息通过wifi网络传输给客户手机。且每隔一段时间会通过wifi自动发送监测信息到手机,从而实现对室内环境的监测及报警功能。
源码获取: https://download.csdn.net/download/xiaolong1126626497/63979263
基于stm32设计的环境监测项目
2. 实现功能与整体框架图 开发板采用stm32最小系统板,主控cpu采用stm32f103c8t6,其他传感器采用模块的形式连接到开发板。
主要实现以下功能实现: 1、通过dht11温湿度传感器、烟雾传感器mq-2、易燃气体传感器mq-4、空气质量检测传感器mq-135对室内温湿度和危险气体进行采集。 2、通过传感器用adc模拟数字的转换,采集到的数据显示在oled屏幕上。 3、当检测到的数据超过设定的安全值时,屏幕上会显示警报。 4、检测到的数据能定时通过esp8266 wifi无线传输发送到所连接的用户的手机上,实现监测功能。
系统框架图如下:
3. 硬件特点介绍 (1) 温湿度传感器 温湿度传感器采用dht11,这是一款直接输出数字信号的温湿度传感器;其精度湿度±5%rh, 温度±2℃,量程湿度5~95%rh, 温度-20~+60℃。通过单总线时序输出,占用的io口也比较少,工作电压3v~5v,单片机连接控制很方便。
(2) mq系列的气体检测传感器 烟雾传感器mq-2、易燃气体传感器mq-4、空气质量检测传感器mq-135,这些传感器都是输出模拟信号。 配置好stm32的adc采集接口,采集数据进行处理即可。
(3) esp8266 wifi 联网的模块采用esp8266 wifi,esp8266在物联网里使用非常多,有很多成熟的案例.wifi本身也支持二次开发,默认集成的sdk支持at指令控制,单片机可以通过串口方式控制esp8266完成网络通信,非常方便.
(4) oled显示屏 oled显示屏采用中景园电子的0.96寸oled,分辨率是128x64,使用的spi引脚接口屏幕,刷屏速度很快,控制简单
(5) 上位机设计
手机app和pc端没有单独设计精美的界面,只是简单的展示了数据显示。
4. 核心源码 编辑
4.1 dht11温湿度代码#include dht11.h#include delay.h//复位dht11void dht11_rst(void) { dht11_io_out(); //set output dht11_dq_out=0; //拉低dq delayms(20); //拉低至少18ms dht11_dq_out=1; //dq=1 delay_us(30); //主机拉高20~40us}//等待dht11的回应//返回1:未检测到dht11的存在//返回0:存在u8 dht11_check(void) { u8 retry=0; dht11_io_in();//set input while (dht11_dq_in&&retry=100)return 1; else retry=0; while (!dht11_dq_in&&retry=100)return 1; return 0;}//从dht11读取一个位//返回值:1/0u8 dht11_read_bit(void) { u8 retry=0; while(dht11_dq_in&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0; while(!dht11_dq_in&&retry<100)//等待变高电平 { retry++; delay_us(1); } delay_us(40);//等待40us if(dht11_dq_in)return 1; else return 0; }//从dht11读取一个字节//返回值:读到的数据u8 dht11_read_byte(void) { u8 i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=dht11_read_bit(); } return dat;}//从dht11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8 dht11_read_data(u8 *temp,u8 *humi) { u8 buf[5]; u8 i; dht11_rst(); //printf(------------------------\r\n); if(dht11_check()==0) { for(i=0;iapb2enr|=1crl|=0x00300000; gpioa->odr|=1
sr&0x40)==0); //等待发送空 usart3->dr='+'; delayms(15); //大于串口组帧时间(10ms) while((usart3->sr&0x40)==0); //等待发送空 usart3->dr='+'; delayms(15); //大于串口组帧时间(10ms) while((usart3->sr&0x40)==0); //等待发送空 usart3->dr='+'; delayms(500); //等待500ms return esp8266_sendcmd(at,ok,20);//退出透传判断.}/*函数功能:获取esp82668266模块的ap+sta连接状态返 回 值:0,未连接;1,连接成功*/u8 esp8266_apstacheck(void){ if(esp8266_quittrans())return 0; //退出透传 esp8266_sendcmd(at+cipstatus,:,50); //发送at+cipstatus指令,查询连接状态 if(esp8266_checkcmd(+cipstatus:0)&& esp8266_checkcmd(+cipstatus:1)&& esp8266_checkcmd(+cipstatus:2)&& esp8266_checkcmd(+cipstatus:4)) return 0; else return 1;}/*函数功能:获取esp8266模块的连接状态返 回 值:0,未连接;1,连接成功.*/u8 esp8266_constacheck(void){ u8 *p; u8 res; if(esp8266_quittrans())return 0; //退出透传 esp8266_sendcmd(at+cipstatus,:,50); //发送at+cipstatus指令,查询连接状态 p=esp8266_checkcmd(+cipstatus:); res=*p; //得到连接状态 return res;}/*函数功能:获取ip地址函数参数:ipbuf:ip地址输出缓存区*/void esp8266_getwanip(u8* ipbuf){ u8 *p,*p1; if(esp8266_sendcmd(at+cifsr\r\n,ok,50))//获取wan ip地址失败 { ipbuf[0]=0; return; } p=esp8266_checkcmd(\); p1=(u8*)strstr((const char*)(p+1),\); *p1=0; sprintf((char*)ipbuf,%s,p+1); }/*函数功能:将收到的at指令应答数据返回给电脑串口参 数:mode:0,不清零usart3_rx_sta; 1,清零usart3_rx_sta;*/void esp8266_atresponse(u8 mode){ if(usart3_rx_sta&0x8000) //接收到一次数据了 { usart3_rx_buf[usart3_rx_sta&0x7fff]=0;//添加结束符 printf(%s,usart3_rx_buf); //发送到串口 if(mode)usart3_rx_sta=0; } }/*函数功能:esp8266 ap模式+tcp服务器模式测试*/void esp8266_aporserver(void){ u8 p[100]; u8 ipbuf[20]; while(esp8266_sendcmd(at\r\n,ok,20))//检查wifi模块是否在线 { esp8266_quittrans();//退出透传 esp8266_sendcmd(at+cipmode=0\r\n,ok,200); //关闭透传模式 printf(未检测到模块,正在尝试连接模块...\r\n); delayms(800); } printf(esp8266模块检测ok!\r\n); while(esp8266_sendcmd(ate0\r\n,ok,20)); //关闭回显 printf(请用设备连接wifi热点:%s,%s,%ss\r\n,(u8*)wifiap_ssid,(u8*)wifiap_encryption,(u8*)wifiap_password); /*1. 设置wifi ap模式 */ esp8266_sendcmd(at+cwmode=2\r\n,ok,50); /*2. 重启模块 */ esp8266_sendcmd(at+rst\r\n,ok,20); /*3. 延时3s等待重启成功*/ delayms(1000); delayms(1000); delayms(1000); /*5. 配置模块ap模式无线参数*/ sprintf((char*)p,at+cwsap=\%s\,\%s\,1,4\r\n,wifiap_ssid,wifiap_password); esp8266_sendcmd(p,ok,1000); /*4. 设置多连接模式:0单连接,1多连接(服务器模式必须开启)*/ esp8266_sendcmd(at+cipmux=1\r\n,ok,20); /*5. 开启server模式(0,关闭;1,打开),端口号为portnum */ sprintf((char*)p,at+cipserver=1,%s\r\n,(u8*)portnum); esp8266_sendcmd(p,ok,50); /*6. 获取当前模块的ip*/ esp8266_getwanip(ipbuf);// printf(ip地址:%s 端口:%s,ipbuf,(u8*)portnum); usart3_rx_sta=0; //清空串口的接收标志位// while(1)// {// key=getkeyval(1);//退出测试// if(key==1)// { // printf(退出测试!\r\n); // esp8266_quittrans(); //退出透传// esp8266_sendcmd(at+cipmode=0,ok,20); //关闭透传模式// break; // }// else if(key==2) //发送数据 // {// esp8266_sendcmd(at+cipsend=0,12\r\n,ok,200); //设置发送数据长度为12个// esp8266_senddata(esp8266测试!,ok,100); //发送指定长度的数据// delayms(200);// }// t++;// delayms(10);// if(usart3_rx_sta&0x8000) //接收到一次数据了// { // rlen=usart3_rx_sta&0x7fff; //得到本次接收到的数据长度// usart3_rx_buf[rlen]=0; //添加结束符 // printf(接收的数据: rlen=%d,%s,rlen,usart3_rx_buf); //发送到串口 // usart3_rx_sta=0;// if(constate!=3)t=1000; //状态为还未连接,立即更新连接状态// else t=0; //状态为已经连接了,10秒后再检查// }// if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.// {//// constate=esp8266_constacheck();//得到连接状态//// if(!constate)printf(连接失败!\r\n);// t=0;// }// if((t%20)==0)led2=!led2;// esp8266_atresponse(1);// }}
英特尔顾问屋顶线分析
USB 3.0是什么?你能用它来干什么?
电池接线片的电容放电焊机的制作
细谈SDN/NFV目前难以突破的难点
不做另一个“滴滴”,高德开始大力推广“一键全网叫车”的高德打车服务
基于STM32设计的环境检测设备
浙江移动联合华为正在全面实施5G+计划
为什么1500V光伏储能技术是大势所趋?光伏万用表的用法
如何使用晶体管构建一个简单的70+70瓦立体声功率放大器电路
无线交换机故障的排查和处理
进击的生物芯片 博奥生物再添两项国家标准
深南电路参加调研活动 南通二期5G项目年均收入达约15.11亿元
海凌科智慧物联推三款微安级功耗10G雷达模块
联想S5 Pro新品发布会将主打“偶像级”自拍
OPWILL测试方案助力中国移动网络快速发展
比克18650-3.0Ah电芯产品在国内率先发布并实现量产
丰鸟航空与五十四所合作 意在消除大型无人机商用技术壁垒
有机硅密封胶在新能源动力电池FDS孔用胶密封的应用案例
视频打印机的图像像素/图像存储/打印图像尺寸
再添一艘!汇川大功率水冷变频器助力海工船舶国产化升级