【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统-Arduino中文社区 - Powered by Discuz! Archiver

机智小子 发表于 2022-6-29 17:12

【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统

继上一篇,内容含1系统内容,2,元器件选择,3,系统硬件设计等等请查阅:https://club.gizwits.com/thread-166756-1-1.html

4系统软件设计
4.1 单片机程序设计
4.1.1单片机程序开发环境

单片机的主要开发环境是Keil5,Keil C51是51系列兼容单片机C语言软件开发系统。实验室安全监控系统使用的芯片是STM32,使用的语言是C语言,因此Keil5刚刚好可以使用。同时它还有很多优点,比如有着很强大的系统,可读性比较强,调试时很方便……

Keil5是一个很好的开发平台,它可以通过C语言、汇编语言等编写程序,还可以通过设置断点等对程序进行调试,在编译时可以提醒编写错误、编写不规范等行为,而且对于不同的语言来说,它是兼容的,很多人可以通过Keil5这个平台使用不同的语言开发软件。

4.1.2单片机程序总体流程图

单片机的数据上行流程图如图4.1所示。先将需要用到的函数初始化,再将需要的引脚初始化。通过调用各种函数测量温湿度、烟雾浓度、丙烷浓度,再判断测量到的数据是否超过阈值,如果超过了蜂鸣器就报警。再将蓝牙主机接收到的数据和测量到的数据发送至服务器上。

https://club.gizwits.com/data/attachment/forum/202206/29/160508fkovzfb8bb8ov5f1.jpg.thumb.jpg

当手机APP有执行的指令时,比如打开风扇指令,该指令被发送给服务器,服务器将该指令发送给下位机。当下位机接收到指令时,就将相应引脚置高或置低,其流程图如图4.2所示。
https://club.gizwits.com/data/attachment/forum/202206/29/160537o6idg5dg5k6jjzvj.jpg.thumb.jpg

4.1.3温湿度采集程序设计

当需要采集温湿度的时候,就调用该程序。如果说单片机检测到DHT11的存在,就返回0给予单片机判断的条件,否则不进行下一步,当检测到DHT11的存在后,就开始读取DHT11上传的温湿度,通过校验、解码,最终获得正确的温湿度。一次数据的读取为5字节,前2字节为湿度的整数和、小数和,再2字节是温度的整数和、小数和,最后的1字节是校验和。其流程图如图4.3所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160613gufccikbobdumdjt.gif.thumb.jpg

4.1.4气体浓度采集程序

首先要先对烟雾传感器的电压值即烟雾传感器的模拟输出引脚进行测量,并且为了减小误差,采取多次测量取平均值的方法获取烟雾传感器的电压。再将该电压转换成3.3V下的4096份,即12位精度的ADC,最后通过公式计算烟雾传感器的体电阻Rs、电阻R0。最后对系统执行的时间进行校准,利用公式计算出实验室内的烟雾浓度。而丙烷气体浓度也是同样的原理进行采集的。其流程图如图4.4所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160750wn8bhm1ns9btbtpz.gif.thumb.jpg

图4.4 烟雾浓度采集程序流程图

MQ6的原理也是如此,其流程图如图4.5所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160823cmstmrrimh5mot50.gif.thumb.jpg

图4.5 丙烷浓度采集程序流程图

4.1.5人体感应模块采集程序

当人体感应模块在感应范围内感应到人的活动迹象,就会输出高电平。因此需要读取与单片机相连接的人体感应模块的输入引脚的电平,若该引脚为高电平,则证明有人存在,若是低电平,则证明无人存在。其流程图如图4.6所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160854thhrg6h0gwnfr1ff.gif.thumb.jpg
图4.6 人体感应传感器采集程序流程图

4.1.6水浸传感器采集程序

当水浸传感器的探头检测到水的存在,即存在漏水情况,经过转换电路,读取电压。因此只需要读取与单片机相连接的水浸传感器转换电路的输出引脚即可。其流程图如图4.7所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160919yxe66ojscj8ojmhq.gif.thumb.jpg


图4.7 水浸传感器采集程序流程图


4.1.7蓝牙从机发送程序


