基于STM32+华为云IoT设计的森林火灾预警系统

1. 功能介绍 自从地球上出现森林以来,每年平均发生森林火灾超过20万次。森林火灾不仅烧毁树木,直接减少森林面积,而且严重破坏森林结构和森林环境,导致森林生态系统失衡,森林生物量下降,生产力下降,牲畜减少和鸟类减少,甚至牺牲一些重要东西。高强度的火灾会破坏土壤的化学和物理性质,降低水的积累和土壤的渗透性,使部分林区地下水位升高而溃败,造成沼泽;此外,通过焦化和使土壤表面变暖,也会加速焦土的干燥,导致杂草过度生长。近年来,世界各地每年都会发生许多火灾。大多数国家的火灾直接损失超过国民经济总量的0.2%。事实上,除了直接的经济死亡和财产损失外,火灾后还有重大的间接损失,因此,有必要发展和加强防火和火灾报警。
这篇文章就采用华为云iot物联网平台快速搭建一个森林火灾预警联动控制系统模型,模拟演示检测到森林火灾之后,如何快速上报到云平台,向关联的指定服务器发送数据报告,并自动向抽水泵发送指令,打开开关抽水灭火。
硬件平台介绍:
mcu: stm32f103zet6
物联网云平台: 华为iot云平台
气体检测传感器: mq2-烟雾传感器、mq135-空气质量检测传感器
火焰检测: 采用火焰检测传感器
抽水机: 采用直流电机模拟水泵,打开开关抽水喷水灭火
上网网卡: 采用gsm模块sim800c,使用的是物联网专用卡,包年只能上网这种。
与云端服务器的通信协议: 终端设备采用mqtt3.1.1协议与华为云服务器进行登录连接。
温湿度检测传感器: dht11
供电方式: 电池+太阳能供电
为了演示联动控制,火警(烟雾)检测装置和灭火(直流电机)装置分为两个独立的设备,分别连接上云端。
火警检测装置连接上物联网服务器之后,可以在服务器上配置数据处理规则,如果烟雾浓度超标,可以自动向灭火装置发送指令,进行灭火操作。服务器收到火警检测装置上传的烟雾浓度、空气质量等数据后,可以向自己的私有服务器转发数据,方便自己服务器收到数据后做分析存储处理,比如: 向指定邮箱发送邮件、手机app推送通知栏、向指定用户推送短消息提示等等。
2. 创建产品(火警预警装置) 打开官网链接: https://www.huaweicloud.com/s/jeejqeibloe9ksu
(1)选择设备接入iottda选项。
(2)选择免费试用。
(3)在产品页面选择创建新的产品。
(4)填入产品信息,创建产品
(5)选择自己刚才创建的产品,创建数据模型,点击自定义模型
(6)选择添加属性
这个添加的属性就是设备端上报的数据类型。 比如: mq2烟雾传感器检测的烟雾数据值类型。
在这个页面上还有一个添加命令的功能,这是用于云端下发指令给设备端使用的。当前这个设备是火警检测装置,只需要上报数据给服务器,不需要下发指令,这里就只需要添加属性就行了。
根据自己的设备的具体情况填写即可,如果上报的数据有多种类型就创建多个属性。
3. 创建产品(灭火装置) 创建的流程和上面一样,这是多增加了一个命令下发的功能,方便云端远程控制电机开启和关闭,实现灭火功能。
(1)创建产品
(2)产品创建完毕之后,添加服务器id
(3)添加属性,电机属性是可以读可以写的,范围设置为0和1,只能开关
(4)添加命令,这个命令用于云端远程向设备下发指令,设备收到指令后可以做出相应的逻辑处理
接着选择新增输入参数:
最后点击确定即可。
现在产品已经创建完毕。
4. 创建设备(火警预警装置) (1)在设备页面,选择注册设备,选择自己的对应的产品,设备标识码一般填自己设备的硬件标号。
(2)设备创建成功之后会弹出弹窗,点击保存并关闭,会自动弹出下载窗口,是个文本文件,存放了密匙信息
 { device_id: 61bacdc02b2aa20288c5a094_qq1126626497, secret: 1126626497} 5. 创建设备(灭火装置) 流程与上面火警预警装置设备一样的。
{ device_id: 61bad0564d9b020287193be2_qq1126626497, secret: 1126626497} 6. 生成mqtt协议登录id和密匙 设备创建完成接来下生成mqtt登录账号、密匙,方便设备登录云端平台。
官网工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
填入刚才创建设备时,保存下载文件里的信息,对着弹窗填入,最后生成了id、用户名、密码参数,用于mqtt协议登录使用。
(1)火警预警装置生成登录参数
 clientid 61bacdc02b2aa20288c5a094_qq1126626497_0_0_2021121605username 61bacdc02b2aa20288c5a094_qq1126626497password 43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475 (2)灭火装置
