ESP8266连接阿里云–MQTT协议

  MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。MQTT属于应用层协议。最新版本为MQTT v5.0标准。本次连接阿里云物联网平台主要以MQTT标准协议3.1版本为主。

1.注册阿里云账号,登陆云平台


  1. 搜索物联网平台,登录物联网平台。

  2. 进入物联网控制台

  3. 选择公共实例

  4. 创建产品


  5. 添加产品


  添加设备成功:

  每一个设备都有自己的三元组,单击设备名字,查看设备三组:
  设备三元组很重要,在后面登录阿里云平台需要用到。

  1. 添加产品功能

2. 创建工程,连接阿里云

  2.1 编写ESP8266驱动程序,连接阿里云。

//TCP+STA模式,连接服务器
#define WIFI_NAME     "WBYQ"  //wifi名
#define WIFI_PASSWORD "asdfghjkl23"//WiFi密码
#define SERVER_IP      "a1knXG89uwh.iot-as-mqtt.cn-shanghai.aliyuncs.com"//服务器ip
#define SERVER_PORT   1883//端口号
while(1)
{stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);if(stat==0)break;Delay_Ms(500);printf("stat=%d\r\n",stat);
}
printf("服务器连接成功\r\n");

  服务器ip和端口号设置参考阿里云在线文档


  服务器IP格式:

${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883
${YourProductKey}为设备的ProductKey,上面讲到设备三元组已提到过。
${YourRegionId} 是区域代码,我这是属于华东2,区域代码:cn-shanghai
综上,服务器ip为 ”a1knXG89uwh.iot-as-mqtt.cn-shanghai.aliyuncs.com”

  2.2 MQTT连续服务端
MQTT连接阿里云需要三个参数:客户端id、用户名、密码。
这三个参数填写可参考阿里云文档工具。

#define ClientID "STM32|securemode=3,signmethod=hmacsha1|"
#define Username "STM32&a17b5WKUY0S"
#define Password "ebff9579ed3e610228da8c035afc9636954c43bd"//密文while(1){MQTT_Init();stat=MQTT_Connect(ClientID,Username,Password);if(stat==0)break;Delay_Ms(500);printf("正在连接....\r\n");}printf("阿里云连接成功\r\n");


  2.3 客户端ID
  根据阿里云文档介绍,clientId可自定义,一般我们直接使用三元组中的DeviceName代替;timestamp可不填。综上,mqttClientId: DS18B20|securemode=3,signmethod=hmacsha1|

  2.4 用户名
  用户名中deviceName用三元组中DeviceName代替;productKey用三元组中productKey代替。综上,mqttUsername: DS18B20&a1knXG89uwh

   2.5 密码
  密码生成我们可以直接使用阿里云提供的密码生成工具password工具

3.订阅消息和发布消息

  3.1 订阅消息
  将硬件采集到的数据上传到云端我们称之为发布消息;云端将数据下发给开发板称为订阅。
  打开产品,查看产品详细信息,可以看到有订阅和发布接口。

#define SET_TOPIC  "/sys/a1knXG89uwh/DS18B20/thing/service/property/set"//订阅
#define POST_TOPIC "/sys/a1knXG89uwh/DS18B20/thing/event/property/post"//发布
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("订阅失败\r\n");
else printf("订阅成功\r\n");

  3.2 发布消息
  上报格式可通过阿里云平台在线调试,按照云平台发布数据格式进行数据上传。

  按照此方式实现数据上报

if(cnt>=1000)
{cnt=0;temp=DS18B20_GetTemp()*0.0625;sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\"params\":{\"RoomTemp\":%.2f},\"version\":\"1.0.0\"}",temp);//温度MQTT_PublishData(POST_TOPIC,mqtt_message,0);
}

4.发送心跳包

  MQTT属于长连接,要想实现设备一直在线,就需要固定时给服务器发送心跳包,超过时间未发送则会被强制下线。

if(time>=5000)
{time=0;MQTT_SentHeart();//发送心跳包
}

5.主函数

