• 目录

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

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

    准备需要的信息

    一、网络调试助手NetAssist

    CONNECT 报文

    DISCONNECT 报文

    PING报文

    SUBSCRIBE 报文

    UNSUBSCRIBE 报文

    PUBLISH 报文

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

    总结


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

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

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

      阿里云物联网平台的域名和端口如下:
      远程主机地址: *.iot-as-mqtt.cn-shanghai.aliyuncs.com (这里的*需要用ProductKey进行替换)
      远程主机端口号:1883

    • 首先简单了解以下MQTT报文格式(详细可参考MQTT协议)

      • MQTT报文格式 -- 固定报文(byte1:控制报文的类型+控制报文类型的标志位;byte2:剩余长度) + 可变报头 + 有效载荷(负载)
    • 一、网络调试助手NetAssist

      • CONNECT 报文

        • 固定报头:

        • 可变报头:

          保活时间:64 => 0110 0100(32+16+4=100秒)

        • 负载:

          • 1. 客户端标识符

            • 客户端标识符 :*|securemode=3,signmethod=hmacsha1|,其中*号需要替换成自己三元组中的 DeviceName ,按上图三元组中的信息进行替换
              例:D001|securemode=3,signmethod=hmacsha1|
            • 长度共计 38 字节,实验的时候我们需要发 16 进制的数据。并且简化书写,去掉 0x,然后还要在最前面加上两个字节,表示客户端标识符的长度,最终结果如下:
            • 00 26 44 30 30 31 7C 73 65 63 75 72 656D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 317C
          • 2. 用户名

            • 用户名 :*&#(注意不要把&符号丢了)其中*号需要替换成自己三元组中的 DeviceName ,其中#号需要替换成自己三元组中的 ProductKey
            • 那么按上图三元组中的信息替换 ,用户名就是 :D001&a1efzDjvU4Y
            • 长度共计 16 字节,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下
            • 00 10 44 30 30 31 26 61 31 65 66 7A 44 6A 76 55 3459
          • 3. 密码

            • 密 码 需 要 进 行 一 次 hmacsha1 加 密, 用 三 元 组 中 的 DeviceSecret 做 为 秘 钥 对
            • clientId*deviceName*productKey#加密其中*号需要替换成自己三元组中的 DeviceName ,其中#号需要替换成自己三元组中的 ProductKey
              例:clientIdD001deviceNameD001productKeya1efzDjvU4Y
            • 然后 DeviceSecret 是 585fe87ac7bd7f518121b1ae4295bdd1 ,网上找个在线加密网站http://encode.chahuo.com/,进行一次 hmacsha1加密,如下图所示

            • 先选择hmacsha1,输入加密字符和密钥,得到加密结果:
            • eda544bcd934d43f4c7fd7096f26775ff6bcdc7e
            • 得到长度为40字节的加密后结果,转为16进制,并且最前面加入表示长度的两个字节,最终结果如下
            • 65 64 61 35 34 34 62 63 64 39 33 34 64 34 33 66 34 63 37 66 64 37 30 39 36 66 32 36 37 37 35 66 66 36 62 63 64 63 37 65
            • 负载中的 3 个信息都构建好了,那么把 3 个信息按顺序,先是客户端 id,然后是用户名,最后是密码,组合在一起 16 进制如下(2+38+2+16+2+40=100字节)
            • 00 26 44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 10 44 30 30 31 26 61 31 65 66 7A 44 6A 76 55 34 59 00 28 65 64 61 35 34 34 62 63 64 39 33 34 64 34 33 66 34 63 37 66 64 37 30 3936 66 32 36 37 37 35 66 66 36 62 63 64 63 37 65
        • 计算固定报头中的剩余长度:

          • 剩余长度 = 可变报头长度 + 负载长度
          • 可变报头是 10 个字节, 负载是 100 个字节,剩余长度= 10 + 100 = 110,110/128 = 0,不需要进位,剩余长度 1 个字节即可,如此固定报头结果如下:10 6E
        • CONNECT 报文的最终结果:

          • 10 6E 00 04 4D 51 54 5404 C2 00 64 00 26 44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 7468 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 10 44 30 30 31 26 61 31 65 66 7A 44 6A 76 55 34 59 00 28 65 64 61 35 34 34 62 63 64 39 33 34 64 34 33 66 34 63 37 66 64 37 30 3936 66 32 36 37 37 35 66 66 36 62 63 64 63 37 65
        • 发送最终CONNECT 报文,返回CONNACK报文(20 02 00 00)只包含固定报头和可变报头,没有负载
        • 调试过程:

      • DISCONNECT 报文(断开连接)E0 00 无返回值

      • PING报文(用于保活连接)C0 00(回复D0 00)

      • 订阅和发布的Topic在这查找,这里报文就不展开讲了,可以参考MQTT协议

      • SUBSCRIBE 报文(订阅请求)

      • UNSUBSCRIBE 报文(取消订阅)

        UNSUBSCRIBE 报文的负载:
        想取消订阅的 Topic字符串长度(2字节) +想取消订阅的 Topic 字符串
        以前面订阅的Topic为例,想取消订阅的 Topic 字符串

      • PUBLISH 报文(发布消息)

        • 最终 PUBLISH 报文:

          • 30 6E 00 2F 2F 73 79 73 2F 61 31 65 66 7A 44 6A 76 5534 59 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 7274 79 2F 70 6F 73 74 7B 22 70 61 72 61 6D 73 22 3A 7B 22 43 75 72 72 65 6E 74 4875 6D 69 64 69 74 79 22 3A 35 37 2E 33 2C 22 43 75 72 72 65 6E 74 54 65 6D 7065 72 61 74 75 72 65 22 3A 32 31 2E 35 7D 7D
    • 二、串口调试助手XCOM(这里需要结合USB-TTL和ESP8266-01S)

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

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

