前段时间使用Mqtt-fx工具测试了一下基于mqtt的阿里云连接测试,学习的目的就是将整个流程转移到都硬件设备上,为了更深度的学习,这里使用ESP8266模块和USB串口工具进行测试。在开始前需要用到几个软件工具,一个是mqttfx,一个是网络抓包工具Wireshark,

esp8266 at连接巴法云 esp8266接入阿里云_esp8266 at连接巴法云

首打开Wireshark并监听阿里云1883端口的网络数据,再使用mqttfx进行正常的登录服务器、断开服务器、发送消息、接收消息等等并抓去报文。

esp8266 at连接巴法云 esp8266接入阿里云_TCP_02

esp8266 at连接巴法云 esp8266接入阿里云_心跳包_03

esp8266 at连接巴法云 esp8266接入阿里云_TCP_04

esp8266 at连接巴法云 esp8266接入阿里云_TCP_05

esp8266 at连接巴法云 esp8266接入阿里云_esp8266 at连接巴法云_06

esp8266 at连接巴法云 esp8266接入阿里云_服务器_07

以上包含有链接、链接应答、心跳包、心跳包应答、订阅消息、发布消息报文,基本上就是最简单的所有通信过程了。而这些报文都是基于TCP的,从报文里面的Hex数据以及MQTT手册里面进一步的去分析,可以将报文和协议全部对应上,下面贴上我笔记上的一部分内容:

esp8266 at连接巴法云 esp8266接入阿里云_心跳包_08

esp8266 at连接巴法云 esp8266接入阿里云_服务器_09

esp8266 at连接巴法云 esp8266接入阿里云_esp8266 at连接巴法云_10

esp8266 at连接巴法云 esp8266接入阿里云_心跳包_11

协议倒不是很复杂,就是比较多,刚开始入门就难以理解。

接下来就是把这些报文通过今天的主角ESP8266去实现了。

下面是我用ESP8266连接阿里云的步骤:

确保ESP8266是乐鑫官方AT固件,这个不多说,如果不懂自行百度;

1.发送“+++”     目的是让ESP8266退出透传;

2.AT+RESTORE 让模块恢复出厂设置,因为这样是最权威和干脆利落的;

3.AT  判断模块的好坏及工作状态,正常就会回复OK;

4.ATE0       关闭回显,这个没什么好说的;

5.AT+CWMODE_CUR=1 设置为station模式;

6.AT+CWJAP_CUR="ssid","password"   连接热点,需要根据自己的热点更改;

7.AT+CIPSTART="TCP","a1ugBNniFGU.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883连接TCP;

8.AT+CIPMODE=1 设置传输模式为透传模式;

9.AT+CIPSEND 告诉模块开始传输数据,收到模块的‘>’就证明可以了;

10.登录MQTT

11.发送心跳包

12.发送消息

13.接收消息

 

以上就是ESP8266模块连接阿里云、和阿里云通信的所有步骤。

这里登录MQTT、发送心跳包、发消息内容都是要根据MQTT协议来的。一个字节都不能错。除此之外登录MQTT的报文内容还要根据阿里云的一机一密来计算。再有就是步骤7到步骤10是有时间限制的。我测试的时候是10s,也就是说通过TCP连接上阿里云服务器后,如果10s内没有通过MQTT登录,阿里云会自动的把你踢下去。除此之外就是MQTT的协议了。这个一定要耐心并细心的啃了。我在这上面花了也不少时间。