while(1){stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);if(stat==0)break;Delay_Ms(500);printf("stat=%d\r\n",stat);}printf("服务器连接成功\r\n");while(1){MQTT_Init();stat=MQTT_Connect(ClientID,Username,Password);if(stat==0)break;Delay_Ms(500);printf("正在连接....\r\n");}printf("阿里云连接成功\r\n");stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);if(stat)printf("订阅失败\r\n");else printf("订阅成功\r\n");while(1){if(usart3_flag){usart3_cnt=0;usart3_flag=0;}Delay_Ms(1);time++;cnt++;if(time>=5000){time=0;MQTT_SentHeart();//发送心跳包}if(cnt>=1000){cnt=0;temp=DS18B20_GetTemp()*0.0625;sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\" params\":{\"RoomTemp\":%.2f},\"version\":\"1.0.0\"}",temp);//温度MQTT_PublishData(POST_TOPIC,mqtt_message,0);}}

6.阿里云Web端设计

  阿里云服务器提供有网页端和移动端界面开发。我们介绍下网页端界面设计基本使用方法。

  6.1 新建web应用

  6.2 关联产品

  6.3 新建应用

  6.4 设计界面

  6.5.配置数据来源

  6.6.保存发布

  6.7.下载程序,连接阿里云,预览web界面。

总结

  MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。 它的设计思想是轻巧、 开放、简单、 规范, 因此易于实现。 消耗资源少,在MQTT3.1标准协议中仅有14个报文。每个报文都分为固定报头、可变报头和有效载荷3部分。

  14个报文如下:

  关于MQTT每个报文详解查看MQTT3.1协议。
  示例工程:https://download.csdn.net/download/weixin_44453694/16632625

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

  1. ESP8266开发、ESP8266连接阿里云物联网、天猫精灵控制esp8266、esp8266一键配网、智能家居

    ESP8266开发.ESP8266连接阿里云物联网.天猫精灵控制esp8266.esp8266一键配网.智能家居 项目介绍 最近会 将arduino IDE开发ESP8266中一些值得记录得部分写下来 ...

  2. 【智能家居远程控制系统】ESP8266连接阿里云(一)

    系列文章目录 第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境 第四章 ESP8266连接阿里云 第五章 阿里云平台云 ...

  3. ESP8266连接阿里云(STM32)

    一.概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266 ...

  4. ESP32连接阿里云MQTT物联网平台

    接上期文章:<入住阿里云MQTT物联网平台> 我们已经获取到阿里云设备三元组信息,并且做好了消息转发"云产品流转"设置,今天就来使用ESP32连接阿里云,试试用MQTT ...

  5. 【智能家居远程控制系统】ESP8266连接阿里云(六)

    系列文章目录 第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境 第四章 ESP8266连接阿里云 第五章 阿里云平台云 ...

  6. 【智能家居远程控制系统】ESP8266连接阿里云(三)

    系列文章目录 第一章 阿里云物联网平台搭建 第二章 订阅与发布MQTT消息 第三章 为ESP8266-NodeMCU搭建ArduinoIDE环境 第四章 ESP8266连接阿里云 目录 系列文章目录 ...

  7. ESP8266连接阿里云(串口调试助手)

    参考链接:ESP8266 AT MQTT 透传指令接入阿里云物联网平台笔记 刷AT固件 参考链接:ESP8266连接阿里云 需要注意: 有时可能会出现下载失败的情况,注意一下FLASH SIZE那里, ...

  8. 移远BC35-G配置网络连接阿里云MQTT发送数据

    移远BC35/BC26/BC28配置网络连接阿里云MQTT发送数据(一)精.防踩坑 硬件准备 接线部分 软件准备 烧录固件 QFlash 4.17烧录 阿里云准备 测试准备(AT指令) 连接阿里云 第 ...

  9. 【STM32 x ESP8266】连接阿里云 MQTT 服务器(报文连接)

    具体如何在阿里云创建一个 MQTT 服务器我就不写出来了,可以去百度一下(主要是我忘了,不好演示). 有关 MQTT 报文的一些标识在我前面的一篇文章中讲过,感兴趣的可以去看看(有关代码部分讲解的内容 ...

最新文章

  1. 体外反搏做_体外反搏治疗的原理
  2. Uva 10305 给任务排序
  3. Java基础:成员变量的继承与覆盖
  4. 《基于张量网络的学习入门》学习笔记3
  5. 实战|记一次绕过宝塔防火墙的BC站渗透
  6. c语言中二重指针如何赋值,关于二重指针释放的有关问题
  7. 有些事情现在不做一辈子就都不会做了
  8. oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...
  9. DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路 | 原力计划
  10. open×××结合pam_mysql认证出错的解决方法
  11. 个人计算机硬件构成的叙述正确的是,2010年职称计算机考试模拟试题及答案(计算机基础)2...
  12. FFA 2021 专场解读 - 实时数据湖
  13. 2021微信公开课PRO:微信视频号首次公布运营规则,“点赞”表情成视频号年度表情
  14. 软件项目版本管理规范总结
  15. div 设置a4大小_CSS设置A4纸张大小_others_酷徒编程知识库
  16. 删除文件时提示正在被使用无法删除问题/删除dll文件
  17. 计算机软件考试成绩查询时间,2020年计算机软考什么时候出成绩,怎么查成绩?|...
  18. 上海交大ACM班俞勇团队出新书了!
  19. 问题日志-简易css时间轴特效
  20. c语言中ch1和ch2是什么意思,2020-05-26(C语言)1.将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做.2.逆转函数...

热门文章

  1. js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题
  2. Python分析抖音数据,让视频爆起来
  3. Redis大批量插入数据
  4. Java大牛呕心沥血经历——技术面试与HR谈薪资技巧
  5. 唯品会的服务化[转]
  6. 2021.3.19en
  7. 关于XUL上的textbox中的persist属性使用
  8. 色粉画的发展历程与西方艺术中的色粉画
  9. Java 实现图片转换为ICO以及多种格式图片之间转换
  10. 视频压缩后大小没变怎么办?视频压缩后大小没变是为什么?