蓝牙从机需要将副控系统采集到的门窗入侵、地面漏水情况报告给主控系统。利用不同的数据代表不同的情况发送给主控系统,当有人的时候,就发送数字1;当没人的时候,就发生数字2;当地面没漏水的时候,就发送字母C;当地面漏水的时候,就发送字母D。其流程图如图4.8所示。


https://club.gizwits.com/data/attachment/forum/202206/29/160956ezsddpuoqnqsu7qu.png.thumb.jpg
图4.8 蓝牙从机发送程序流程图

4.1.8蓝牙主机接收程序

当蓝牙主机和从机顺利配对后,从机将采集到的数据发送给主机进行处理。单片机将接收到的数据存储起来,然后再一一读取,利用不同的数字和字母,判断门窗入侵、地面漏水情况。其流程图如图4.9所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161026ourxi09z05v9vs01.gif.thumb.jpg
图4.9 蓝牙主机接收程序流程图


4.2 手机APP程序设计
4.2.1定时器定时程序


发送至服务器的数据要定时发送,否则会因为数据发送太快服务器没办法正常接收,新的数据太快会覆盖了旧数据。如果数据发送得太慢则不利于手机APP对数据的读取。因此选择定时时间为6秒,每6秒上传一次数据至服务器。其流程图如图4.10所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161151nvw49nd195w19r1n.jpg.thumb.jpg
图4.10 定时器定时程序流程图


4.2.2数据上传程序

发送至服务器的数据不单单是主控系统采集到的信息,还有副控系统采集到的信息。当串口1接收到副控系统发送过来的信息,就对此进行判断并发送给服务器,不同的数字、字母代表不同的含义,比如蓝牙从机发送了数字1,就表明门窗存在入侵情况。然后调用各种函数,读取温湿度、烟雾浓度、丙烷浓度,将这些信息发送至服务器。其流程图如图4.11所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161303lzu0cqlbqltrq8c0.gif.thumb.jpg
图4.11 数据上传程序流程图


4.2.3数据下行程序

当手机APP接收到指令时,该指令被发送至服务器,服务器再将该指令发送给主控系统,主控系统则做出判断,是否操作该指令。例如想远程打开排烟风扇,只需要在手机APP上点击开启风扇,该指令就会被发送到服务器,服务器就把这个信息发送给单片机,单片机就执行该指令,开启风扇。其流程图如图4.12所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161404l31x7m1surdhr5ck.gif.thumb.jpg
图4.12 数据下行程序流程图


5手机APP的设计
5.1 机智云AIoT的接入流程


对于机智云来说,下位机接入机智云需要开发者进行一些功能的开发。首先是在开发者中心注册,选择成为个人开发者或者企业开发者,然后根据需求比如接入机智云的方式等创建产品、开发设备、开发应用,最终进入产品调试。一个流程之后,APP就可以调试使用了。



https://club.gizwits.com/data/attachment/forum/202206/29/161439v133618z0w837o8d.gif.thumb.jpg


图5.1 机智云接入流程

5.2 产品的创建


对于手机APP的设计来说,首先要设置的是显示在APP上的界面,即上传到服务器的数据。据实验室安全监控系统来说,需要设置多个数据点。


先要在机智云的开发者中心创建新产品。先将“产品分类”选择为其他中的自定义,填好产品的名称,“技术方案”选择的是Wi-Fi/移动网络方案,选择“通讯方式”为移动网络,“数据传输方式”为变长,“功耗类型”为正常,最后保存即可。这样,一个新的产品就创建好了。 当新建好产品之后,机智云会分配两个密钥,这两个密钥一个连接下位机的4G模块,一个连接手机APP。它们是独一无二的,在连接时,机智云会自动分辨、连接。如图5.2所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161513i7kwu81ewzkercex.png.thumb.jpg


图 5.2 产品的基本信息


创建好产品后,需要对产品中的数据进行设置。在创建好的产品中,选择新建数据点,如图5.3所示。什么是数据点?数据点就是产品中的数据,想上传至服务器的数据,这些数据在服务器与在代码中是一一对应的,因此避免出现数据错误的现象。这些数据的定义包括了标识名,就是在产品中要显示的名字,包括了读写类型、数据类型,包括了备注。这些数据可以更改,在更改之后,也需要更改代码中的内容,否则数据格式会不正确,云平台与下位机之间的通讯就会出现问题。具体描述如表5.1所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161547jstggsnsgjr2rk2n.png.thumb.jpg
https://club.gizwits.com/data/attachment/forum/202206/29/161652uftvdz0tljjvfwqq.png.thumb.jpg
因此,根据实验室安全监控系统的需求,分析硬件开发的需求,将数据点设置好,数据点的配置是APP设计的重中之重,如表5.2所示。


