【智能家居控制系统保姆级教程3】ESP8266向云平台发送数据

《基于ESP8266的智能家居控制系统》
功能:
1、采集环境数据:温度、湿度、烟雾检测、人体红外检测。
2、安防警报功能:烟雾阈值判断进行报警,人体红外检测判断外人入侵报警。
3、WiFi联网、MQTT协议
4、手机APP远程控制电器设备
5、手机APP远程监控家中环境数据
6、MQTT阿里云平台远程监控家中数据和电器设备
7、手机APP手动消除警报(应对家中宠物误触情况)

目录

1.云平台查看主题

2.ESP8266向云平台发送数据 

 3.人体红外传感器部分


我们给设备定义完属性之后,就可以通过esp8266或者手机app向设备上报数据了。MQTT是一种主题的形式,我们接收发送数据就是接收主题的数据,和向主题内发送数据。

1.云平台查看主题

首先我们先查找主题,打开阿里云物联网平台控制台界面,查看产品如下图所示。

选择Topic类列表,物模型通信,然后可以看到有属性上报的发布/订阅主题,我们这里只用到属性上报的发布主题(属性上报的订阅主题,就是订阅之后,当你发送数据后,会给你一个响应,你可以判断数据是否发送成功,这里不需要),我们把属性上报发布主题记下来,其中的${deviceName}要改成你自己设备的名称,比如我的是/sys/k17gxDWtuCB/${deviceName}/thing/event/property/post,我的设备名称是mcu-device那我的属性上报发布主题就是/sys/k17gxDWtuCB/mcu-device/thing/event/property/post这样。

这个主题是系统主题,向这个主题内发送消息,就会将数据上传到相应设备的物模型数据界面进行存储。

2.ESP8266向云平台发送数据 

接下来让esp8266端上传数据(esp8266总代码讲解),打开esp8266端总代码。

将下图标红的部分修改成自己的esp8266端属性上报主题。

用下面这个子函数,来向主题内发布消息。把你要上传的数据在下图标红处修改,其中你们要修改的是标红线的TEMPHUMISMOKE这些都是属性定义的标识符,在上节有强调过的。这里我上传了温度(这里的温度和湿度都采取了求平均值的算法,求和一次数据后让count+1,最后总和除以count就是平均值了),湿度和烟雾数据。

 3.人体红外传感器部分

人体红外传感器数据我是采用的中断方式进行上传的,为什么不一起上传呢,是因为这个数据上报我采用的是定时器中断方式,每5s上传一次数据。这样可以节省流量减少网络要求,对于那些对时间要求不严格的数据很适合。比如温度、湿度这些差个5s数据也不会有太大变化。但是对于人体红外传感器不行,这本项目中,人体红外传感器是用来做外人入侵报警的,当检测到外人入侵时,传感器会输出高电平,但是此时还没到5s上报的时间,当上报时可能传感器已经检测不到人了,此时输出低电平。就会出现这种情况,导致数据有遗漏。

所以经过思考,采取了外部中断的方式,esp8266除了D0口其他口都可以作为外部中断口,外部中断采用上升沿触发,当人体红外传感器检测到人,输出电平就由低转为高电平。触发了外部中断子函数,上报此时的人体红外传感器数据如下图所示。

但是为什么要附带着上传其他的数据呢。这是因为手机APP端他是要对每个数据都进行JSON解析,当你只上传人体红外数据的话,对数据进行JSON解析时,解析不到温度、湿度、烟雾的KEY值,它就会为空NULL。从而导致手机APP界面上数据会有三个为空,要等到5s上报函数上报数据后,才会显示。会存在这个问题,所以就中断也上传数据,这样就解决了。

这样就完成了数据的上报。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值