应用笔记|基于STM32的物联网环境监测系统

2023-10-10  

本应用笔记以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。


同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入机智云物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。


目录预览


1. 总体方案设计

2. 系统硬件设计

3. 系统软件设计

4. 物联网平台设备接入

5. 软硬件实物调试


01

总体方案设计


本环境监测系统设计选取了控制和数据处理能力强的ST32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。


该系统使用液晶显示屏幕完成对温湿度数值,光照强度数值,大气压强数值以及设备的状态信息的显示。当无线通讯模组成功连接网络之后,接入云平台。用户可以通过登录物联网云平台后台[4],查看传感器上报的数据信息和进行远程控制。开发Android上位机软件,使用户在上位机程序上实现对各种环境质量参数监测。整个系统的整体框架图如下图所示。


f9797ea2-cd40-11ed-ad0d-dac502259ad0.png

■1.1 控制模块方案


本环境监测系统设计使用单片机作为整个系统的控制中心。需要完成传感器数据的采集,无线通讯模组的数据交互,显示传感器数据的功能[5]。在本次的环境监测系统中,控制模块采用的是STM32系列单片机。


例如在芯片选择上面,有低功耗类型STM32L系列、主流类型F1系列、高性能F7/H7系列、以及异构系统架构下的 STM32MP157系列。在软件程序设计过程中,官方提供了图形化配置软件STM32CubeMX。可以快速生成底层配置代码,减少重复性移植。同时该32位芯片的相关技术资料和参考设计资料较多,因此被运用到各种电子系统设计之中。本应用笔记准备使用控制性能强劲和数据处理能力强的STM32F103ZET6芯片作为核心控制模块元件。


■1.2 环境监测传感器方案


环境监测系统主要需要监测的数据有温湿度数据,光照强度数据和大气压强数据等基本环境质量参数。因此需要选择相应的温湿度传感器,光强传感器,精度较高的气压传感器[6]。


温湿度数据采集传感器选择了AHT10。AHT10模块上面有一个湿度传感器元件和一个片上温度传感元件,该产品具有快速响应、抗干扰能力强和高精度等优点[7]。


光照强度数据采集的传感器选择了BH1750。BH1750是标准(I2C)接口的16位数字输出类型的环境光强度传感器,可以利用BH1750模块的高分辨率探测较大范围内的光照强度变化情况[8]。


大气压强数据采集传感器选择了BMP280。数字式气压传感器BMP280,具有高精度的特点,而且也具有测量环境温度和高度的功能。


综上所述的传感器模块,在选择时考虑到了其成本,使用的方便性,相关设计资料的丰富性,传感器模块实物图如下图所示。


f987462c-cd40-11ed-ad0d-dac502259ad0.png

■1.3 无线模块方案

方案一:对于长距离无线通讯模块的选择。查询资料后,了解了国产LTE无线通讯模组上海合宙公司。该公司研发的LTE Cat 1无线通信模组提供了丰富的通用外设接口,并且支持Lua二次开发,合宙官方提供了嵌入式脚本运行框架LuatOS。但是模组价格比较贵,而且开发过程比较复杂,相关资料和设计参考较少,开发难度较大。


方案二:esp8266芯片是国产芯片公司乐鑫科技所研发的一款WiFi无线模组芯片。内置TCP/IP协议栈,支持AT本地升级和OTA远程升级。该无线模组能够很好的接入国内的开放的物联网云平台,具有易操作化的特点,主要是相关资料和设计参考较多,开发难度较小。


经过对上述方案对比,方案二中的ESP8266模块,拥有丰富的相关设计资料。最终选择了以ESP8266芯片作为核心的无线模组。作为单片机与物联网云端进行数据传输和交换的单元,无线模块实物图如下图所示。

f993aeda-cd40-11ed-ad0d-dac502259ad0.png

02

系统硬件设计

环境监测系统选取了STM32F103ZET6芯片作为电路的核心控制和数据处理单元。该芯片支持UART、SPI、I2C接口,芯片内部集成了512KB闪存和64KB SRAM,可以存储更多的程序和数据。环境监测系统的主控电路设计如下图所示。

