如上图,我们可以看到 MCU和云平台以及PC/app之间的一个通信关系
基础版:
1.mcu可以把传感器的数据实时上传至云端
2.云端实时的把收到的数据进行转发至应用端
进阶版:
3.应用端PC/APP可以向云发送消息用来设置温湿度上限值,下限值等
OneNET云平台注册:
因为网上教程很多,这里我不在赘述其注册教程,必须使用MQttx或MQTT.fx软件调通
接入服务地址:OneNET - 中国移动物联网开放平台
token计算软件下载:OneNET - 中国移动物联网开放平台
- 产品级鉴权时,res字段为products/{产品id},key为产品级key
- 设备级鉴权时,res字段为products/{产品id}/devices/{设备名},key为设备级key
- 网上搜个时间戳把时间写大一点粘贴到token软件key栏里面
这个设备密钥是填入到token软件KEY栏目里的,其他注意的也没什么了,
这一步你应该已经用MQTTX或MQTT.fx软件接通了OneNet,那么恭喜你!!
开发者平台
登录进入开发者平台你会看到左边这些栏目,我接下来将为您
一 一讲解
1.产品开发,在此栏目中我们可以看到设备属性,订阅主题,发布主题,设备调试等
2.设备接入管理我们可以看到MUC实时上传的属性数据,以及事件数据
3.数据流转用来将云平台的数据转发到手机APP或PC应用软件
产品开发:
这是进入产品开发页面,继续点击产品开发-----↓
↓
这三个功能我们后续会经常的使用,这三个功能很重要,我将一 一解释该三个功能个
1.功能定义:
功能定义模型中我们最长用的便是标识符,有了标识符MCU才能知道把数据传到哪里去,数据值定义是我们需要上传的数据类型,需要严格按照此类型进行上传.
2.设备开发:
设备开发模型中我们将用到物模型Topic(话题),这个是订阅,发布消息的,我要告诉您的是,这里所有的发布和订阅都是基于云平台和设备(MCU)之间的通信的,里面没有和APP及PC应用端的通信,我们在把文章翻到最前面看第一张图,这里的发布订阅就是完成图左边的内容的,这一点您一定要理解清楚.
3.设备调试
设备调试功能(设备--->云平台,数据上行)我们进入到调试界面,这里有一个设备模拟器,还有一个应用模拟器,其中设备模拟器是模拟MCU上传数据的,你可以在属性上报里面随便填写几个数据,然后点击属性上报,右边调试日志会显示成功-------↓
↓
您可能没有感觉这是什么意思,我们现在把页面进入设备管理界面--↓
↓
进入设备管理--详情界面--属性----↓
↓
您会发现刚才设置的数据在这里应用了,这就是设备模拟器的作用,模拟MCU上传数据,数据可以在这里进行实时的更新.
还有一个模拟器是应用模拟器,现在我给您讲解应用模拟器的作用---↓
↓
应用模拟器(模拟应用--->设备,下行数据)
我们还是随便设置几个值,然后点击属性设置,您会发现日志显示设备不在线或者是响应超时,这个是怎么回事呢?
设备不在线是因为您的MCU或者MQtt.fx软件没有和云平台进行连接,响应超时是因为平台下发属性设置的Topic,您的设备或者MQTT.fx软件没有进行回应造成的,您可以使用MCU或者MQTT.fx软件订阅Topic:$sys/{pid}/{device-name}/thing/property/set
pid:你自己产品ID
device-name:你自己设备的名字
当您成功订阅后,您再次进行属性设置试试,您会发现您的MQTT.fx软件上有了消息,类似于:{"id":"123","version":"1.0","params":{"maxhum_set":30}}
这个消息的意思是想将标识符为maxhum_set的属性设置成30
这个消息是模拟应用发送给设备的,设备或者MQTT.fx软件在收到此消息,要进行回复,否则会显示响应超时。发布Topic:$sys/{pid}/{device-name}/thing/property/set_reply
回复消息:{"id":"123","code":200,"msg":"success" }
这里的id要和订阅收到的id一样,否则会失败,定阅收到id:123,回复id也必须是123,您在用MQTT.fx模拟时该Topic回复的id您需要提前设置(设置原则:订阅收到的ID+1,就是回复ID)
如果您这一步成功了,那么应用模拟器的日志中会有相应的响应成功提示.
我们总结一下应用模拟器:
应用模拟器就是模拟一个应用软件来对mcu设备进行操作,该软件是调用云平台的API接口进行操作,不是订阅和发布Topic,或者您可以写一个python代码来对云平台api接口的调用。
API目前是免费的,您可以尝试写个代码来调用API接口实时获得esp8266上传的信息。
数据流转模块---->
当您不会使用API调用获取MCU实时上传的信息时,您应该看看这里,虽然这个模块是付费模块,但是他很方便,前期可以免费试用15天,在这15天您可以用来学习使用。
您在这个模块里面需要像我一样创建一个消费组,消费组名称随便自己起. 您还需要在上图产品订阅管理中创建订阅然后我们进入消费组中的详情----↓
↓
创建规则驱动--- ↓
↓
直接添加规则
编辑规则---↓
↓
规则中选择物模型数据(设备属性事件上报),设置完成进行开启.,您也可以选择设备上下线等规则,每个规则只能有一个消息源,您可以多创建几个
资源管理---↓
↓
在资源管理-->消息队列MQ中需要添加实例。
以上如果您都已经设置完成,那么下面我就教您如何进行测试,这里我是使用MQTTX软件实时获取设备上下线,实时的温湿度.
官方文档:OneNET - 中国移动物联网开放平台
1.首先我们需要重新连接一个服务器,配置端口号及username,password
host:183.230.40.96 选择MQTTS通信
2.port:8883
3.username:username是你在数据流转--->资源管理-->添加实例中的名字,你也可以在资源管理中-->消息队列MQ中查看名字
4.password:该token生成比较麻烦,在这个:OneNET - 中国移动物联网开放平台
在上面这个链接中我们需要把里面的python官方代码拷贝下来,放到python解释器中进行运行,
您要把代码中的参数name:改为您自己实例的名字,access_key需要改成数据流转-->服务端订阅-- -->详情中消费组详情中的消费key.如图下
当然您也可以使用官方的token尝试一下,本人没试.
运行代码,您会得到属于您的token,将得到的token复制进MQTTX软件中的password中,然后在MQTTX软件中选择使用SSL/TLS加密传输服务,否则获取不到设备消息,选择CA signed server certificate,mqtt版本3.1.1 ,clien_id不用设置,然后连接,如果你是按照上面方法一步一步做的,那么您肯定是能够连接上云端的
订阅:$sys/pb/consume/实例名称/TOPIC/SUB
其中实例名称在数据流转--->资源管理--->消息队列MQ中,如图下
TOPIC在---->如图下中,点击TOPIC数量即可看到topic
图上便是TOPIC名称
SUB------------------------------------------------------>在这里
详细参见:OneNET - 中国移动物联网开放平台 该连接是关于MQ订阅设置的.
您如果按照以上方式操作完成并成功的连接到183.230.40.96 而且订阅了$sys/pb/consume/实例名称/TOPIC/SUB,那么我们就可以进行相应的测试。:
我们需要用MQTT.fx或MQTTX打开之前连接的mqtts.heclouds.com:1883这个页面,并且需要用该Topic$sys/{pid}/{device-name}/thing/property/post发布消息,这里我们测试发布一个{"id":"1","params":{"humidity_value"{"value":50}}这个消息,如果没有意外,您刚才订阅的$sys/pb/consume/实例名称/TOPIC/SUB就会收到一大串的JSON格式消息,这里我们模拟的就是设备向客户端app/PC应用发送消息的过程.
您如果在规则驱动中设置了设备上下线的提醒,那么在您断开或者在线时(mqtts.heclouds.com:1883),您刚才连接的183.230.40.96($sys/pb/consume/实例名称/TOPIC/SUB)会收到相应的消息。
总结一下:mqtts.heclouds.com:1883这个host是我们的设备(mcu)需要连接的,然后实时的用该Topic$sys/{pid}/{device-name}/thing/property/post发布消息,上传至云端,应用端我们需要连接
183.230.40.96 并且订阅$sys/pb/consume/实例名称/TOPIC/SUB就能收到设备实时发过来的消息.
如果您没有收到消息,需要先确保两端的hostmqtts.heclouds.com:1883,183.230.40.96 连接这场,并且订阅和发布的Topic都正常,如果都正常的话,您需要查看开发平台中您驱动规则的设置是否设置相应的规则而且要确保规则已经打开。
下面我给您列举几个常用的topic,这些topic都是设备和物联网平台进行通信的:
设备属性上报请求:$sys/{pid}/{device-name}/thing/property/post 发布
设备属性上报响应:$sys/{pid}/{device-name}/thing/property/post/reply 订阅
上面这两个是常用的,reply订阅是设备订阅后,我们用post发布实时消息,物联网云会从订阅端给设备返回类似于{"id":"1","code":200,"msg":"success"}这样的JSon消息.
设备事件上报请求:$sys/{pid}/{device-name}/thing/event/post 发布
设备事件上报响应:$sys/{pid}/{device-name}/thing/event/post/reply 订阅
事件请求是关于设备报警用的,例如您设置温湿度报警,或者其他的紧急事件,可以使用上面两个Topic
我找到了一个很好用的手机物联网app,免费的无广告介绍给大家,但是比较遗憾得是,目前的app不能够通过183.230.40.96连接至host,但是PC端MQttx软件可以,我咨询了官方,官方给出的结果是目前app不能通过MQ数据流转的方式进行通信,如果需要app获得云端消息,需要app调用OneNet平台的API接口实现,目前API接口是免费的的,但是需要我们自己写软件去调用API
不过我给大家推荐的这款app可以模拟设备和物联网云之间的通信,当然了您也可以找一找PC端物联网应用尝试连接183.230.40.96获取消息,您也可以写一个python脚本来在PC上实时获取设备传来的消息,然后将其UI化,这样就比较美观了
物联网app:如果您可以连接谷歌应用商店,那么直接搜IoT MQTT Panel
因为该应用是APK格式的,百度云盘不允许分享,待我研究研究,给大家后续分享出去
感谢您能够看完本章内容,让我们一同进步。。。