前段时间使用Mqtt-fx工具测试了一下基于mqtt的阿里云连接测试,学习的目的就是将整个流程转移到都硬件设备上,为了更深度的学习,这里使用ESP8266模块和USB串口工具进行测试。在开始前需要用到几个软件工具,一个是mqttfx,一个是网络抓包工具Wireshark,
首打开Wireshark并监听阿里云1883端口的网络数据,再使用mqttfx进行正常的登录服务器、断开服务器、发送消息、接收消息等等并抓去报文。
以上包含有链接、链接应答、心跳包、心跳包应答、订阅消息、发布消息报文,基本上就是最简单的所有通信过程了。而这些报文都是基于TCP的,从报文里面的Hex数据以及MQTT手册里面进一步的去分析,可以将报文和协议全部对应上,下面贴上我笔记上的一部分内容:
协议倒不是很复杂,就是比较多,刚开始入门就难以理解。
接下来就是把这些报文通过今天的主角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的协议了。这个一定要耐心并细心的啃了。我在这上面花了也不少时间。