f9a02958-cd40-11ed-ad0d-dac502259ad0.png

STM32芯片正常运行所需要的电压范围为2.0~3.6V,实际运行时的电流只有几十毫安,因此芯片功耗非常低。芯片可对系统电路之中的电压进行检测,可与电源芯片相接一起完成开关电源调节。

芯片正常运行时,需要一个外部时钟触发信号,为此将使用频率范围在4~16MHz之间的晶体振荡器。芯片内部存在一个自动校准的RTC振荡电路,其实际运行的频率能够达到32KHZ。在本次设计中,因为STM32系列拥有丰富的串口接口,因此可以实现与多个通讯模组通信。同时可以添加调试接口,利用串口软件实现调试功能,打印设备状态信息。


03

系统软件设计

基于STM32的环境监测系统的主程序流程如下。整个系统,在提供电源之后,开始进行系统模块的初始化操作。如进行传感器设备的初始化,LCD模块的初始化,无线通讯模组的初始化。当完成初始化操作之后,LCD屏幕则会显示初始化信息。

此时,利用路由器或手机热点提供WIFI信号,WIFI模块会进行联网操作。当联网成功时,系统开始接收传感器设备采集的数据,APP程序会显示相关传感器数据信息,LCD屏幕也会显示环境监测系统的主要监测数据。如果联网失败,则会重新尝试连接网络。主程序设计流程图如下图所示。

f9acbbdc-cd40-11ed-ad0d-dac502259ad0.png

04

物联网平台设备接入

在本次的环境监测系统的设计中,利用了无线模块进行基本通信操作。传统的无线模组与单片机进行数据交换,一般的方案是利用无线模组建立局域网实现通信功能。随着云计算等相关信息技术的进步,现在的无线通讯模组可以实现与云端连接,实现数据远程传输的功能。

在本次设计中,使用的无线模组需要连接网络,并接入云平台。用户可以通过登录机智云物联网云平台后台,查看无线通讯模块上报的传感器数据和进行远程控制等操作。在物联网云平台的选择中,选择了国内的机智云物联网平台。物联网设备接入的方案,如下图所示。

f9b9f4a0-cd40-11ed-ad0d-dac502259ad0.png

云平台提供了两种版本的GAgent通信协议的接入方案,主要是独立MCU方案和SOC方案两种。本次环境监测系统的设计中,选择了独立MCU方案接入平台。

在本次设计过程中,需要把GAgent协议移植到WIFI模组上面,从而实现对接云平台进行数据交互的功能。云平台提供了GAgent固件,GAgent固件的主要作用是完成对数据进行上报云平台和平台远程下发命令的功能[14]。固件下载效果如下图所示。

f9c8c50c-cd40-11ed-ad0d-dac502259ad0.png

4.1 接入机智云平台的流程


在本次的环境监测系统是软件设计中,采用了MCU+WIFI通信模组方案,现在介绍接入机智云平台的流程。第一步,注册IoT平台的开发者账号,并登陆选择产品类型并创建。第二步,填写产品相关的基本信息之后,获取到平台提供的Product Key和Product Secret等密钥信息[15],如下图所示。

f9d7be2c-cd40-11ed-ad0d-dac502259ad0.png

第三步,创建相关数据点信息,完成相关数据类型的填写。在环境监测系统的设计中,需要创建温度数据Temperature,湿度Humidity,光照强度Light_Intensity,气压Pressure等主要的传感器数据点,如下图所示。

f9e9007e-cd40-11ed-ad0d-dac502259ad0.png

第四步,使用IoT平台提供SDK文件包,进行相关代码移植。在SDK包生成的过程中,平台提供了两种类型。本次系统设计过程中,选择独立MCU方案作为最终方案。

在支持的硬件平台中,有常见MCU类型。例如有STM32平台,MSP430平台等,都提供了相关的测试SDK包。选择使用通用的MCU平台生成的SDK的代码移植,有利于之后移植到其他的MCU芯片平台上面去,选择如图4-11所示。