5.3 MCU开发

对于机智云来说,它的优势就是不需要开发者之间写APP的代码,就不会存在很多错误问题的发生,可以使用他的自动生成代码服务,方便快捷。这些生成的代码通常包括了通讯协议、通讯数据的转换逻辑等。在代码中添加相应的开发措施,在手机APP发送指令之后,指令就会变成事件发送到服务器中,服务器发生给下位机,驱动下位机实现相应的功能。这里选择“硬件方案”的是独立MUC方案,“硬件平台”选择的是其他平台,然后将产品的Product Secret参数填入相应位置,然后生成代码包,如图5.4所示。最后将生成的代码包移植接入下位机的代码中。



https://club.gizwits.com/data/attachment/forum/202206/29/161751obnbfr46p4f18byf.gif.thumb.jpg


图5.4 MCU SDK开发


5.4 移动应用的设置

首先要在机智云的开发者中心创建一个新的移动应用,填入应用名称,即APP的名字,“应用包名”要选择一个唯一的名字,不该和其他产品的名字一样。“类型”选择智能家居即可,“平台”就选择ios和android,如图5.5所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161816sxpdpyp56akx3uhd.gif.thumb.jpg


图5.5 新建移动应用界面


新建好移动应用之后,点击进入该移动应用。在其个性化选项中,选择关联产品,点击“+”号,把先前创建的产品与现在创建的移动应用关联起来,也可以选择自己喜欢的主题,更改图标等。
关联号产品之后,要对产品的应用证书进行配置。在构建应用的选项下,选择应用证书,然后就可以配置证书了。这里只配置了Android证书,如图5.6所示。



https://club.gizwits.com/data/attachment/forum/202206/29/161933iqtn322t5z5u9nuu.png.thumb.jpg
图5.6 Android证书的配置


在同样的选项下,选择应用构建,点击构建测试版,等待APP的构建即可。当APP构建好之后,会生成一个二维码,利用手机自带的游览器扫描,就可以下载构建好的APP,正常安装即可。


5.5 上下位机的连接


当下载好APP后,我们需要将APP与下位机联系起来。使用软件GAgent_Debugger配置手机APP与下位机的联系。在该设备中,选择“新增”,我们选择“服务器平台”为国内服务器,将产品的Product Key和Product Secret参数填入,选择“设备类型”为单品,选择“通信方式”为移动网络。成功配置好服务器之后,就如图5.7所示。



https://club.gizwits.com/data/attachment/forum/202206/29/162000gx92t1thld888t7l.gif.thumb.jpg


5.7 配置成功界面


在工具选项中,选择设备二维码,将Product Key参数填入,以及4G模块的IMEI号也填入,选择“服务器域名”为国内服务器,然后点击“二维码生成”,就会生成一个二维码,如图5.8所示。将手机APP打开,点击扫描设备二维码,扫描设备二维码,即可将手机APP与下位机绑定。在这里要注意的是,APP在绑定时下位机必须连接到机智云。在下位机正常工作时,APP则可以查看各种信息。



https://club.gizwits.com/data/attachment/forum/202206/29/162030ltdhgt7vmitukhie.gif.thumb.jpg


图5.8生成设备二维码

5.6 手机APP的推送

首先使用的推送功能基于机智云平台,因此先向机智云申请开通。首先申请的是规则引擎这个功能。当提交申请之后,等待机智云平台开通,之后就可以使用其功能。


成功开通规则引擎之后,在创建好的产品内,服务选项下,多了D3 Engine选择。
点击D3 Engine,进入配置界面,点击编辑推送的平台,如图5.9所示。

https://club.gizwits.com/data/attachment/forum/202206/29/162054q45jl95mnburg5rn.gif.thumb.jpg
图5.9 编辑推送平台
在这里选择的推送平台是百度,应用平台选择的是安卓,将在百度平台申请到的API Key和Secret Key填入相应的位置,如图5.10所示。https://club.gizwits.com/data/attachment/forum/202206/29/162249ta04s0ukubih00b6.gif.thumb.jpg


