随着现代农业技术的发展,智能化管理在农业生产中扮演着越来越重要的角色。特别是在养殖业中,环境条件的好坏直接关系到养殖动物的生长状态和健康水平。因此,建立一个能够实时监控并调节养殖环境的系统显得尤为重要。这样的系统不仅可以提高养殖效率,减少人工成本,还可以通过精准控制环境参数来提升动物福利,进而保证产品质量。
基于此背景,本项目设计并实现一套基于STM32微控制器的养殖场环境监测系统。该系统将集成多种传感器用于采集环境数据,如温度、湿度和光照强度等关键参数。通过本地OLED显示屏,工作人员可以实时查看这些数据,确保养殖环境处于最佳状态。同时,考虑到现代养殖业对于远程管理和自动化的需求,系统还将配备ESP8266WiFi模块,通过MQTT协议与华为云物联网平台进行通讯。这样一来,借助于在Windows平台上设计的上位机软件以及Android移动应用,管理者可以从任何地点远程监控环境状况,调整预设阈值,并且根据实际情况启动相应的设备,比如控制通风风扇、加湿器或照明灯具。
此外,系统的硬件选型也经过了深思熟虑。为了确保系统的稳定性和可靠性,采用了成熟可靠的传感器和技术方案,如DHT11温湿度传感器、BH1750光敏传感器以及通过继电器控制的5V风扇和加湿器模块。供电方面选择了常见的USB线-5V供电方式,既方便又节能。整个系统的开发不仅能够满足现代化养殖业的实际需求,同时也为未来进一步的技术升级提供了坚实的基础。
华为云IoT平台是华为提供的一站式物联网(InternetofThings,IoT)服务解决方案,旨在帮助企业和开发者快速构建安全可靠的物联网应用。该平台基于云计算技术,集成了设备接入、数据处理、业务逻辑定制、数据分析等核心功能,支持大规模设备的连接与管理,以及高效的数据交换与处理。
在设备接入方面,华为云IoT平台提供了丰富的协议支持,包括MQTT、CoAP、HTTP等标准协议,同时也支持自定义协议,确保不同类型的设备能够轻松接入云端。通过安全认证机制,如设备证书、密钥等方式,保障了设备与平台之间的通信安全。
对于数据处理,华为云IoT平台具备强大的规则引擎,可以对收集到的设备数据进行实时处理和分析,根据预设的条件触发相应的动作,比如将处理后的数据转发至其他系统或调用API接口实现业务联动。此外,平台还支持数据存储,方便用户对历史数据进行查询和分析。
在业务逻辑定制上,华为云IoT平台允许用户根据实际需求灵活配置业务流程,比如设置告警阈值、定义设备间的互动模式等,极大地提高了应用开发的灵活性和效率。同时,平台也提供了丰富的API接口,便于第三方系统的集成和扩展。
安全性是华为云IoT平台设计的重要考量之一。除了前面提到的设备接入安全措施外,平台还采用了多重防护策略,如数据加密传输、访问控制、安全审计等,确保整个物联网系统的稳定运行和用户数据的安全。
华为云IoT平台还注重用户体验,提供了直观易用的管理界面,让非专业技术人员也能轻松完成设备管理和监控工作。无论是小规模的试验项目还是大规模的商业部署,华为云IoT平台都能提供全面的支持和服务,助力客户加速物联网应用的落地实施。
(1)实时环境监测
系统配备了DHT11温湿度传感器和BH1750光敏传感器,能够持续监测养殖区域内的温度、湿度以及光照强度等关键环境参数。这些数据的实时收集有助于及时发现环境变化,从而迅速采取措施调整环境条件。
(2)本地数据显示
通过OLED显示屏,系统能够在本地即时显示所监测到的各项环境参数。这使得工作人员无需依赖外部设备即可了解当前的环境状况,便于快速响应环境变化。
(3)远程监控与管理
系统内置了ESP8266WiFi模块,允许它通过MQTT协议与华为云物联网平台建立连接。借助于该平台,用户可以利用Windows上位机软件或Android移动应用程序远程访问环境监测数据,实现了跨越地理限制的环境监控。此外,用户还可以通过上位机软件或移动应用设置环境参数的阈值,并接收超出阈值范围的告警通知。
(4)自动化控制
当环境监测数据超出预定的安全范围时,系统能够自动启动相应的设备进行环境调节。例如,当湿度超过预设值时,系统会自动开启通风风扇来降低湿度;当湿度低于设定值,则启动加湿器增加空气湿度;若光照不足,则自动开启灯光补充光源。这样,即使在无人值守的情况下,也能确保环境条件保持在适宜范围内。
(5)设备控制接口
系统设计了继电器控制接口来操作5V风扇和加湿器模块,确保了设备的安全启停。通过这种方式,不仅简化了硬件设计,而且提高了系统的可靠性和使用寿命。
【1】STM32微控制器:作为整个系统的主控单元,负责协调各个传感器的数据采集、处理逻辑运算以及控制指令的发送。
【2】DHT11温湿度传感器:用于实时监测养殖环境中的温度和湿度,并将数据传送给STM32进行处理。
【3】BH1750光敏传感器:用于检测养殖环境内的光照强度,为系统提供光照数据,以便做出相应的照明控制决策。
【4】OLED显示屏:用于在本地显示传感器采集到的环境数据,包括温度、湿度和光照强度等信息。
【5】ESP8266WiFi模块:使系统能够接入无线网络,并通过MQTT协议与华为云物联网平台通信,实现远程数据传输。
【6】继电器模块:用于控制5V风扇和加湿器的开关,确保设备根据环境参数的变化自动启停。
【7】5V小风扇:当湿度超标时,通过继电器模块启动,以帮助降低环境湿度。
【8】5V加湿器模块:当湿度低于设定值时,由继电器模块控制开启,以增加环境湿度。
【9】LED照明系统:当光照强度低于阈值时,自动开启以补充光照,确保养殖环境的光照条件符合要求。
【10】USB供电模块:系统采用USB线5V供电方式,为整个系统提供稳定的电力供应,确保所有组件正常工作。
基于STM32设计的养殖场环境监测系统支持的功能如下:(1)支持对养殖环境中的温度、湿度、光照强度实时监测;(2)本地通过0LED显示屏实时显示检测数据。(3)能够通过WiFi模块通过MQTT协议连接华为云物联网平台,通过Qt设计Windows上位机和Android手机APP,能远程查看环境参数,设置阀值参数,控制通风风扇。(4)当湿度超过阀值,通过风扇实现送风;当湿度低于值,利用加湿模块实现加湿;当光照强度低于阈值,打开灯;硬件选型:(1)WiFi模块采用ESP8266-WIFI模块(2)光敏模块:采用BH1750光敏传感器(3)风扇模块:采用5V小风扇,通过继电器控制开关。(4)加湿器模块:采用5V加湿器模块,通过继电器控制开关。(5)温湿度传感器:采用DHT11(6)供电电源:采用USB线-5V供电。
设计思路的核心在于构建一个高效且易于维护的智能环境监测系统,通过自动化的手段来优化养殖环境的管理。
第一步,选择STM32作为主控芯片是因为其高性能与低功耗特性,能够很好地支持多任务处理,同时保证了系统的稳定运行。此外,STM32丰富的外设接口也方便了与其他传感器和执行机构的连接,为后续的功能扩展提供了便利。
针对环境参数的监测,项目选用了DHT11温湿度传感器和BH1750光敏传感器。DHT11因其高性价比和简单的接口协议被广泛应用于各种环境监测场景,而BH1750则以其高精度测量能力和良好的稳定性成为了光照强度检测的理想选择。这两类传感器的数据采集结果将通过STM32的ADC模块进行读取,并经由主控芯片内部的逻辑判断后,决定是否需要启动环境调节装置。
为了便于现场人员随时了解环境状况,设计中加入了OLED显示屏,用于直观展示传感器采集的数据。OLED屏幕的优势在于其清晰度高且视角宽广,即便是在光线较暗的环境中也能清晰地显示信息。
考虑到远程监控的重要性,系统引入了ESP8266WiFi模块。通过WiFi模块,系统可以连接至互联网,并利用MQTT协议与华为云物联网平台进行数据交换。MQTT协议因其轻量级和高效性非常适合于物联网应用场景,能够有效支持大量的并发连接,确保数据的实时传输。借助云端服务,用户可以通过上位机软件或智能手机应用程序实时查看环境参数,并根据需要调整设置。
在执行机构的选择上,系统采用了5V小风扇和加湿器模块,并通过继电器进行控制。这种设计不仅简化了电路结构,还增强了系统的安全性和可靠性。当环境湿度或光照不符合预设标准时,系统会自动启动相应的设备来进行调节,确保环境始终处于最佳状态。
在供电方案上选择了USB线5V供电,这不仅简化了电源设计,降低了系统的复杂性,还使得系统更加节能环保。整体设计思路强调了系统集成度与自动化程度,力求通过最小的硬件配置实现最有效的环境管理。
STM32的编程语言选择C语言,C语言执行效率高,大学里主学的C语言,C语言编译出来的可执行文件最接近于机器码,汇编语言执行效率最高,但是汇编的移植性比较差,目前在一些操作系统内核里还有一些低配的单片机使用的较多,平常的单片机编程还是以C语言为主。C语言的执行效率仅次于汇编,语法理解简单、代码通用性强,也支持跨平台,在嵌入式底层、单片机编程里用的非常多,当前的设计就是采用C语言开发。
开发工具选择Keil,keil是一家世界领先的嵌入式微控制器软件开发商,在2015年,keil被ARM公司收购。因为当前芯片选择的是STM32F103系列,STMF103是属于ARM公司的芯片构架、Cortex-M3内核系列的芯片,所以使用Kile来开发STM32是有先天优势的,而keil在各大高校使用的也非常多,很多教科书里都是以keil来教学,开发51单片机、STM32单片机等等。目前作为MCU芯片开发的软件也不只是keil一家独大,IAR在MCU微处理器开发领域里也使用的非常多,IAR扩展性更强,也支持STM32开发,也支持其他芯片,比如:CC2530,51单片机的开发。从软件的使用上来讲,IAR比keil更加简洁,功能相对少一些。如果之前使用过keil,而且使用频率较多,已经习惯再使用IAR是有点不适应界面的。
上位机的开发选择Qt框架,编程语言采用C++;Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。Qt能轻松创建具有原生C++性能的连接设备、用户界面(UI)和应用程序。它功能强大且结构紧凑,拥有直观的工具和库。
打开官网,搜索物联网,就能快速找到设备接入IoTDA。
华为云物联网平台(IoT设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。
使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。
物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。
设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。
业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。
点击立即创建。
正在创建标准版实例,需要等待片刻。
创建完成之后,点击实例名称。可以看到标准版实例的设备接入端口和地址。
在上面也能看到免费单元的限制。
开通之后,点击总览,也能查看接入信息。我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。
总结:
端口号:MQTT(1883)|MQTTS(8883)接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:
打开Windows电脑的命令行控制台终端,使用ping命令。ping一下即可。
根据自己产品名字填写,下面的设备类型选择自定义类型。
创建完成之后点击查看详情。
产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。
模型简单来说:就是存放设备上传到云平台的数据。
你可以根据自己的产品进行创建。
比如:
烟雾可以叫MQ2温度可以叫Temperature湿度可以叫humidity火焰可以叫flame其他的传感器自己用单词简写命名即可。这就是你的单片机设备端上传到服务器的数据名字。
先点击自定义模型。
再创建一个服务ID。
接着点击新增属性。
产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。
创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。
当前的设备是采用MQTT协议与华为云平台进行通信。
MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。
MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。
业务流程:
对于设备而言,一般会订阅平台下发消息给设备这个主题。
设备想接收平台下发的消息,就需要订阅平台下发消息给设备的主题,订阅后,平台下发消息给设备,设备就会收到消息。
如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。
以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down最终的格式:$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down
对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。
这个操作称为:属性上报。
根据帮助文档的介绍,当前设备发布主题,上报属性的格式总结如下:
发布的主题格式:$oc/devices/{device_id}/sys/properties/report最终的格式:$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下:{"services":[{"service_id":<填服务ID>,"properties":{"<填属性名称1>":<填属性值>,"<填属性名称2>":<填属性值>,..........}}]}根据JSON格式,一次可以上传多个属性字段。这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。根据这个格式,组合一次上传的属性数据:{"services":[{"service_id":"stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
接下来介绍,华为云平台的MQTT三元组参数如何得到。
MQTT协议的端口支持1883和8883,它们的区别是:8883是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。
根据上面的域名和端口号,得到下面的IP地址和端口号信息:如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。(IP地址就是域名解析得到的)
华为云的MQTT服务器地址:117.78.5.125华为云的MQTT端口号:1883
如何得到IP地址?如何域名转IP?打开Windows的命令行输入以下命令。
下面是打开的页面:
填入设备的信息:(上面两行就是设备创建完成之后保存得到的)
直接得到三元组信息。
ClientId663cb18871d845632a0912e7_dev1_0_0_2024050911Username663cb18871d845632a0912e7_dev1Password71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237
完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。
点击详情页面,可以看到上传的数据:
到此,云平台的部署已经完成,设备已经可以正常上传数据了。
MQTT服务器:117.78.5.125MQTT端口号:183//物联网服务器的设备信息#defineMQTT_ClientID"663cb18871d845632a0912e7_dev1_0_0_2024050911"#defineMQTT_UserName"663cb18871d845632a0912e7_dev1"#defineMQTT_PassWord"71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"//订阅与发布的主题#defineSET_TOPIC"$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down"//订阅#definePOST_TOPIC"$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report"//发布发布的数据:{"services":[{"service_id":"stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}
创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。
【1】获取项目凭证点击左上角用户名,选择下拉菜单里的我的凭证
项目凭证:
28add376c01e4a61ac8b621c714bf459
【2】创建IAM用户
鼠标放在左上角头像上,在下拉菜单里选择统一身份认证。
点击左上角创建用户。
创建成功:
【3】创建完成
用户信息如下:
主用户名l19504562721IAM用户ds_abc密码DS12345678
设备影子介绍:
设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。
我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。
在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。
调试完成看右下角的响应体,就是返回的影子数据。
设备影子接口返回的数据如下:
{"device_id":"663cb18871d845632a0912e7_dev1","shadow":[{"service_id":"stm32","desired":{"properties":null,"event_time":null},"reported":{"properties":{"DHT11_T":18,"DHT11_H":90,"BH1750":38,"MQ135":70},"event_time":"20240509T113448Z"},"version":3}]}
调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。
链接如下:
为了方便查看设备上传的数据,接下来利用Qt开发一款Android手机APP和Windows上位机。
使用华为云平台提供的API接口获取设备上传的数据,进行可视化显示,以及远程控制设备。
打开下载链接后选择下面的版本进行下载:
qt-opensource-windows-x86-5.12.6.exe13-Nov-201907:283.7GDetails
软件安装时断网安装,否则会提示输入账户。
安装的时候,第一个复选框里勾选一个mingw32编译器即可,其他的不管默认就行,直接点击下一步继续安装。
选择MinGW32-bit编译器:(一定要看清楚了)
说明:我这里只是介绍PC端,也就是Windows系统下的Qt环境搭建。Android的开发环境比较麻烦,如果想学习Android开发,想编译Android程序的APP,需要自己去搭建Android环境。
前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。
【1】新建工程
【2】设置项目的名称。
【3】选择编译系统
【4】选择默认继承的类
【5】选择编译器
【6】点击完成
【7】工程创建完成
打开默认的界面如下:
根据自己需求设计界面。
点击软件左下角的绿色三角形按钮进行编译运行。
编译之后的效果:
如果想编译Android手机APP,必须要先自己配置好自己的Android环境。(搭建环境的过程可以自行百度搜索学习)
然后才可以进行下面的步骤。
创建完成。
Qt本身是跨平台的,直接选择Android的编译器,就可以将程序编译到Android平台。
然后点击构建。
生成的apk的目录在哪里呢?编译完成之后,在控制台会输出APK文件的路径。
知道目录在哪里之后,在Windows的文件资源管理器里,找到路径,具体看下图,找到生成的apk文件。
D:/linux-share-dir/QT/build-app_Huawei_Eco_tracking-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk
本项目致力于开发一款基于STM32微控制器的智能养殖场环境监测系统。该系统集成了DHT11温湿度传感器、BH1750光敏传感器等,用于实时采集养殖环境中的温度、湿度及光照强度数据,并通过OLED显示屏提供本地数据显示功能。为了实现远程监控与管理,系统还配备了ESP8266WiFi模块,利用MQTT协议与华为云物联网平台连接,使得用户可以通过定制的Windows上位机软件或Android应用程序随时随地访问环境数据,设定报警阈值,并远程控制通风风扇、加湿器和灯光等设备,以确保养殖环境维持在最优状态。系统采用USB线5V供电,确保了运行的便捷性和能耗的有效控制。
总体而言,这一环境监测系统通过智能化手段提升养殖场的管理水平,降低运营成本,同时提高动物的生长质量和健康水平。
华为开发者空间发布
让每位开发者拥有一台云主机
在此一键设置昵称,即可参与社区互动!
*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。