f9fcb8bc-cd40-11ed-ad0d-dac502259ad0.png

机智云SDK包的代码移植到STM32系列平台的流程如下。在整个代码移植的过程,主要是去移植串口初始化及配置,定时器的初始化及配置[16],传感器数据的采集接收和上报函数的配置,以及相关模块的初始化配置。

4.2 上位机软件应用开发

fa1097b0-cd40-11ed-ad0d-dac502259ad0.pngfa1f9ecc-cd40-11ed-ad0d-dac502259ad0.png

上位机软件应用开发。在本次的环境监测系统的设计中,采用了Android应用程序作为上位机软件。一般在APP开发设计过程中,主要是进行APP的UI界面设计,和相关功能模块底层逻辑设计。在APP的UI界面设计的过程中,选择使用XML进行布局,在应用程序的底层逻辑设计使用的Java语言。应用开发选择的是安卓平台,如下图所示。

fa2ae25a-cd40-11ed-ad0d-dac502259ad0.png

本次设计中,使用平台提供生成的SDK文件包进行修改。由于平台的提供的例程只是完成了基本的显示效果,界面效果一般。所以接下来的主要工作是对官方源码进行修改。打开Android Studio软件,导入从平台下载的Demo源码,通过修改src文件里面的layout的布局文件,进行界面UI设计和优化。

通过对src文件里面的java代码,进行底层逻辑代码修改[17]。在界面的UI设计工过程,主要是传感器的数据和系统状态信息显示,基本显示效果如图4-17所示。APP的界面设计需要优化,后期可以添加相关传感器历史数据的查看和实时动态曲线的功能[18]。

fa3b65bc-cd40-11ed-ad0d-dac502259ad0.png


05

软硬件实物调试

环境监测系统的硬件实物的初步实验性调试工作。在实验性调试中,通过USB线接上电脑USB接口,实现供电。系统供上电之后,会有开机启动界面显示。

开机结束之后,界面会停留在系统的功能选择界面。选择界面包括了三种功能展示。第一部分是传感器采集到的数据SensorMessage展示, 第二部分是系统的网络状态信息NetworkMessage展示, 第三部分是系统的基本信息SystemMessage展示。基本功能的选择界面,如下图所示。

fa49e966-cd40-11ed-ad0d-dac502259ad0.png

基于STM32的物联网环境监测系统的上位机软件调试。在使用该Android应用程序时,APP和无线模组需要一起配合操作。在配网时,需要把手机和WiFi同时连接到同一个热点信号下面,进行配置。输入WiFi的账号SSID和Password,选择WiFi模组的类型进行配置。

配置过程中APP和硬件设备不要进行任何操作,否则会出现配置失败的情况。如果配置失败,请按下配网按键,重新配置。APP配网流程如下图所示。

fa583818-cd40-11ed-ad0d-dac502259ad0.png

当配网成功时,会显示在物联网云平台上面注册的设备名称。点击进入,则会显示相关传感器数据信息,如下图所示。


fa6c8ade-cd40-11ed-ad0d-dac502259ad0.pngfa7b48b2-cd40-11ed-ad0d-dac502259ad0.png


登录物联网平台的后台,选择查看设备日志功能,在设备的运行记录里面,可以查看到上报的数据点信息,并支持动态曲线显示,如下图所示。


fa88a034-cd40-11ed-ad0d-dac502259ad0.png



06

总结



基于STM32的物联网环境监测系统的整个设计过程中,使用了相关的环境传感器设备去监测周围环境的基本质量参数。在整个设计过程中,利用LCD屏幕显示数据信息,能够显示基本传感器测量的数据。

由于显示效果一般,后期可以添加嵌入式GUI图形界面,例如LVGL,TouchGFX,emWin。使用无线通信模组与单片机进行数据交互,完成了基本的通信功能,但在模组的选择上需要考虑到其稳定性和功耗问题。

在上位机软件程序设计中,使用了Android应用程序去完成远程监测的功能,但是APP的界面设计需要优化,后期可以添加相关传感器实时动态曲线的功能。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。