图5.10推送平台的绑定
同样是在D3 Engine功能下,选择项目列表,新建项目。在新建的项目内,构建自己需要的功能,其中左边的框图就是选择的数据、触发动作等,右边是建立的编辑区域。如图5.11所示。


https://club.gizwits.com/data/attachment/forum/202206/29/162321kqdd42o4hkkqzhcx.gif.thumb.jpg


图5.11 编辑推送功能


首先将设备数据拖到编辑区域,编辑其触发方式为设备上报状态,如图5.12所示。然后选择逻辑规则的编写,比较参数1就是想报警的数据,比较参数2就是设定的阈值,比较符号则是这两个参数之间的关系,如图5.13所示。最后编辑邮件的推送,填写好邮件的标题、内容以及推送的邮箱即可,如图5.14所示。



https://club.gizwits.com/data/attachment/forum/202206/29/162349onvuzg0iq0ptzhos.gif.thumb.jpg
https://club.gizwits.com/data/attachment/forum/202206/29/162412itazmtoqeqwliiiw.gif.thumb.jpg
https://club.gizwits.com/data/attachment/forum/202206/29/162230wruuur501bb0r0jn.png.thumb.jpg
图5.14邮件推送功能的编辑


6系统调试

6.1 主从机蓝牙的配置与通信
对于蓝牙来说,其设置是通过AT指令来配置蓝牙的名称、波特率、绑定地址等。因此要先了解蓝牙常用的AT指令,如表6.1所示。
表6.1蓝牙常用AT指令



https://club.gizwits.com/data/attachment/forum/202206/29/162557vqxmp2ywzf9bxddq.png.thumb.jpg


在正式配置蓝牙的主从机之前,我们要先做好准备,将蓝牙与USB转TTL连接,将蓝牙的使能端置高电平,再给模块上电,这样蓝牙就进入了AT模式,波特率固定为38400,可以直接发送AT指令,不需要发送一次指令就将使能端置高一次。进入AT指令模式后,先将两个蓝牙恢复到默认出厂设置,同时获取他们的蓝牙地址,即本机MAC地址。在发送每一条AT指令的时候,要记住在指令后加一个回车,如果没有回车,AT指令就会发送失败。当成功发送一条AT指令的时候,蓝牙测试软件就会回复OK,如果没有回复OK,则表明该指令没有成功发送。


设置主机时,先将主机的名字设置为Y1(蓝牙的名字可以随便),再将它设置为主机模式,配置配对密码7890(配对密码可以随便),绑定蓝牙从机的地址,设置其波特率为9600,将蓝牙的连接模式改为0,即指定蓝牙地址连接模式。最终结果如图6.1所示。



https://club.gizwits.com/data/attachment/forum/202206/29/162442lwqowvd1lcs3osss.png.thumb.jpg


图6.1 主机设置配置


设置从机,先将从机的名字设置为Y1,再将它设置为从机模式,配置配对密码7890,绑定蓝牙主机的地址,设置其波特率为9600,将蓝牙的连接模式改为0,即指定蓝牙地址连接模式。最终结果如图6.2所示。在这里要注意的是,蓝牙主机、从机的名字、配对密码、波特率必须一致,否则就会设置不成功。如果不将蓝牙的连接模式设定为指定,而是设置为其他模式,但是只有蓝牙之间就不是一对一发送了,因此最好设置为指定模式。



https://club.gizwits.com/data/attachment/forum/202206/29/162640oare9x9aalw6mcl3.gif.thumb.jpg


图6.2 从机设置配置
当蓝牙成功配置之后,在工作之前,他们会自动配对,观察蓝牙的指示灯从快闪变为慢闪时就代表以及成功配对。当成功配对之后,从机从串口1发送数据,主机从串口1接收数据并打印出来,利用串口调试助手查看从机发送的数据即可,如果打印的数据和发送的数据一致则证明蓝牙的通信正常。在发送数据时,尽量不使用汉字,防止乱码现象发生。


6.2 云端数据的接收与发送

