概述
阿里云物联网平台
1 产品架构
设备通过 MQTT 协议接入到阿里云物联网平台,然后可以通过规则引擎将数据发送至时序数据库、云存储等。
2 计费标准
在初次开通物联网平台的前两个月,有100万条消息的免费额度。
阿里云物联网平台 MQTT
以下是阿里云物联网的文档链接:
https://help.aliyun.com/product/30520.html?spm=a2c4g.11174283.6.540.61ef1668NbRCbL
阿里云创建产品和设备
1 进入阿里云物联网,首页如下所示:
链接:https://iot.console.aliyun.com/lk/summary
2 创建产品:
填写产品的相关信息
3 添加设备:
进入设备页面,先选中对应的产品,然后添加设备
添加设备:
然后会生成设备证书(包括产品码、设备名、设备密钥),如下所示:
当设备接入到阿里云物联网平台时,阿里云会根据这3个参数,鉴别设备的身份。
再创建MQTT-FX客户端软件对应的设备,创建完成的两个云端设备如下所示:
4 接入物联网平台
如果要接入阿里云,需要域名、ClientID、用户名、密码等参数,参考文档 “ MQTT-TCP 连接通信 ”
https://help.aliyun.com/document_detail/73742.html?spm=a2c4g.11186623.6.588.5de26eebCAhXgL
下面是文档说明:
地区和可用区如下所示:
示例:如 ProductKey 为 a16TOCG44Rm ,地区为华东2 上海,则域名为:
a16TOCG44Rm.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
CONNECT 连接报文
mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
mqttUsername: deviceName+"&"+productKey
mqttPassword: sign_hmac(deviceSecret,content)
由于阿里云不支持Will,因此CONNECT报文的有效载荷,只包含客户端标识符、用户名和密码,如下图所示:
这3个参数的设置方法,参见 CONNECT 报文参数说明:
其中,mqttClientId 和 mqttUsername 可以直接设置,mqttPassword 比较麻烦,sign_hmac(deviceSecret, content) ,可以看到,mqttPassword 是根据设备密钥和 content 进行哈希加密,而 content 又由多个参数字符合成。这个如果自己实现会比较麻烦,可以使用自动生成的配置工具:
接下来,使用这个工具来生成ESP8266设备的 ClientId、用户名+密码,复制设备参数并生成;
生成的配置结果如下:
分别生成两个设备(QMTT客户端和ESP8266)的参数信息。
5 消息通信格式
在设备管理->产品->Topic类列表中,有很多预定义的 Topic 类,也可以新建 Topic 类
创建一个 SW_LED 的 Topic 类,如下所示:
在设备的 Topic 类中,可以看到成功创建的 SW_LED 主题;
注意,此时8266设备只能够操作这几个主题,其他任何的主题都没有操作权限。那么,8266如何跟MQTT客户端进行通信?
6 规则引擎
阿里云的规则引擎有多种,下面是将要使用到的 “ 云产品流转 ” 简介
创建规则引擎:
规则引擎要使用 SQL 语句,先看一下 SQL 通配符:
如下是设置的 SQL 语句:
使用 *通配符选择查询所有字段,设置产品、设备和主题,然后设置转发数据(从MQTT客户端转发给8266):
创建成功,启动规则引擎:
阿里云平台的设置完成。
接入阿里云
1 配置MQTT-FX
2 修改 MQTT 例程,要修改的地方如下所示:
设置好域名、设备ID、用户名、密码和持有人标识,然后修改主题名(只订阅】不发布):
修改接收到的主题消息,如下所示:
下载程序并执行,一直出现一个问题:
可以看到,程序成功的解析了 SNTP 服务器域名,获取到了实时时间,但是,一直没法解析到阿里云域名对应的IP(多次尝试仍然失败),实在找不到原因,暂且放过。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解决问题
在这个问题上纠结了一天,终于找到了问题所在,直接上图:
MQTT服务端域名要设为小写字母
重新修改程序中的网络参数,如下所示:
1 修改域名
2 修改订阅主题名:
这个主题名要和设备的主题完全一致,如下所示:
3 修改 SNTP 服务器域名
这个不是必要的,但MQTT例程中提供的是国外的域名,有时会无法获取到网络时间,因此换成国内的SNTP服务器:
4 修改接收主题参数
修改完毕,下载执行程序,结果如下:
这说明,ESP8266接入物联网成功。
5 连接MQTT-FX客户端,配置如下所示:
注意,8266和MQTT-FX的MQTT域名、设备ID、用户名+密码和下面的一致:
然后向如下的主题发布消息,根据我们设置的规则引擎,这个消息会被转发给ESP8266;
我们向这个主题发送以下JSON字符串,8266收到规则引擎转发的消息后,应该会点亮LED:
结果如下所示:
ESP8266成功接收到MQTT客户端发送的主题消息
物联网开发板LED成功点亮:
同时,在阿里云设备页面,可以看到两个设备都在线:
最后
以上就是正直西装为你收集整理的物联网专题36:阿里云物联网 ESP8266的全部内容,希望文章能够帮你解决物联网专题36:阿里云物联网 ESP8266所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复