clientid 61bad0564d9b020287193be2_qq1126626497_0_0_2021121605username 61bad0564d9b020287193be2_qq1126626497password 43ed43bcbddc48772694fc2b18ec1112170f4d6cc52fbf1e01401c2ea1748475 7. 上报属性格式与主题订阅格式 产品设备、mqtt登录参数都到位了,接下来需要了解设备向服务器上报数据时,如何上报,格式是怎么样的。
(1)第一个问题是:华为云iot物联网服务器的ip和端口号是多少?
在总览选项页面,点击多协议接入选项,就能看到了。
如果选择mqtt协议接入:
域名是: 
域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com如果你的设备不能解析域名,也可以直接填ip地址 121.36.42.100端口号: 1883 如果你的设备不能解析域名,也可以直接填ip地址
(2)第二个问题是:发布数据的主题和订阅数据的主题怎么填?
在产品页面,选择自己的产品,进去之后就能看到主题的格式介绍页面了。
为了方便后续复制粘贴,这里总结下格式:
火警预警装置:
格式: $oc/devices/{device_id}/sys/messages/down//订阅主题: 平台下发消息给设备$oc/devices/61bacdc02b2aa20288c5a094_qq1126626497/sys/messages/down格式: $oc/devices/{device_id}/sys/properties/report//设备上报数据$oc/devices/61bacdc02b2aa20288c5a094_qq1126626497/sys/properties/report 灭火装置:
格式: $oc/devices/{device_id}/sys/messages/down//订阅主题: 平台下发消息给设备$oc/devices/61bad0564d9b020287193be2_qq1126626497/sys/messages/down格式: $oc/devices/{device_id}/sys/properties/report//设备上报数据$oc/devices/61bad0564d9b020287193be2_qq1126626497/sys/properties/report (3)第三个问题是:上报属性时,数据格式是什么?
官方文档介绍: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html
总结下格式: 上报的数据就是json格式,一次性可以上传多个属性数据,json数组里按照顺序增加即可。
重要的字段含义解释:这两个字段后面的数据需要自己根据自己的设备产品去填充的。
 service_id 示设备服务的id。properties 是设备服务的属性列表,具体字段在设备关联的产品模型中定义。 是设备服务的属性列表,具体字段在设备关联的产品模型中定义。
火警预警装置上传的数据:
{services: [{service_id: mq2,properties:{mq2:100}}]}  
灭火装置上传的数据:
 {services: [{service_id: motor,properties:{motor:1}}]} 8. 使用mqtt客户端模拟设备测试 (1)登录火警预警装置
(2)灭火装置登录
可以看到,设备已经成功登录服务器,完成了数据上报。这也证明服务器端设备创建已经全部ok,正常。
9. 配置设备联动 (1)创建规则
(2)填写规则信息
(3)添加触发条件,选择需要处理数据的设备,设置条件:当烟雾浓度大于等于100就触发
(4)添加执行动作,当烟雾浓度超过100就下发指令给灭火装置
(3)最后点击创建规则,生效规则
(4)测试效果
使用两个mqtt客户端分别模拟火警预警装置和灭火装置,当烟雾浓度超过100时,查看灭火装置是否收到云端下发的指令。
10. 数据转发 如果数据需要转发到其他地方,可以自己创建规则配置。
11. 硬件设备测试 设备端采用gsm模块sim800c完成上网功能,主控mcu采用stm32f103zet6。
任意只要能上网的设备都可以使用当前代码连接服务器,因为当前模拟的是户外设备,只能采用gsm模块上网。
如果是智能家居,屋里小区的设备,有wifi的可以采用esp8266这些无线网卡。
代码校对较多,这里只贴出核心代码,需要完整工程的在评论区留言。
1. sim800c.c 这是sim800c的配置代码
#include sim800c.h/*函数功能:向sim800c模块发送指令函数参数: char *cmd 发送的命令 char *check_data 检测返回的数据返回值: 0表示成功 1表示失败*/u8 sim800c_sendcmd(char *cmd,char *check_data){ u16 i,j; for(i=0;i)==0) { //发送数据 usart_x_senddata(usart2,data,len); //发送结束符号 delayms(50); send_buf[0] = 0x1a; send_buf[1] = '\0'; if(sim800c_sendcmd(send_buf,send ok))return 2; else return 0; } return 1;}  
2. adc.c 这是烟雾传感器的adc通道配置代码。
////////////////////////////////////////////////////////////////////////////////// // 功能描述 : 智能环境检测系统// 时间 : 20190605// 版本 : v3.3// 版权所有,盗版必究。//copyright(c) ds小龙哥 2016 - 2020///////////////////////////////////////////////////////////////////////////////////#include adc.h/*函数功能: adc1的初始化规则通道方式*/void adc1_init(void){ /*1. 配置adc采集输入的io口*/ rcc->apb2enr |= 1 crl |= 0x00000000;//配置pb0为模拟输入模式 /*2.配置adc1时钟*/ rcc->apb2enr|=1
当国产手机品牌都在谈加价时,三星C7 Pro却玩起了走心
小米,会不会成为中国第一个倒下的超级独角兽?
oled驱动芯片公司排名
索尼ZEUS即将惊艳登场 时代的不屈灵魂
探析Gartner2019年度十大技术发展趋势
基于STM32+华为云IoT设计的森林火灾预警系统
人工智能在医疗健康领域的应用正在重塑着整个行业的形貌
Apple推出电脑芯片M1 Ultra 华为FDD Gigaband系列产品获奖
近期要闻: Synaptics与Dialog就并购谈判 GF全球裁员5%
氧化镍电极的工作原理
常用电压比较器的原理与应用
中搜网络总裁陈沛:从“人机大战”看人工智能的崛起
苹果与谷歌为何着急加入6G产业联盟?
嵌入式在物联网扮演着什么角色
Windows Phone 8.1应用商店没了,微软移动平台失败告终
电动汽车的成功关键是电池:电动汽车目前价值的25-40%都是电芯
产品推荐 | 适用于PD3.1标准的PRISEMI芯导科技MOSFET产品
这家AI芯片独角兽吊打英伟达,吹捧还是硬实力?
镍腐蚀改善PCB检测实验说明
用勤哲EXCEL服务器无代码实现统计分析管理系统