您现在的位置是:首页 > 数码 > 

MQTT协议连接阿里云

2025-07-22 23:52:48
MQTT协议连接阿里云 目录 操作中使用到的相关链接资料 生活物联平台(飞燕平台)创建项目及产品,MQTT协议调试登录 准备需要的信息 一、网络调试助手etAssist COECT 报文 DISCOECT 报文 PIG报文 SUBSCRIBE 报文 USUBSCRIBE 报文 PUBLISH 报文 二、串口调试助手XCOM(

MQTT协议连接阿里云

  • 目录

    操作中使用到的相关链接资料

    生活物联平台(飞燕平台)创建项目及产品,MQTT协议调试登录

    准备需要的信息

    一、网络调试助手etAssist

    COECT 报文

    DISCOECT 报文

    PIG报文

    SUBSCRIBE 报文

    USUBSCRIBE 报文

    PUBLISH 报文

    二、串口调试助手XCOM(这里需要结合USB-TTL和ESP8266-01S)

    总结


     

    操作中使用到的相关链接资料:

    • 阿里云(飞燕平台):生活物联网平台_智能家居_智能家电_智能设备_语音控制-阿里云 (aliyun)
    • 创建项目产品参考步骤:开发自有品牌项目的产品 (aliyun)
    • MQTT协议:网上搜索
  • 通过物联网IoT的生活物联平台(飞燕平台)创建项目及产品(可参考开发自有品牌项目的产品_生活物联网平台-阿里云帮助中心的创建项目到添加设别完)设备等待激活(当我们登陆该设备后,就会自动激活了)

  • 设备调试,以下我通过两种调试软件进行设备登录及数据传输:
    • 准备需要的信息:


      阿里云物联网平台的域名和端口如下:
      远程主机地址: *.iot-as-mqtt-shanghai.aliyuncs (这里的*需要用ProductKey进行替换)
      远程主机端口号:188
    • 首先简单了解以下MQTT报文格式(详细可参考MQTT协议)
      • MQTT报文格式 -- 固定报文(byte1:控制报文的类型控制报文类型的标志位;byte2:剩余长度)  可变报头  有效载荷(负载)
    • 一、网络调试助手etAssist

      • COECT 报文
        • 固定报头:

        • 可变报头:


          保活时间:64 => 0110 0100(2164=100秒)
        • 负载:
          • 1. 客户端标识符
            • 客户端标识符 :*|securemode=,signmethod=hmacsha1|,其中*号需要替换成自己三元组中的 Deviceame ,按上图三元组中的信息进行替换
              例:D001|securemode=,signmethod=hmacsha1|
            • 长度共计 8 字节,实验的时候我们需要发 16 进制的数据。并且简化书写,去掉 0x,然后还要在最前面加上两个字节,表示客户端标识符的长度,最终结果如下:
            • 00 26 44 0 0 1 7C 7 65 6 75 72 656D 6F 64 65 D 2C 7 69 67 6E 6D 65 74 68 6F 64 D 68 6D 61 6 7 68 61 17C
          • 2. 用户名
            • 用户名 :*&#(注意不要把&符号丢了)其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey
            • 那么按上图三元组中的信息替换 ,用户名就是 :D001&a1efzDjvU4Y
            • 长度共计 16 字节,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下
            • 00 10 44 0 0 1 26 61 1 65 66 7A 44 6A 76 55 459
          • . 密码
            • 密 码 需 要 进 行 一 次 hmacsha1 加 密, 用 三 元 组 中 的 DeviceSecret 做 为 秘 钥 对
            • clientId*deviceame*productKey#加密其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey
              例:clientIdD001deviceameD001productKeya1efzDjvU4Y
            • 然后 DeviceSecret 是 585fe87ac7bd7f518121b1ae4295bdd1 ,网上个在线加密网站/,进行一次 hmacsha1加密,如下图所示

            • 先选择hmacsha1,输入加密字符和密钥,得到加密结果:
            • eda544bcd94d4f4c7fd7096f26775ff6bcdc7e
            • 得到长度为40字节的加密后结果,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下
            • 65 64 61 5 4 4 62 6 64 9 4 64 4 66 4 6 7 66 64 7 0 9 6 66 2 6 7 7 5 66 66 6 62 6 64 6 7 65
            • 负载中的 个信息都构建好了,那么把 个信息按顺序,先是客户端 id,然后是用户名,最后是密码,组合在一起 16 进制如下(28216240=100字节)
            • 00 26 44 0 0 1 7C 7 65 6 75 72 65 6D 6F 64 65 D 2C 7 69 67 6E 6D 65 74 68 6F 64 D 68 6D 61 6 7 68 61 1 7C 00 10 44 0 0 1 26 61 1 65 66 7A 44 6A 76 55 4 59 00 28 65 64 61 5 4 4 62 6 64 9 4 64 4 66 4 6 7 66 64 7 0 96 66 2 6 7 7 5 66 66 6 62 6 64 6 7 65
        • 计算固定报头中的剩余长度:
          • 剩余长度 = 可变报头长度  负载长度
          • 可变报头是 10 个字节, 负载是 100 个字节,剩余长度= 10  100 = 110,110/128 = 0,不需要进位,剩余长度 1 个字节即可,如此固定报头结果如下:10 6E
        • COECT 报文的最终结果:
          • 10 6E 00 04 4D 51 54 5404 C2 00 64 00 26 44 0 0 1 7C 7 65 6 75 72 65 6D 6F 64 65 D 2C 7 69 67 6E 6D 65 7468 6F 64 D 68 6D 61 6 7 68 61 1 7C 00 10 44 0 0 1 26 61 1 65 66 7A 44 6A 76 55 4 59 00 28 65 64 61 5 4 4 62 6 64 9 4 64 4 66 4 6 7 66 64 7 0 96 66 2 6 7 7 5 66 66 6 62 6 64 6 7 65
        • 发送最终COECT 报文,返回COACK报文(20 02 00 00)只包含固定报头和可变报头,没有负载
        • 调试过程:

      • DISCOECT 报文(断开连接)E0 00 无返回值
      • PIG报文(用于保活连接)C0 00(回复D0 00)
      • 订阅和发布的Topic在这查,这里报文就不展开讲了,可以参考MQTT协议

      • SUBSCRIBE 报文(订阅请求)

      • USUBSCRIBE 报文(取消订阅)

        USUBSCRIBE 报文的负载:
        想取消订阅的 Topic字符串长度(2字节) 想取消订阅的 Topic 字符串
        以前面订阅的Topic为例,想取消订阅的 Topic 字符串
      • PUBLISH 报文(发布消息)

        • 最终 PUBLISH 报文:
          • 0 6E 00 2F 2F 7 79 7 2F 61 1 65 66 7A 44 6A 76 554 59 2F 44 0 0 1 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 7274 79 2F 70 6F 7 74 7B 22 70 61 72 61 6D 7 22 A 7B 22 4 75 72 72 65 6E 74 4875 6D 69 64 69 74 79 22 A 5 7 2E 2C 22 4 75 72 72 65 6E 74 54 65 6D 7065 72 61 74 75 72 65 22 A 2 1 2E 5 7D 7D
    • 二、串口调试助手XCOM(这里需要结合USB-TTL和ESP8266-01S)

      • ESP8266-01S的AT指令这里不细说了,简单步骤就是设置AP(连接热点)模式、连接WIFI热点、连接服务器、进入透传、发送数据等
      • AT--测试是否OK
      • ATCWMODE=1 -- 设置AP模式
      • ATCWJAP=wifiname,wifipassword -- 连接WIFI热点
      • ATCIPSTART=TCP,121.6.42.100,188 -- 连接华为云服务器
      • ATCIPMODE=1 -- 准备透传
      • ATCIPSED -- 开始透传
      • 发送数据 -- 上面我们计算出的COECT 报文和 PUBLISH 报文
  • 总结:

    • 上面所有调试我均测试成功,服务器能够正常通信,可以参考MQTT协议编写更多的报文
    • 调试方法如上,真实设备的报文可以通过代码写好,就不用再计算了,计算有风险,本人在计算中错过错,导致我又花了两个小时看文档,最后坚信自己的方法重新计算才发现问题。
    • 重复一次手动计算有风险,又浪费时间,可以尝试一次不建议每次报文都手动计算。可以通过代码实现。
    • 我的设备是通过ESP8266-01S模块通信STM2F10开发板(开发板不限,有串口就行),主控开发板进行报文计算发送和接收服务器的数据进行解析。
  •  

 

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/808378.html

相关标签:无
上传时间: 2024-01-20 04:23:30
留言与评论(共有 17 条评论)
本站网友 宿迁房屋出租
5分钟前 发表
wifipassword -- 连接WIFI热点ATCIPSTART=TCP
本站网友 机器人概念股龙头
24分钟前 发表
重复一次手动计算有风险,又浪费时间,可以尝试一次不建议每次报文都手动计算
本站网友 打标机品牌网
30分钟前 发表
并且简化书写,去掉 0x,然后还要在最前面加上两个字节,表示客户端标识符的长度,最终结果如下:00 26 44 0 0 1 7C 7 65 6 75 72 656D 6F 64 65 D 2C 7 69 67 6E 6D 65 74 68 6F 64 D 68 6D 61 6 7 68 61 17C2. 用户名 用户名 :*&#(注意不要把&符号丢了)其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey那么按上图三元组中的信息替换 ,用户名就是 :D001&a1efzDjvU4Y长度共计 16 字节,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下00 10 44 0 0 1 26 61 1 65 66 7A 44 6A 76 55 459. 密码 密 码 需 要 进 行 一 次 hmacsha1 加 密, 用 三 元 组 中 的 DeviceSecret 做 为 秘 钥 对clientId*deviceame*productKey#加密其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey 例:clientIdD001deviceameD001productKeya1efzDjvU4Y然后 DeviceSecret 是 585fe87ac7bd7f518121b1ae4295bdd1 ,网上个在线加密网站/,进行一次 hmacsha1加密,如下图所示 先选择hmacsha1,输入加密字符和密钥,得到加密结果:eda544bcd94d4f4c7fd7096f26775ff6bcdc7e得到长度为40字节的加密后结果
本站网友 高伯
28分钟前 发表
   
本站网友 港珠澳大桥总工程师
9分钟前 发表
并且简化书写,去掉 0x,然后还要在最前面加上两个字节,表示客户端标识符的长度,最终结果如下:00 26 44 0 0 1 7C 7 65 6 75 72 656D 6F 64 65 D 2C 7 69 67 6E 6D 65 74 68 6F 64 D 68 6D 61 6 7 68 61 17C2. 用户名 用户名 :*&#(注意不要把&符号丢了)其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey那么按上图三元组中的信息替换 ,用户名就是 :D001&a1efzDjvU4Y长度共计 16 字节,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下00 10 44 0 0 1 26 61 1 65 66 7A 44 6A 76 55 459. 密码 密 码 需 要 进 行 一 次 hmacsha1 加 密, 用 三 元 组 中 的 DeviceSecret 做 为 秘 钥 对clientId*deviceame*productKey#加密其中*号需要替换成自己三元组中的 Deviceame ,其中#号需要替换成自己三元组中的 ProductKey 例:clientIdD001deviceameD001productKeya1efzDjvU4Y然后 DeviceSecret 是 585fe87ac7bd7f518121b1ae4295bdd1 ,网上个在线加密网站/,进行一次 hmacsha1加密,如下图所示 先选择hmacsha1,输入加密字符和密钥,得到加密结果:eda544bcd94d4f4c7fd7096f26775ff6bcdc7e得到长度为40字节的加密后结果
本站网友 取环手术
26分钟前 发表
signmethod=hmacsha1|,其中*号需要替换成自己三元组中的 Deviceame ,按上图三元组中的信息进行替换 例:D001|securemode=
本站网友 利辛二手房
9分钟前 发表
121.6.42.100
本站网友 其他私服
2分钟前 发表
进入透传
本站网友 护士心得体会
18分钟前 发表
   
本站网友 四代重歼
16分钟前 发表
剩余长度)  可变报头  有效载荷(负载) 一
本站网友 大世界基尼斯
15分钟前 发表
进入透传
本站网友 3天快速瘦腿
6分钟前 发表
188 -- 连接华为云服务器ATCIPMODE=1 -- 准备透传ATCIPSED -- 开始透传发送数据 -- 上面我们计算出的COECT 报文和 PUBLISH 报文 总结: 上面所有调试我均测试成功,服务器能够正常通信,可以参考MQTT协议编写更多的报文调试方法如上,真实设备的报文可以通过代码写好,就不用再计算了,计算有风险,本人在计算中错过错,导致我又花了两个小时看文档,最后坚信自己的方法重新计算才发现问题
本站网友 蔡甸二手房出售
14分钟前 发表
188 -- 连接华为云服务器ATCIPMODE=1 -- 准备透传ATCIPSED -- 开始透传发送数据 -- 上面我们计算出的COECT 报文和 PUBLISH 报文 总结: 上面所有调试我均测试成功,服务器能够正常通信,可以参考MQTT协议编写更多的报文调试方法如上,真实设备的报文可以通过代码写好,就不用再计算了,计算有风险,本人在计算中错过错,导致我又花了两个小时看文档,最后坚信自己的方法重新计算才发现问题
本站网友 藕粉的功效与作用
7分钟前 发表
进入透传
本站网友 百合花的功效与作用
22分钟前 发表
连接服务器
本站网友 军团菌病
26分钟前 发表
121.6.42.100