前言:esp8266推出已久,esp8266-01/01s是常见的两款,本文通过抓包原始数据使用tcp透传来做简单的功能测试。
01和01s区别不大,一样使用即可,下图实为01s
*这里在Windows本地安装一个emq服务器(看连接状态,供调试查看客户端是否断开用)
官网地址如下,安装后启动,官网有详细使用指导,看相应系统版本即可
https://www.emqx.io/cn/products/broker
然后浏览器输入 localhost:18083
对模块操作后刷新浏览器即可查看当前连接客户端
为方便分析学习,安装一个网络抓包工具wireshark(可以直接复制里面的mqtt数据)
百度搜索下载安装即可。。,打开软件,如下设置
然后电脑本地使用mqtt调试助手连接你的云测试服务器:
ID填一个字节就好,方便看数据,然后连接,此时抓包软件将刷新数据:
8266 模块操作(默认波特率115200)
1.连接wifi
AT+CWMODE_DEF=1 //设置station模式 (后缀_DEF的指令异常的把_EDF去掉试一下,正常则忽略,下同)
AT+CWSTARTSMART //微信配网,手机连接同一wifi关注安信可科技官方公众号,微信开发里面有微信配网,跟着操作即可
//AT+CWJAP_DEF="wifi","password" //手动配网,需要时选择(若返回异常,换CWJAP试试)
//AT+CWAUTOCONN=1 //上电自动连接wifi,根据需要配置
//AT+CIPSTA? //查询当前IP地址(若返回异常,换CIPSTA_DEF试试)
2.建立tcp连接
AT+CIPMODE=1 //选择透传模式,进入透传模式后tcp不会超时断开
AT+CIPSTART="TCP","m2m.eclipse.org",1883 //建立tcp连接,类似此格式,该服务器是一个公用测试服务器,改到你的
AT+CIPSEND //进入透传模式,然后配置一下串口助手如下
//1、取消发送新行,选择16进制发送
//2、接收16进制显示
//注1:取消发送新行,发送+++可退出透传,重新勾选发送回车换行即可使用AT指令
//注2:安信可提供的串口助手发送16进制后打钩会取消,可以用正点原子的串口助手,也有多条发送
开启上面的订阅的话,连接到mqtt端口即可看到connected会加1 ,如果退出透传的话,过一会儿会自动断开tcp连接。
3.建立mqtt连接
如图:
对连接和发送状态是否成功通过各种应答判断,这里对原始数据不进行解释 。。。,发送完成后刷新EMQ Dashboard可以看到客户端id正确,说明已经连接
4.发布主题
还是先抓包得到16进制码,然后使用串口发送
注:这里抓包只是抓取mqtt原始数据,是连接到云服务器的,串口at实验连接到本地服务器,是为了在emq的Dashboard上刷新查看连接的客户端和一些连接设置,这么做的原因是我没找到emq的armhf版本,而mosquitto的系统状态订阅查看不方便。抓本地服务器的数据的话走的链路应该不一样,可以抓的到,但我不清楚怎么筛选。。故tcp包抓的到,但不能方便的通过找data来找原始数据。。。知道的同学可以评论留言。。。
5 .订阅主题
依旧如上,用对应客户端连接到云服务器,抓取订阅包,在mqtt连接时发送,确认返回值
订阅主题后其他客服端发布相应主题,只要mqtt没有断开即可收到订阅,如下:
6.心跳包
还是如上,抓取心跳包,重新开始抓包,等一会儿即可
在超时时间内发送心跳包就可以保持与服务器的连接
以上即8266用到的一些基本操作,对原始数据的理解对照mqtt协议即可,中文手册下载地址如下:
https://github.com/mcxiaoke/mqtt
注:上面因为使用了两个服务器,所以看起来很混乱。。。本篇操作思路是云服务器抓包,本地调试,清楚目的,怎么调都可以----------