如何确定服务器与下位机成功连接上?将给4G模块供电,不要与主控系统的5V电压相连接,而是单独给4G模块供电,因为主控系统的5V无法驱动4G模块运行。将4G模块与串口3连接,TXD连接串口3的RXD,RXD连接串口3的TXD。同时不要忘记将锂电池的地、4G模块的地与单片机的地连接起来,否则4G模块无法正常工作。当4G模块成功工作时,其电源指示灯亮起,连接云端指示灯闪烁。与此同时,可以通过云端查看4G模块是否成功连接上云端,如果在机智云的设备日志中,可以发现设备的IMEI号、设备ID以及是否在线的状态,如图6.3所示。



https://club.gizwits.com/data/attachment/forum/202206/29/162717i4nvyynvnz8so998.png.thumb.jpg


图6.3 连接云端界面


当主控系统与服务器连接成功之后,对于上传的数据是否成功,就可以通过服务器的设备日志来观察。服务器会主动记录通过下位机上传的数据,在上传数据的同时将这些数据通过串口1打印出来,将云端接收到的数据与串口1打印出来的数据进行对比,如果数据正常就表明通讯成功。


当数据成功上传到云端时,如何表明云端数据的成功发送。利用机智云的DEMO软件与自己创建的手机APP同时打开,也同时打开串口调试助手查看串口1的数据,将这三者一起对比,如果说数据一致则表明云端数据的发送正常,没有丢包现象发生。当上传数据时,一定要记住定时发送,这个时间不可以太快,快了后面的数据会把前面的数据覆盖住,太慢导致数据的更新不正常,容易空包。因此最好定时6秒,每6秒给云端发送一次数据,云端接收的数据如图6.4所示。



https://club.gizwits.com/data/attachment/forum/202206/29/162742xpdg8e4o8lp4e5y5.gif.thumb.jpg


图6.4 云端接收的数据

7参数测量
7.1 气体浓度测量

如图7.1所示,该电路为气敏传感器的基本电路,该电路只需要施加VH和VC。由该电路可知

https://club.gizwits.com/data/attachment/forum/202206/29/162945jwtchefycjcuhley.png.thumb.jpg


其中RL取4.7K欧姆,VC为回路电压,VRL为AO口输出电压,RS为传感器在气体中的电阻值。
https://club.gizwits.com/data/attachment/forum/202206/29/163011infnmh6fn6kmtfv8.png.thumb.jpg


图7.1 基本电路


如图7.2所示,该特性曲线的横坐标为气体浓度,单位为ppm,即1立方厘米/1立方米,纵坐标为RS/R0。由该曲线可知这两者之间的关系,列出表7.1,并画出散点图,模拟散点图之间点与点之间的关系,得到公式y=33607x^(-2.998),其中y为ppm,x为RS/R0。利用该公式计算出ppm,理论ppm与计算ppm之间的误差就可以计算。如表7.1和图7.3所示。



https://club.gizwits.com/data/attachment/forum/202206/29/163037s3lck0bbklbbymg3.jpg.thumb.jpg


图7.2 MQ2灵敏度特性曲线
表7.1 RS/R0与烟雾浓度的关系

https://club.gizwits.com/data/attachment/forum/202206/29/163226f1e1i3hiieseiz99.png.thumb.jpg
https://club.gizwits.com/data/attachment/forum/202206/29/163303s902sby9gl3b4d5z.png.thumb.jpg
https://club.gizwits.com/data/attachment/forum/202206/29/163314ssioiz9is2icjzxx.gif.thumb.jpg
图7.3 烟雾浓度散点图与计算公式
丙烷浓度的计算同理可得,如图7.4、表7.2和图7.5所示。

https://club.gizwits.com/data/attachment/forum/202206/29/163351wwe9fyk3zozhhhoa.jpg.thumb.jpg


https://club.gizwits.com/data/attachment/forum/202206/29/163552m79qf1zivi12i0z5.png.thumb.jpg


https://club.gizwits.com/data/attachment/forum/202206/29/163612dd7duiuyd7dgvdz7.gif.thumb.jpg
图7.5 丙烷浓度散点图与计算公式
页: [1]
查看完整版本: 【IoT毕设.下】STM32+机智云AIoT+实验室安全监控系统