赞
踩
基于机智云物联网的环境监测系统 视频演示
摘 要:随着人民对美好生活的向往,人们对于环境的重视程度越来越强烈,环境对生活的影响已经成为一个热点问题。本设计以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。在设计过程中,开发Android上位机软件,使用户在上位机实现对于温度、湿度、光照强度和气压等相关环境参数监测。
Abstract:With the people’s yearning for a better life, people pay more and more attention to the environment, the impact of the environment on life has become a hot issue.This design uses STM32 as the control and data processing unit. Meanwhile, the AHT10, BH1750, BMP280 sensors to monitor the surrounding environmental parameters. Display of sensor data and related information on the LCD screen. At the same time, the wireless module and the single chip microcomputer are used for data interaction. When the wireless communication module is successfully connected to the network, and connected to the Internet of Things cloud platform. By login to the background of the Internet of Things cloud platform. Users can view the data reported by the sensor and conduct remote control. In the design process, Android software application is developed to enable users to monitor relevant environmental parameters. Display temperature, humidity, light intensity and pressure data on the APP.
Keywords:STM32; Internet of Things; Environmental Monitoring
在我国经济稳定发展的背景下,人们的生活质量得到了明显的提高。与此同时经济发展所带来的环境的问题,开始慢慢展现出来。环境问题被越来越多的人们重视。为了拥有更健康的生存环境,治理环境污染,改善环境质量,促进绿色发展是目前社会发展的形势所趋[1]。
我国研究环境监测系统的研究发展过程比较坎坷。我国发展起步比较晚,与其他西方国家相比较,相关领域落后几十年。主要原因是由于当时的社会生产水平不高,国内相关的技术也没有很多,国外的相关核心技术进行封锁,限制性太大。只能去引进国外的环境监测系统设备以及获取服务。同时由于会操作国外先进设备的人员较少,很难实现大规模使用。
我国环境监测工作是随着国家对于环境保护的加大投入,向高质量发展的目标,从而发展起来的。国内的传统的环境监测装置系统,一般有易受到现场安装使用环境被限制的缺点。场景的应用适用性比较差。传统的测量和控制操作手段比较单一,不能够远距离的监控和报警等提示功能。但是,随着国家对物联网信息技术的发展加大投入。国内相关物联网平台和传统的环境监测的厂商之间共同合作。我国的环境监测系统的发展的方向是明确的,是向着智能化方向前进。实现传感器设备端与云端之间的互联,进一步向着万物互联的方向发展。
国外的环境监测系统设备的研究发展情况如下。传感器技术以及相关电子技术最先出现在西方国家。相关的传感器芯片和数据处理软件有着快速的发展,早实现了智能化操作。许多西方发达国家的环境监测系统装置,已经能同时进行多路采集各种周围环境的相关质量参数[2]。通过物联网技术实现数据的云端监测和进行相关处理分析,从而进行预测并得到相关结论。历经多年的发展和相关电子信息技术的进步,研制出具有自动化、智能化的监测系统成为各个国家的目标。
进入21世纪,随着物联网信息技术与电子信息技术的快速进步。因此有必要去设计出一种以物联网技术、传感器技术和电子信息技术构成的多功能环境监测装置。该系统可以同时监测周围环境的多路环境参数。通过环境监测系统装置[3],能够帮助人们准确的去监测周围环境的参数。力求以最大的力度,寻求科学合理的方法,去解决日常生产生活出现的环境问题。
通过监测系统的长期的积累的数据,分析和追溯污染源头,分析其变化规律。从而建立相关的预警和预报系统。环境监测对于人们的日常生产生活非常重要。不但体现在环境保护和控制污染等方面,而且还是人类生存的重要的基石。坚持促进绿色发展,创建绿色中国的理念,才能拥有更美好的健康生活环境。
本环境监测系统设计选取了控制和数据处理能力强的STM32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。该系统使用液晶显示屏幕完成对温湿度数值,光照强度数值,大气压强数值以及设备的状态信息的显示。当无线通讯模组成功连接网络之后,接入云平台。用户可以通过登录物联网云平台后台[4],查看传感器上报的数据信息和进行远程控制。开发Android上位机软件,使用户在上位机程序上实现对各种环境质量参数监测。整个系统的整体框架图如图2-1所示。
本环境监测系统设计使用单片机作为整个系统的控制中心。需要完成传感器数据的采集,无线通讯模组的数据交互,显示传感器数据的功能[5]。在本次的环境监测系统中,控制模块采用的是STM32系列单片机。
例如在芯片选择上面,有低功耗类型STM32L系列、主流类型F1系列、高性能F7/H7系列、以及异构系统架构下的 STM32MP157系列。在软件程序设计过程中,官方提供了图形化配置软件STM32CubeMX。可以快速生成底层配置代码,减少重复性移植。同时该32位芯片的相关技术资料和参考设计资料较多,因此被运用到各种电子系统设计之中。本课题准备使用控制性能强劲和数据处理能力强的STM32F103ZET6芯片作为核心控制模块元件。
环境监测系统主要需要监测的数据有温湿度数据,光照强度数据和大气压强数据等基本环境质量参数。因此需要选择相应的温湿度传感器,光强传感器,精度较高的气压传感器[6]。
温湿度数据采集传感器选择了AHT10。AHT10模块上面有一个湿度传感器元件和一个片上温度传感元件,该产品具有快速响应、抗干扰能力强和高精度等优点[7]。
光照强度数据采集的传感器选择了BH1750。BH1750是标准(I2C)接口的16位数字输出类型的环境光强度传感器,可以利用BH1750模块的高分辨率探测较大范围内的光照强度变化情况[8]。
大气压强数据采集传感器选择了BMP280。数字式气压传感器BMP280,具有高精度的特点,而且也具有测量环境温度和高度的功能。
综上所述的传感器模块,在选择时考虑到了其成本,使用的方便性,相关设计资料的丰富性,传感器模块实物图如图2-2所示。
随着物联网技术等相关通信技术的快速发展和更新迭代,目前的物联网技术呈现出智能化的特点[9]。因此在本系统设计中,决定使用远程通信模块进行数据通信和进行智能化操作。对接国内开放的物联网云平台,从而更加智能的,简单的完成整个设计的功能。
方案一:对于长距离无线通讯模块的选择。查询资料后,了解了国产LTE无线通讯模组上海合宙公司。该公司研发的LTE Cat 1无线通信模组提供了丰富的通用外设接口,并且支持Lua二次开发,合宙官方提供了嵌入式脚本运行框架LuatOS。但是模组价格比较贵,而且开发过程比较复杂,相关资料和设计参考较少,开发难度较大。
方案二: ESP8266芯片是国产芯片公司乐鑫科技所研发的一款WIFI无线模组芯片。内置TCP/IP协议栈,支持AT本地升级和OTA远程升级。该无线模组能够很好的接入国内的开放的物联网云平台,具有易操作化的特点,主要是相关资料和设计参考较多,开发难度较小。
经过对上述方案对比,方案二中的ESP8266模块,拥有丰富的相关设计资料。最终选择了以ESP8266芯片作为核心的无线模组。作为单片机与物联网云端进行数据传输和交换的单元,无线模块实物图如图2-3所示。
本次环境监测系统的设计过程中,需要使用显示模块进行显示。需要的显示的数据,主要包括传感器设备测量采集到的数据和系统的基本状态信息。在电子系统设计过程中,常使用的显示模块主要有以下两种,TFT彩屏和LCD1602两种。方案对比如下。
方案一:TFT屏幕是以背透和反射相结合的方式工作的,通过点脉冲直接控制[10]。从而实现显示效果。查询资料了解到了一种1.8寸的TFT彩屏模块。在色彩显示上,TFT屏幕的效果较好,色彩丰富且具有对比度高特点。同时在使用该LCD 显示模组时,需要用到的单片机的IO端口数量较少。
方案二:LCD1602是一种字符型液晶显示模块,具有成本低等特点。但是缺点是在使用LCD1602需要较多的单片机的IO端口数量。而且需要通过调节变阻器的大小,才能改变屏幕的显示效果,不能直接得到显示效果。
经过上述两个方案对比,由于需要对传感器数据的实际测量值进行显示,选择了显示内容更多和色彩效果更好的方案一,TFT显示模块实物图如图2-4所示。
环境监测系统选取了STM32F103ZET6芯片作为电路的核心控制和数据处理单元。该芯片支持UART、SPI、I2C接口,芯片内部集成了512KB闪存和64KB SRAM,可以存储更多的程序和数据。环境监测系统的主控电路设计如图3-1所示。STM32芯片正常运行所需要的电压范围为2.03.6V,实际运行时的电流只有几十毫安,因此芯片功耗非常低。芯片可对系统电路之中的电压进行检测,可与电源芯片相接一起完成开关电源调节。芯片正常运行时,需要一个外部时钟触发信号,为此将使用频率范围在416MHz之间的晶体振荡器。芯片内部存在一个自动校准的RTC振荡电路,其实际运行的频率能够达到32KHZ。在本次设计中,因为STM32系列拥有丰富的串口接口,因此可以实现与多个通讯模组通信。同时可以添加调试接口,利用串口软件实现调试功能,打印设备状态信息。
温湿度传感器模块核心是以AHT10芯片作为核心部分,还包括电平转换电路。AHT10芯片的产品特性如下,芯片的输入电压范围:2.3V至3.3V;具有低功耗的特点;芯片通讯方式采用标准的I2C接口通信。该温湿度传感器芯片的精度如下,湿度精度±3%RH,温度精度0.5℃。模块的参考设计电路如图3-2所示。
光强传感器模块核心是以BH1750芯片作为核心部分,还包括电平转换电路。BH1750芯片的产品特性如下,芯片的输入电压范围:3.0V至3.6V之间;其峰值灵敏度波长的典型值为560nm;输入的光照强度范围为1~65535Lx,其最小的分辨率为0.5Lx[11]。BH1750芯片采用的通讯方式是标准的I2C接口通信。模块的参考设计电路如图3-3所示。
气压传感器模块核心是以BMP280芯片作为核心部分,还包括电平转换电路。气压传感器的产品特性如下,芯片的输入电压范围:1.7~3.6V;芯片的气压工作范围为300hPa至1100hPa;芯片工作温度范围为-40℃至85℃;BMP280芯片支持标准的I2C接口通信和SPI通信;模块参考设计电路图如图3-4所示。
在本次的环境监测系统设计中,选择了1.8寸TFT彩色屏幕作为该系统的显示模块,LCD彩屏采用SPI接口通讯方式,驱动IC是ST7735S,其支持的显示的分辨率为128*160;支持16Bit RGB范围 65K色显示。该显示模块支字符,字符串,汉字,图片等效果显示。 彩色TFT显示模块接口电路图如图3-5所示。
环境监测系统选择了ESP8266系列芯片作为无线通讯部分。ESP8266系列芯片,其CPU时钟速率最高可以达到160MHz,同时具有丰富的外设接口;经典的WIFI模式支持三种类型,包括Station客户端模式、SoftAP服务端模式和SoftAP+Station混合模式[12];该无线模组支持TCP、HTTP、MQTT等基本网络协议。无线通信模块参考电路设计如图3-6所示。
在环境监测系统的设计中,通过按键模块进行GPIO输入操作,从而无线通信模块的配网操作。在本次环境监测系统的设计中,当按键KEY1按下时,LCD屏幕则会显示传感器数据监测信息;当按键KEY2按下时,LCD屏幕则会显示网络状态信息;当按键KEY3按下时,LCD屏幕则会显示系统相关信息。按键模块电路图如图3-7所示。
在电源供电方式选择过程中,可以采用的是连接USB接口进行供电。由于大部分的传感器设备模块的输入电压范围在3.3V左右,所以需要设计电平转换电路。该部分主要由电源线引入5V/1A的电源给系统供电,经KIA1117芯片降压为3.3V,给STM32主控系统和传感器设备供电。电源接口电路图如图3-8所示。
基于STM32的环境监测系统的主程序流程如下。整个系统,在提供电源之后,开始进行系统模块的初始化操作。如进行传感器设备的初始化,LCD模块的初始化,无线通讯模组的初始化。当完成初始化操作之后,LCD屏幕则会显示初始化信息。此时,利用路由器或手机热点提供WIFI信号,WIFI模块会进行联网操作。当联网成功时,系统开始接收传感器设备采集的数据,APP程序会显示相关传感器数据信息,LCD屏幕也会显示环境监测系统的主要监测数据。如果联网失败,则会重新尝试连接网络。主程序设计流程图如图4-1所示。
环境监测系统主要需要监测的数据,有温湿度数据,光照强度数据和大气压强数据。选择的环境监测系统的传感器,AHT10,BH1750,BMP280都是通过标准的I2C接口进行通信。
对于温湿度数据的采集,使用AHT10传感器。AHT10采集数据的流程。第一步,模块进行上电,等待40ms,目的是在读取温湿度数据过程之前,进行初始化操作。第二步,当等待时间结束后,进行触发测量操作。第三步,等待测量过程完成,从而获取传感器采集到的温湿度数据。流程如图4-2所示。
对于光照强度数据的采集,使用BH1750传感器。计算BH1750采集结果,单片机通过I2C协议读取的第一个字节是 BH1750寄存器的高8位,第二字节为寄存器的低8位数据,高8位数据左移8位再加上低8位数据[13],利用公式去计算最终的光照强度数值。测量步骤如图4-3所示。
对于气压数据的采集,使用BMP280传感器。 BMP280传感器的初始化流程如下,第一步,芯片内部数据全部清零;第二步,读芯片ID;第三步,进行测量控制寄存器操作;第四步,进行测量,测量时间的间隔为0.5ms;第五步,读取补偿值数据。官方数据手册提供的BMP280测量流程如图4-4所示。
在读取数据时,需要进行滤波操作使结果的更加稳定。BMP280传感器获取气压数值的底层驱动代码如图4-5所示。
//==================================================================================================
// 函数功能: BMP280 外设驱动函数部分
// 函数标记: bmp280GetPressure
// 函数说明: 传感器获取大气压数值
//-------------------------------------------------------------------------------------------------
// | - | - | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
//==================================================================================================
static void bmp280GetPressure(void)
{
u8 data[BMP280_DATA_FRAME_SIZE];
// read data from sensor
BMP_iicDevRead(BMP280_ADDR,BMP280_PRESSURE_MSB_REG,BMP280_DATA_FRAME_SIZE,data);
bmp280RawPressure=(s32)((((uint32_t)(data[0]))<<12)|(((uint32_t)(data[1]))<<4)|((uint32_t)data[2]>>4));
bmp280RawTemperature=(s32)((((uint32_t)(data[3]))<<12)|(((uint32_t)(data[4]))<<4)|((uint32_t)data[5]>>4));
}
环境监测系统选择了1.8寸TFT彩屏作为显示模块部分。主要的显示内容是传感器采集的数据,网络状态信息,系统信息,NTP网络时间以及系统开机启动的界面。LCD显示驱动,提供了基本的显示基本的英文字符,数字,以及显示汉字和图片的函数接口,同时支持不同的大小的字体的函数接口。
void system_show(void)
{
TFT_ShowString_16x16(8,0,"->System_Display<-",Blue1,White);
TFT_ShowString_16x16(20,20,"1.[SensorMessage]",Red,White);
TFT_ShowString_16x16(20,40,"2.[NetworkMessage]",Red,White);
TFT_ShowString_16x16(20,60,"3.[SystemMessage]",Red,White);
printf("---》1.环境监测信息 \r\n");
printf("---》2.网络状态信息 \r\n");
printf("---》3.系统相关信息 \r\n");
}
void NetworkInformation_show(void)
{
TFT_ShowString_16x16(0,0,"-->Network Message<--",Blue1,White);
TFT_ShowString_16x16(0,20,"ESP8266 WIFIModule",Red,White);
TFT_ShowString_16x16(0,40,"Gizwits AIoTCloud ",Red,White);
//显示机智云配网是否成功
TFT_ShowChinese_16x16(0,60, "天:",Red,White);
TFT_ShowChinese_16x16(20,60,"气",Red,White);
TFT_ShowString_16x16(40,60,":",Red,White);
TFT_ShowString_16x16(70,60,results[0].now.text,Blue1,White);
TFT_ShowString_16x16(0,80,"NetworkState:",Red,White);
TFT_ShowChinese_16x16(120,80,"●",WIFI_CONNECT_FLAG == 0?Red: Blue1 ,White);
}
void SystemInformation_show(void)
{
TFT_ShowString_16x16(0,0,"-->System Message<--",Blue1,White);
TFT_ShowString_16x16(0,20,"STM32 AIoT System",Red,White);
TFT_ShowString_16x16(0,40,"Num:51836011045 ",Red,White);
TFT_ShowString_16x16(0,60,"BBU WangZiXuan2022.4",Red,White);
}
void TFT_Show_SensorDATA(void)
{
//显示温度
TFT_ShowImage(0,0,32,32,Wendu);
TFT_ShowString_16x16(30,0,"Temp",Blue1,White);
TFT_ShowNumber_Float_16x16(30,16,aht_temp,2,1,Red,White);
TFT_ShowChinese_16x16(64,0,"℃",Magenta,White);
// //显示湿度
TFT_ShowImage(78,0,32,32,shidu);
TFT_ShowString_16x16(112,0,"Humi",Blue1,White);
TFT_ShowNumber_Float_16x16(108,16,aht_hum,2,1,Red,White);
TFT_ShowString_16x16(150,16,"%%",Magenta,White);
// //显示光照强度
TFT_ShowImage(0,35,32,32,Light_IMG);
TFT_ShowString_16x16(40,30,"Light_Data",Blue1,White);
TFT_ShowNumber_Float_16x16(30,48,Light,5,1,Red,White);
TFT_ShowString_16x16(95,48,"Lux",Magenta,White);
// //大气压 Hpa 正常的大气压是在1000百帕左右
TFT_ShowImage(0,70,32,32,IMG_Hpa);
TFT_ShowString_16x16(40,60,"Pressure",Blue1,White);
TFT_ShowNumber_SignedInteger_16x16(40,76,Press,4,Red,White);
TFT_ShowString_16x16(90,76,"Hpa",Blue1,White);
TFT_ShowString_16x16(0,96,"-->SensorMessage<--",Blue1,White);
}
在本次显示模块的程序设计中,完成了基本数据信息的展示。由于需要进行图片显示,占用资源较多。后期可以使用SD卡存储媒体资源,外部调用,减少单片机内部芯片资源的使用。在功能选择界面的程序设计中,后期可以完善功能选择的部分代码,实现多级菜单的效果。
在本次的环境监测系统的设计中,利用了无线模块进行基本通信操作。传统的无线模组与单片机进行数据交换,一般的方案是利用无线模组建立局域网实现通信功能。随着云计算等相关信息技术的进步,现在的无线通讯模组可以实现与云端连接,实现数据远程传输的功能。在本次设计中,使用的无线模组需要连接网络,并接入云平台。用户可以通过登录云平台后台,查看无线通讯模块上报的传感器数据和进行远程控制等操作。在物联网云平台的选择中,选择了国内的机智云平台。物联网设备接入的方案,如图4-7所示。
//串口3中断服务函数
void USART3_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
{
res =USART_ReceiveData(USART3);
gizPutData(&res, 1);//数据写入到缓冲区
}
}
//==================================================================================================
// 实现功能: 定时器3 中断服务函数函数
// 函数说明:
// 函数备注:
//--------------------------------------------------------------------------------------------------
// | - | - | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
//==================================================================================================
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
gizTimerMs();
}
}
//==================================================================================================
// 实现功能: 机智云协议配置
// 函数说明: 进行ESP8266配网操作
// 函数备注:
//--------------------------------------------------------------------------------------------------
// | - | - | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
//==================================================================================================
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199); //1MS系统定时
USART3_Configuration(9600); //WIFI初始化
userInit(); //设备状态结构体初始化
gizwitsInit(); //缓冲区初始化
}
传感器采集数据的成员,包括valueTemp,valueHum,valuePress,valueLight_Intensity等,数据上报函数userHandle()实现数据上报功能,代码如图4-15所示。
void userHandle(void) //数据上报给云平台的处理函数
{
currentDataPoint.valueTemp = aht_temp ; //上报温度数据
currentDataPoint.valueHum = aht_hum; //上报湿度数据
currentDataPoint.valuePress =Press ; //上报气压数据
currentDataPoint.valueLight_Intensity = Light;//上报光照强度数据
if(LEDR == 0)
{
currentDataPoint.valueLED = 0;
}
else
{
currentDataPoint.valueLED = 1;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。