实验一:数据通信实验(ESP8266 + MQTT)
一、实验目的
本次实验的主要目标如下:
- 利用 AT 指令完成 Wi-Fi 连接配置,并基于 TCP 进行数据传输,理解 Wi-Fi 通信的基本过程;
- 利用 AT 指令完成 MQTT 通信配置,理解 MQTT 协议的发布/订阅机制;
- 学会使用 Wireshark 抓取并分析 MQTT 通信过程中的数据包。
二、实验内容
本次实验主要完成以下内容:
- 使用 ESP8266 模块连接 Wi-Fi;
- 通过 AT 指令配置 ESP8266 与 MQTT 服务器建立连接;
- 通过 MQTT 协议实现消息的发布和订阅;
- 使用 Wireshark 对 MQTT 数据包进行抓包与分析。
三、实验原理
1. MQTT 协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅模式的轻量级通信协议。该协议构建在 TCP/IP 协议之上,具有低开销、低带宽占用的特点,因此常用于物联网、小型设备和移动应用等场景。
MQTT 的数据传输方式如下图所示:
在 MQTT 通信中,设备不直接面向点对点发送数据,而是通过主题(Topic)和服务器(Broker)完成消息转发。发布者将消息发送到指定主题,订阅者订阅该主题后即可收到对应消息。
2. Wireshark 抓包工具
Wireshark 是一个网络封包分析工具,可以捕获网络通信过程中的数据包,并显示较为详细的协议字段信息。本次实验使用 Wireshark 对 MQTT 连接、订阅和发布过程进行抓包,从而观察 MQTT 报文的实际传输内容。
四、实验环境
| 类型 | 内容 |
|---|---|
| 硬件 | PC、小熊派、ESP8266 通信扩展板 |
| 软件 | Wireshark、mqtt.fx、串口调试助手 |
| 网络 | 手机热点 / Wi-Fi 网络 |
五、实验步骤
1. Wi-Fi 连接与 MQTT 通信准备
首先使用 ESP8266 模块连接 Wi-Fi,并通过 AT 指令建立到 MQTT 服务器的 TCP 连接。实验中 MQTT 主题采用如下格式:
1 | mqtt_class_组号 |
消息格式如下:
1 | {name1:成员1,name2:成员2,name3:成员3} |
实验操作示意如下:
2. Wireshark 过滤设置
在 Wireshark 中选择对应的网络接口,并设置 MQTT 相关过滤条件:
1 | mqtt || tcp.srcport == 1883 || tcp.dstport == 1883 |
该过滤器可以显示 MQTT 协议数据包,以及源端口或目标端口为 1883 的 TCP 数据包。MQTT 默认端口为 1883,因此可以通过该条件快速定位实验中的 MQTT 通信过程。
六、实验过程与数据分析
1. Wi-Fi 配置与连接
实验开始前,将手机热点切换为 2.4GHz 模式,并让电脑连接该热点。ESP8266 对 Wi-Fi 频段有要求,因此使用 2.4GHz 热点可以避免连接失败。
常用 AT 指令如下:
1 | AT |
各指令含义如下:
| 指令 | 含义 |
|---|---|
AT |
测试模块是否在线,检查串口通信是否正常 |
AT+CWMODE=1 |
将 ESP8266 设置为 Station 模式 |
AT+CWLAP |
扫描附近可用 Wi-Fi 列表 |
AT+CWJAP="Ghib6","11111111" |
连接名称为 Ghib6 的 Wi-Fi |
AT+CIPSTART="TCP","44.232.241.40",1883 |
建立到 MQTT 服务器 1883 端口的 TCP 连接 |
AT+CIPMODE=1 |
设置为透传模式 |
AT+CIPSEND |
进入数据发送状态 |
2. MQTT Connect 数据包分析
在 Wireshark 中可以截获 MQTT 的 Connect 数据包。Connect 数据包用于客户端向服务器发起 MQTT 连接请求,其中包含协议名称、协议版本、连接标志、Keep Alive 时间以及客户端标识等信息。
发送 Connect 数据后,服务器返回 Connect Ack 数据包。如果连接成功,返回内容中可以看到如下 HEX 数据:
1 | 20 02 00 00 |
其中:
20表示 MQTT 报文类型为 CONNACK;02表示剩余长度为 2;00表示连接确认标志;00表示返回码为 0,即连接成功。
对应串口返回结果如下:
3. MQTT Subscribe 数据包分析
Subscribe 数据包用于客户端向服务器订阅指定主题。实验中订阅主题为 ghib7,对应抓包结果如下:
处理后的 Subscribe 数据包如下:
1 | 82 0a 00 01 00 05 67 68 69 62 37 00 |
该数据包可以简单理解为:客户端向服务器发送订阅请求,请求订阅主题 ghib7。其中 67 68 69 62 37 对应 ASCII 字符串 ghib7。
发送订阅命令后,串口返回如下数据:
1 | 90 03 00 01 00 |
该数据为 Subscribe Ack,表示服务器已经确认订阅请求。
4. MQTT Publish 数据包分析
Publish 数据包用于向指定主题发布消息。实验中发布的消息内容为:
1 | {name1:xiangboyong,name2:zhouzijie,name3:songchunyu,name4:tongziran} |
抓包结果如下:
处理后的 Publish 数据包如下:
1 | 30 4b 00 05 67 68 69 62 37 7b 6e 61 6d 65 31 3a 78 69 61 6e 67 62 6f |
其中:
30表示 MQTT Publish 报文;4b表示剩余长度;00 05表示主题长度为 5;67 68 69 62 37对应主题ghib7;- 后续数据为发布消息内容的 ASCII 编码。
5. 串口快捷发送配置
将前面处理得到的 Connect、Subscribe 和 Publish 数据分别填入串口调试助手的快捷发送口,便于后续快速发送。
MQTT 配置界面如下:
设置如下:
按照顺序输入命令 2、3、4、5、7、8、9 后,串口返回结果如下,表示连接成功:
完成后清空接收区,并勾选 HEX 显示:
6. 订阅与发布验证
订阅成功后,在客户端发送 hi,观察串口是否能够收到对应消息。实验结果表明,串口成功输出了客户端发送的内容。
随后发送 Publish 命令,串口中成功显示如下消息:
1 | {name1:xiangboyong,name2:zhouzijie,name3:songchunyu,name4:tongziran} |
对应结果如下:
七、实验总结
本次实验围绕 ESP8266 模块的数据通信过程展开,主要完成了 Wi-Fi 连接配置、TCP 连接建立、MQTT 服务器连接、主题订阅与消息发布等操作。通过 AT 指令配置模块工作模式、扫描并连接无线网络、建立到 MQTT 服务器 1883 端口的 TCP 连接,并进入透传发送状态,我进一步理解了 ESP8266 模块在物联网通信中的基本使用方法。
同时,通过对 Connect、Subscribe 和 Publish 数据包的截获与整理,可以直观看到 MQTT 协议在连接确认、订阅确认以及消息发布过程中的数据格式和通信逻辑,这加深了我对 MQTT 发布/订阅机制的理解。
通过本次实验我也认识到,物联网通信不仅需要完成设备与网络之间的连接,还需要理解协议层数据交互的具体含义。Wireshark 抓包能够帮助判断通信是否成功,并验证串口发送数据与服务器返回数据之间的对应关系。在实验过程中,Wi-Fi 频段、AT 指令输入顺序、HEX 显示方式以及数据包格式都会影响实验结果,因此后续实验中需要更加注意环境配置和操作细节。
总体来看,本次实验基本达到了掌握 ESP8266 Wi-Fi 通信和 MQTT 协议通信流程的目的,也为后续物联网设备联网、数据上传和远程控制等应用打下了基础。



























