基于STM32的智能室内环境检测系统

您所在的位置:网站首页 校园室内空气检测方案及流程图 基于STM32的智能室内环境检测系统

基于STM32的智能室内环境检测系统

2023-12-20 06:01| 来源: 网络整理| 查看: 265

基于STM32的智能家具检测系统

闲来无事,用手头STM32做个项目。

成品功能: 1、不同基点可以同时检测不同环境的情况; 2、这些节点将数据发送给基站; 3、当基站检测到数据异常时,可以给手机发短信进行提醒; 材料 STM32F103C8T6最小系统板两个OLED显示屏(IIC 四脚)两块温湿度模块(DHT11)气体传感器模块(TVOC/CO2 空气质量甲醛 二氧化碳测量)(SGP30)空气质量传感器(MQ-135)蓝牙模块(HC-05)两个短信GSM无线模块(SIM800C)杜邦线电源(充电宝代替)用keil5进行开发

开始制作。

制作过程

分为基点和基站,基点负责采集不同传感器信息并发送给基站;基站负责处理信息,并发送给手机。 基点:接收不同传感器采集的数据,打包一起,通过蓝牙模块发送给基站蓝牙模块。 基站:通过蓝牙接收数据,处理,判断,当数据不正常的时候,通过GSM发送短信给手机进行提醒。

系统制作

基点采用STM32F103C8T6作为主控;SGP30接3.3V供电,采用IIC进行数据传输;MQ-135接5V供电,有一个模拟输出,一个数字输出,我们这里用模拟输出,采集AD值,蓝牙模块接3.3v供电,串口传输;OLED接3.3v供电,采用IIC进行数据传输。 基站采用STM32F103C8T6作为主控;OLED接3.3v供电,采用IIC进行数据传输。GSM模块接5V供电,串口传输。

OLED模块调试

有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,功耗低。OLED由于同时具备自发光、不需要背光源(只上电是不会亮的,驱动程序和接线正确才会点亮)、对比度高、厚度薄、视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程简单等优异之特性。最先接触的12864屏都是LCD的,需要背光,功耗较高,而OLED的功耗低,更适合小系统;由于两者发光材料的不同,在不同的环境中,ILED的的显示效果更佳。模块供电可以是3.3V也可以是5V,不需要修改模块电路,OLED屏具有多个指令控制,可以控制OLED的亮度、对比度、开关升压电路等指令。操作方便,功能丰富。可显示汉字、ASCll、图案等。同时为了方便应用在产品上,预留4个M3固定孔,方便用户固定在机壳上。 模块通过IIC进行通讯。

硬件连接

IIC并没有端口限制,随便找两个普通IO接上即可。

软件测试

1.调用淘宝给的例程。 2. 根据自己的需要,通过取模软件,得到自己想要显示的汉字或者图片。 3.观察显示是否正确。

取模软件按照这样设置即可 请添加图片描述 将得到的值放到char Hzk[][32]这个数组中即可

SGP30模块调试

SGP30模块 SGP30主要是对空气质量进行检测。TVOC是一项重要指标,指总可挥发有机物气体。一般我们可以用它来反映甲醛的浓度。 SGP30是一款单一芯片上具有多个传感元件的金属氧化物气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号。另外,SGP易于集成,能够将金属氧化物气体传感器集成到移动设备中,为智能家居、家电和物联网应用中的环境监测开辟了新的可能性。主要用于甲醛的检测! 模块通过IIC进行通讯。

硬件连接

IIC并没有端口限制,随便找两个引脚接上即可。

软件测试 配置好IIC通信。根据协议配置好数据接收。测试数据是否正确。 温湿度模块调试

DHT11模块 分辨率:16Bit 重复性:士1%RH 精 度:25℃士5%RH 互换性:可完全互换 响应时间:1/e(63%)25℃ 6s 1m/s 空气 6s 迟 滞:,此时我们输入我们需要发送的内容:ATK-SIM800C MSG SEND TEST;在发送完内容以后, 最后以十六进制(HEX)格式单独发送(不用添加回车): 1A(即 0X1A),即可启动一次短信发送。稍等片刻,在短信成功发送后,模块返回如: +CMGS: 39,的确认信息,表示短信成功发送 中文短信的发送 首先发送AT+CMGF=1, 设置为文本模式;设置文本模式参数AT+CSMP=17,167,2,25;设置字符集为AT+CSCS="UCS2";首先要用将号码和发送内容转换为UNICODE 字符串, 1.号码182********,转换后的 UNICODE 字符串(去掉空格后)为: 2.00310038003200390030003100390035003600330032 3.ATK-SIM800C 中英文短信发送测试,装换后的 UNICODE 字符串为: 4.00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D 190016D4B8BD5

由于使用了 UCS2字符集,所有字符/数字/汉字,都必须使用 UNICODE 编码

发送: AT+CMGS=”00310038003200390030003100390035003600330032” ,这个指 令,然后模块返回:>此时我们输入我们需要发送的内容: 00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D 190016D4B8BD5 注意,此可以不用发送回车了;在发送完内容以后,最后以十六进制(HEX)格式当独发送(不用添加回 车): 1A(即 0X1A),启动一次短信发送。 在这里插入图片描述 一次中英文短信发送成功。 代码测试

我们要做的就是将上述步骤自动化,这里我们做的是英文短信,因为英文短信简单,也足够满足我们的需求。

初始化短信测试

3. 这样既可得到我们需要的内容

GSM模块代码

//SIM800C主测试程序 void sim800c_test(void) { OLED_Clear(); sim800c_send_cmd((u8*)0X1A,"+CMGS:",10); delay_ms(1000); while(sim800c_send_cmd("AT","OK",100))//检测是否应答AT指令 { OLED_ShowString(40,3,"SBLJZ ",16); //连接成功 sim800c_send_cmd((u8*)0X1A,"+CMGS:",10); delay_ms(800); } OLED_ShowString(40,3,"LJCG ",16); //连接成功 delay_ms(10); while(sim800c_send_cmd("AT+CMGF=1","OK",200)){} //设置文本模式 OLED_ShowString(40,3,"WBMS ",16);//文本模式 while(sim800c_send_cmd("AT+CSCS=\"GSM\"","OK",200)){} //设置TE字符集为UCS2 OLED_ShowString(40,3,"ZFMS ",16);//字符模式 //发送短信测试 OLED_ShowString(40,3,"ZZSZ ",16); //正在发送 if(sim800c_send_cmd("AT+CMGS=\"13113131313\"",">",800) == 0); printf(temp_table_Send); if(sim800c_send_cmd((u8*)0X1A,"+CMGS:",800)==0){OLED_ShowString(40,3," FSCG ",16);return;} OLED_ShowString(40,3," FSSB ",16); USART_RX_STA_2=0; if(USART_RX_STA_2&0X8000)sim_at_response(1);//检查从GSM模块接收到的数据 }

这样就可以了。

最后完善代码逻辑。

通过接收基点发来的数据,经过分析后,当出现超过阈值的数值之后发送一次短信,知道本次恢复正常后再次超过阈值才会发送第二次短信。

这是整个实验的效果视频。 https://www.bilibili.com/video/BV1CR4y1A7Mf?spm_id_from=333.337.search-card.all.click 最后附上完整的项目文件。自行下载。 https://download.csdn.net/download/weixin_42320020/85319611 这个项目到这里就算完了。 还有很多不足的地方,希望大佬可以指正。也希望和爱好者交流学习。

禁止转载!!! 博客:https://blog.csdn.net/weixin_42320020/?type=blog QQ:2039723308 VX:Shiboven



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3