基于STM32和阿里云的空气质量监测系统
2022-04-12李红卫
李红卫
(山东鲁碧建材有限公司,山东济南,271103)
0 引言
阿里云物联网平台是具有设备接入与管理、监控运维、存储与流转数据、订阅发布消息等功能的一体化平台。支持多个物联网设备连接,采集设备数据存储到云服务器;服务端按照协议发送指令到设备,实现远程控制。
本文通过移植MQTT协议到STM32F103单片机,通过串口控制ESP8266无线模块将空气中温湿度和有害气体浓度传送到阿里云,并利用loT Studio物联网开发服务设计电脑端WEB应用和手机APP。同时云端可以通过STM32控制现场照明设备,实现了对现场空气质量的监测和远程控制。
1 系统总体设计
系统总体框图如图1所示,主要包括STM32单片机模块,DHT11传感器模块,MQ135传感器模块,ESP8266无线模块,阿里云模块,继电器模块。
图1 系统总体框图
2 硬件设计
2.1 控制器选择
控制器采用STM32F103芯片,该芯片是意法半导体推出的高性能、低功耗的32位处理器。其最高工作频率72MHz,128k字节的闪存程序存储器,高达20k字节的SRAM,2个12位数模转换器,7通道的DMA控制器,多达80个快速I/O端口。该芯片性价比高、可靠稳定性好。
2.2 MQ135传感器
MQ135传感器可以检测氨气、硫化物等多种有害气体在空气中的浓度,其检测元件是二氧化锡(Sn02)。二氧化锡在干净的空气中电导率是较低的,随着污染气体浓度的上升,其电导率会增大。通过相应的外围电路可以输出与污染气体浓度相对应的电压信号。其监测浓度范围10~1000ppm,具有寿命长,低成本的特点。
实际使用中,采用MQ135传感器模块,四个端口分别为VCC、GND、AOUT和DOUT,其中AOUT接STM32内置的AD转换器的输入引脚。模块电路图如图2所示。
图2 MQ135传感器模块原理图
STM32具有3个12位分辨率的ADC,每个ADC共用21个外部检测通道,具有单次或多次扫描转换功能,转换速度最快只需1μs。同时我们利用STM32的直接内存存储器(DMA)功能,把ADC转换结果直接传输到SRAM,节省了CPU资源,处理速度进一步提升。
通过MQ135的灵敏度特性曲线可以发现RS/R0与ppm的关系。利用曲线拟合方程工具,在标准条件下(温度20℃,湿度65%,氧气浓度21%,RL=10K),对灵敏度曲线进行数据采集和曲线拟合,得出甲烷浓度和传感器电压的大致关系:
ppm=pow((3.488*10*A DC_VALUE)/(5-ADC_VALUE),(1.0/0.3203))。
2.3 DHT11温湿度传感器
DHT11是一款温湿度一体的数字化传感器,包括一个电阻式测湿元件和一个NTC测温元件,具有稳定性好,响应快,成本低等优点。DHT11与STM32之间采用简单的单总线通讯,仅需要一个IO口就可以将40bit的温湿度数据一次性传送给STM32。数据采用校验和方式方式校验,有效的保证了数据的准确性。DHT11功耗较低,5V电压工作下,工作平均最大电流0.5mA,温度测量范围0℃~50℃,湿度测量范围20~90%RH。
2.4 ESP8266无线模块
ESP8266是串口型WIFI,拥有无线高性能SOC,能够独立运行,也可以作为slave搭载于其他Host运行。芯片内部集成内核CPU、电源管理转换器、天线开关balun等。同时内嵌了高速缓存存储器,减少内存需求,提高了系统运行效率。
ESP8266有三种网络运行模式:STA模式、AP模式和STA+AP模式。本系统中ESP8266主要承担了信息接受和信息发送的任务,故设置为STA模式。通过AT指令来连接到设定的路由器上。
AT+CWJAP=ssid,pswd; 其中ssid为路由器名称,pswd为路由器密码。
设备登录阿里云的AT指令为:
AT+IOTCFG=devicename;productkey;devicesecret;其中devicename为创建的设备名称,productkey为产品名称,devicesecret为设备密钥。这三个在阿里云平台创建产品和设备的时候可以得到。
STM32通过串口2与ESP8266通讯,具体接线方式如图3所示,ESP8266原理图如图4所示。
图3 ESP8266与STM32引脚
图4 ESP8266原理图
2.5 继电器输出模块
当STM32接收到云端发来的控制命令时,可以通过继电器模块执行相应操作,这里用来控制现场照明设备。原理图如图5所示。当PD0输出高电平时,点亮光电耦合器内部LED,晶体管导通,此时Q1的G电压很低,当Q1导通的时候,电磁线圈内部产生电流,继电器吸合。当PD0输出低电平时,Q1关闭,继电器复位。继电器模块是5V供电,STM32单片机系统是3.3V供电,所以采用光电耦合器进行隔离,起到了保护作用。
图5 继电器模块原理图
3 软件设计
STM32控制器的开发环境是MDK 5,采用C语言编程,移植了MQTT传输协议实现与阿里云平台的可靠通讯。将STM32的usart1与电脑端串口调试助手相连,可以实时打印出控制器的运行和连接状态,方便系统的调试。软件流程图如6所示。
图6 系统流程图
3.1 DHT11温湿度数据采集
STM32通过PA8读取DHT11数据,上电后先对DHT11进行初始化,当PA8检测到返回0时,说明初始化成功。DHT11的温湿度数据存放在5个字节,其中包括8位湿度整数部分、8位湿度小数部分、8位温度整数部分和8位温度小数部分。因为DHT11一次通讯时间最大3ms,所以stm32连续采样间隔不小于100ms。读取数据的关键程序如下所示:
3.2 MQ135有害气体浓度数据采集
MQ135模块输出的时模拟信号,电压范围是是0到5V,检测到有害气体的浓度越高,输出电压越高。stm32首先对AD转换器和DMA进行初始化,然后将MQ135的模拟信号转换成数字信号,通过公式计算出有害气体浓度。关键代码如下所示:
3.3 数据上传和命令下发
MQTT是一种具有发布/订阅模式功能的轻量级通讯协议。具有代码设计简单,带宽占用低,通讯实时可靠的特点。对于受限环境如物联网通讯,尤为适用。本协议运行在TCP/IP协议上,有以下特点:
(1)发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
(2)消息传输不需要知道负载内容。
(3)提供三种等级的服务质量。
(4)“至多一次”,底层完全依靠TCP/IP协议,有出现数据丢失的机率。
(5)“至少一次”,确保消息到达,但有数据重复的概率。
(6)“仅一次”,保证消息只到达一次。
(7)网络流量占用低,传输简单,协议交换方便。
(8)发送异常中断时,利用Last Will与Testment功能告知客户端。
由于阿里云平台只接受Alink JSON 标准数据格式,所以在ESP8266采集数据之后要进行数据嵌套,然后再通过MQTT协议发送到云端。数据转换与上传的核心程序如下所示:
同时可以订阅阿里云的相关主题,将平台下传的数据进行解析,获取核心数据,然后跟本地设定好的字符串对比,成功则执行相关命令。这里我们通过云平台控制现场照明,如果发送的命令参数是LED:1则打开照明设备,如果是LED:0则关闭照明设备。核心程序如下所示:
4 阿里云平台设计
4.1 准备工作
首先要注册阿里云物联网平台,登陆后选择公共实例,主要包括以下步骤:创建产品与设备,为产品定义物联网模型,建立设备与平台的连接,服务端订阅设备消息,云端下发指令。创建的产品是管理一类设备的集合,每一个平台设备对应一个实际的物联网设备。创建完设备会获得平台提供的设备三元组,即ProductKey、DeviceName和DeviceSecret。然后按照平台设定的协议规则得到Username、Password、ClientID、IP等参数,最终烧录到物联网设备,作为连接阿里云的身份验证信息。
本文中创建了温度、湿度、MQ135空气质量和控制LED四个属性,主要包含功能名称、标识符、数据类型和数据定义四个属性,具体如图7所示。
图7 属性和功能
4.2 WEB端和APP开发
loT Studio是阿里云提供的一款简单、高效的物联网开发工具,适用于各个物联网行业核心场景。提供了丰富的产品和设备选择。具有web和移动可视化开发功能,开发者无需编写代码就可以快速搭建WEB端和移动端应用。通过拖拽的方式引入仪表盘、历史曲线图、设备控制面板等控件,然后为每个控件配置数据源,应用搭建完毕就可以预览和使用,并支持绑定自己的域名对最终用户进行发布。本文设计的WEB端运行效果如图8所示。APP端如图9所示。
图8 WEB运行界面
图9 手机APP界面
5 结束语
本文设计的空气质量监测系统,可以监测空气中的有害气体浓度和温湿度,并可以将数据传送到阿里云平台,用户可以通过电脑web端和手机app查看,同时可以控制现场照明设备。系统可靠,成本低满足了现场环境的需要。