MQTT协议连接阿里云相关推荐

  1. 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派mqtt协议连接阿里云物联网平台(三) 前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊. ...

  2. STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云

    STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...

  3. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  4. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  5. 物联网阿里云——Android Mqtt协议连接阿里云

    实现步骤: 一.云平台端 1.首先在阿里云物联网平台创建产品和设备,获取设备三元组 {       "ProductKey": "a1QRE182gGH",   ...

  6. STM32+ESP8266+MQTT协议连接阿里云物联网平台

    一.环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可.比如:GSM模块.有线网卡等. 开发软件:keil5 硬件连接功能: ...

  7. 中移M5311模块MQTT协议连接阿里云物联网平台(干货)

    一.准备三元组 在阿里云物联网平台新建产品和设备后,平台给每一个设备自动赋予三元组. 二.准备MQTT协议参数 新建产品时,阿里云物联网平台会分配一个含productkey的子域名,端口号固定是188 ...

  8. 利用MQTT协议与阿里云数据交互的python程序

    利用MQTT协议与阿里云数据交互的python程序 设计目的 功能要求和关键问题 环境配置问题 本地程序如何连接云上设备 云上的数据交互问题 界面设计问题 阿里云相关操作 本地程序 设计目的 设计开发 ...

  9. 微信小程序使用MQTT.js连接阿里云IoT物联网平台

    官方已经开源了一个SDK版本,也是基于mqtt.js,进行了各种封装: https://github.com/aliyun/alibabacloud-iot-device-sdk · 阅读以下内容需要 ...

最新文章

  1. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
  2. 华为OJ平台——放苹果(典型整数划分问题)
  3. IOS开发基础之使用XCode12快速生成代码段
  4. [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
  5. 生信分析过程中这些常见文件的格式以及查看方式你都知道吗?
  6. 实时录制视频,实时去除人_录制实时演示,第2部分:软件设置
  7. 这个网站不错,根据引用jar包路径查找原JAR包
  8. Java集合 -- HashSet 和 HashMap
  9. 利用MMCM IP核产生用户时钟
  10. 吴恩达机器学习练习4:神经网络学习(损失函数和正则化)
  11. 图像算法常用图片Lena
  12. Linux网卡状态查看
  13. CardView-卡片布局
  14. hdu 6184 Counting Stars
  15. linux 进程堆管理,对Linux堆内存释放的总结
  16. 科隆国际游戏展:2000系列显卡来袭,iGame板卡信仰搭配
  17. Python:同花顺全数据接口
  18. 漫画:为什么不能打断程序员
  19. Android Compose 新闻App(二)ViewModel、Hlit、数据流
  20. 数据库关键字(保留字)

热门文章

  1. 通缩的魔咒 油价惊见二字头--今周刊「老谢开讲」
  2. 流量分发php,为什么说支付宝小程序更适合商家?除了离钱更近,还有四大优势!...
  3. 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词 Python助力中华古典文集数据库
  4. f.readlines()和f.read().splitlines()的区别
  5. 抓包分析以太网帧和IP数据包,头部那么多东东用来干啥的,扫盲篇
  6. Mysql原理篇之表空间---05
  7. 大学计算机基础挂了能毕业吗,大学挂科率最高的十个科目,你中枪了吗?
  8. 战士、魔法师与怪兽的战斗游戏
  9. 《c语言程序设计》实验报告,《C语言程序设计》实验报告模板-2013级软件工程...
  10. ipad pro无线无法连接服务器,ipadappstore无法连接 ipad能上网但appstore无法连接 - 云骑士一键重装系统...