副标题:接线、新行模式、完整配网会话,以及为什么 Wireshark 抓不到 AT 文本
专栏:《嵌入式学生的方案测试课》第 4 篇
前置:第 1 篇环境表,第 3 篇阻塞点地图里的「等 AT OK」
标签:嵌入式、WiFi、软件测试、物联网、C语言
读者:买了 ESP8266 和 USB 转串口,或即将到手;会打开串口助手,但还没把会话当成测试证据
学完交什么:接线照片、一份带时间戳的 AT 会话、四层标注、一张「失败不可观察」缺陷单
主实验板:ESP8266 / ESP-12F。Hi3861 用自打日志对照。国内不做 HaLow 发射,泰芯 AT 只作公开命令对照。
0. 这篇结束你能干什么
勾这 3 条。勾不完不要宣称「会配网」。
- 能独立接线:TX 对 RX、RX 对 TX、GND 共地、3V3 供电;串口 115200 8N1,打开新行;先发
AT得到OK。电脑不认 COM、有打印输不进命令,能按清单排除,而不是先怪芯片。 - 能跑完一条完整会话:扫网、正确密码连上并记录 GOT IP 耗时、错误密码记录失败码和耗时、弱网或拔天线记录超时;全过程存成带时间戳的 txt。
- 能当面说清:AT 文本走 UART,Wireshark 默认抓不到它;DHCP、TCP、MQTT 才可能出现在网口。把 AT 原文说成抓包,是第 8 篇之前最常见的装懂。
第 3 篇把「等 AT OK」画进了阻塞点地图。本篇把这次等待变成可测的状态机:发、等、校验、超时、重试、放弃。
1. 为什么现场第一件事是打开串口
客户板来了,不要先开 Wireshark,不要先改代码。先问:串口有没有、波特率多少、版本横幅是什么。
理由很具体:
- 版本不对,后面所有性能数字作废(第 1 篇纪律)
- 很多「连不上」是 TX/RX 没交叉、没 GND、没新行、驱动没装
- AT 是模组的控制面。控制面都没通,数据面抓包没有意义
- 公开的泰芯 AH FAQ 把串口工具写成了独立一节:电脑不认口先查 CH340;有打印输不进命令先查会话和新行模式。原厂把学生第一天会踩的坑写进了 FAQ,说明它不是个例
方案测试工程师的手感,有一半是串口手感。另外一半才是分层和抓包。
2. 最小原理
2.1 UART 只要记住这几条
UART 是异步串口:双方约定波特率,没有时钟脚。一方 115200、另一方 9600,两边都可能看到乱码或什么都没有。
最小接线:
MCU/模组 TX ---- USB转串口 RX MCU/模组 RX ---- USB转串口 TX MCU/模组 GND ---- USB转串口 GND 电源 3V3/5V 按板子丝印,不要用 USB 5V 直灌 3V3 芯片TX 对 TX、RX 对 RX,是学生第一错。看起来「有电」,现象是:有时能看到模组打印(模组 TX 碰巧接到了电脑 RX),但电脑打字模组听不见。
GND 必须共地。只接 TX/RX 不接 GND,现象飘:有时通、有时乱码,极像「射频不稳」。先当供电和地,不当 Wi-Fi。
USB 转串口常见 CH340、CP2102、FT232。Windows 不认 COM:先装驱动,再换线、换口。AH FAQ 公开写的就是 CH340 驱动。不要把「设备管理器里没有 COM」写成模组 UART 坏了。
电平:USB 转串口有 3.3V 和 5V 逻辑。ESP8266 的 UART 是 3.3V。5V 推 RX 有风险。测试记录写清转接板型号。
AH 公开硬件项:UART TX/RX 串 1K,防止串口工具漏电把模组灌醒或灌异常。学生板没有 1K 也可以先练 AT,但要知道:现场「插上串口电流变了、休眠进不去」可能是漏电,不是协议栈。第 15 篇会回到这颗电阻。
2.2 新行模式:有打印输不进命令的第一嫌疑
AT 命令通常以回车、换行结束(CR、LF,或两者)。串口助手必须配置:
- 波特率:以模组手册为准,ESP8266 常见 115200,也有 74880 启动日志
- 数据位 8、无校验、1 停止位(8N1)
- 发送时附加:新行 / CR LF。只附加 CR 或只 LF,有的模组认、有的不认
- 不要用「十六进制发送」除非你在测二进制
AH FAQ 原话方向:电脑能识别串口、有打印,但输不进命令,先查会话设置和新行。学生用 SSCOM、MobaXterm、PuTTY、串口助手都一样。PuTTY 要在 Terminal 里自己处理 Enter。配不好就会出现「我明明敲了 AT」。
ESP8266 启动时可能先以 74880 打一段 boot,再切到 115200。你只开 115200,上电瞬间那几行是乱码,后面ready才正常。不要把启动乱码写成芯片损坏。记录里写:启动乱码是否只出现在前 200ms。
2.3 AT 是 UART 上的文本协议,不是网包
分层再钉一次:
你敲的 AT+CWJAP=... → USB 转串口 → 模组 UART 解析器 模组连 AP 的 802.11 → 空口(第 9 篇,默认抓不到) 拿到 IP 之后的 DHCP/TCP → 网口(第 8 篇,热点拓扑才能看到设备包)所以:
- Wireshark 选电脑网卡,过滤器
mqtt,看不到AT+CWJAP - 串口 txt 里出现
AT+CWJAP,不能当作「我抓过 MQTT」 - 简历写 Wireshark 抓 AT,是概念错误
第 8 篇会教正确拓扑。本篇只要你停止混用两个通道。
2.4 AT 状态机:发、等、校验、超时、重试、放弃
把第 2 篇状态机具体化:
空闲 --发命令--> 等待响应 |-- 收到完整 OK / ERROR / 数据 --> 校验 --> 空闲(成功或失败) |-- 超时 --> 重试(有限次)--> 放弃 --> 空闲(带错误码) |-- 半路又来一条命令 --> 非法重入(第 2 篇非法转移)每一项都要变成可测数字:
| 项 | 你必须写进用例的数 |
|---|---|
| 发 | 完整命令字节,含结束符;是否回显 |
| 等 | 超时阈值,例如 8s 连 AP、2s 普通 AT |
| 校验 | 成功关键字OK、WIFI GOT IP;失败ERROR、FAIL、+CWJAP:1 |
| 重试 | 最多几次、间隔多少、间隔是否退避 |
| 放弃 | 放弃后能否再接受AT;会不会复位;UI 会不会转圈到死 |
第 3 篇:若把「等 OK」放进采集任务且超时 8s,采集周期直接烂。本篇实验在 PC 串口助手上手动等,先体会 8 秒有多长;第 14 篇再用 Python 把超时写成脚本。
2.5 日志规范:现在就开始,不要等自动化
串口助手打开「时间戳」。没有该功能,就在保存后用编辑器按段标注。一行合格日志至少有:
21:05:03.012 [UART] >> AT 21:05:03.020 [UART] << OK 21:05:10.100 [WIFI] GOT IP 192.168.43.12 rssi=-48要抄的字段:时间、方向(主控发还是模组回)、版本横幅、RSSI(有则抄)、错误码原文。不要总结成「连上了」。第 1 篇合格现象的硬指标,在这里落地。
ESP8266 常见版本查询:AT+GMR。泰芯公开:AT+VERSION、AT+SYSCFG。学生板用谁记谁,报告禁止只写「最新固件」。
3. ESP8266 命令表(本篇够用的最小集)
不同厂家 AT 固件略有差异。先AT+GMR确认。下面按乐鑫经典 AT 写,你的板若不同,以回显为准,不要和范文死磕命令字母。
| 目的 | 命令(示例) | 成功时你应看到 | 超时建议 |
|---|---|---|---|
| 探活 | AT | OK | 1s |
| 版本 | AT+GMR | AT version / SDK version | 1s |
| 模式 | AT+CWMODE=1 | OK(1=STA) | 1s |
| 扫网 | AT+CWLAP | 若干(ecn,ssid,rssi,...)然后OK | 5 到 10s |
| 连接 | AT+CWJAP="ssid","pwd" | WIFI CONNECTED、WIFI GOT IP、OK | 8 到 15s |
| 查 IP | AT+CIFSR | STAIP | 1s |
| 断开 | AT+CWQAP | OK | 2s |
错误密码常见:FAIL、ERROR、或+CWJAP:1(按固件)。本篇不要求背错误码表,要求原文抄进缺陷单。
连 AP 是长命令。等待期间不要连敲。那是非法重入。
4. 手把手实验(ESP8266 必做)
材料:ESP-12F 或开发板、USB 转串口、杜邦线、能改密码的 2.4G AP 或手机热点、串口助手。环境表 ENV 按第 1 篇先填。SSID 用lab-ap-01,密码不要写进公开博客。
步骤 0:接线并拍照
- 断电。
- TX-RX 交叉,GND 共地。开发板若已带 USB 转串口,不要再外接另一套抢同一脚。
- 供电按丝印。ESP8266 发射瞬间电流大,用能供 300mA 以上的口,避开无源扩展坞。
- 拍照:照片里能看出交叉和 GND。作业要这张图。
- 设备管理器确认 COM 号,写入 ENV。
排障清单(按顺序,一次一个):
| 现象 | 先查 |
|---|---|
| 没有 COM | 驱动、线、口、设备管理器是否被占用 |
| COM 在,完全无打印 | TX/RX 接反或只接了一根;波特率;模组没上电;BOOT 脚被拉成下载模式 |
| 全是乱码 | 波特率;地;启动 74880 vs 115200 |
| 有启动打印,敲 AT 无回 | 新行;RX 没接到模组;CTS/RTS 流控误开 |
| 一发 AT 模组复位 | 供电不够;IO 电压;复位脚被带偏 |
到「AT→OK」之前,不要开始配网。探活失败属于环境未就绪,不是 Wi-Fi 缺陷(第 1 篇)。
步骤 1:探活和版本
发送AT,期望 1s 内OK。
发送AT+GMR,把版本字符串整段粘进 ENV「固件如何确认」。
步骤 2:扫网(射频 + 扫描)
AT+CWMODE=1,再AT+CWLAP。
记录:
- 列表里有没有
lab-ap-01 - 对应 RSSI
- 从发令到
OK的时间 - 列表空:先看天线(第 1 篇拔天线对照),再看是不是 5G-only 热点
扫不到就不要连。连一个不存在的 SSID,失败原因会和错密码搅在一起。
步骤 3:正确密码,记 GOT IP 耗时
基线:1m、天线接好。发送连接命令。用时间戳算:
T0 发出 CWJAP T1 WIFI CONNECTED(有则记,关联层) T2 WIFI GOT IP(IP 层) T3 OKT1 到 T2 的空隙,就是「已关联没 IP」的窗口。第 5 篇四层会用到。本篇先把数字抄下来。重复 3 次,写 3 个耗时,不要只留一次好运气。
步骤 4:错误密码(关联层)
只改密码少一位,其它冻结。期望:明确失败,模组仍响应下一条AT。记录失败原文和耗时。重复 3 次。
若 30s 无任何失败码、且AT不再OK:这是缺陷,不是「密码不对所以随便」。见第 5 节范文。
步骤 5:超时(射频或关联)
一次一个变量,下面选一种,不要同时拔天线又改密码:
- 松开天线再扫、再连
- 或 AP 关机后再连(SSID 不在列表)
记录:等到你设定的超时(例如 15s)是否放弃、是否仍能AT。把超时阈值写进用例,不要无限等。
步骤 6:保存会话并分层标注
把整段 txt 存为labs/week04/at-session.txt。在旁边做一份标注稿at-session-annotated.md:
L12 AT+CWLAP → 射频/扫描 L40 CWJAP 正确密码 → 关联 L45 WIFI CONNECTED → 关联成功 L47 WIFI GOT IP → IP L60 CWJAP 错误密码 → 关联失败(期望内) L88 拔天线后 CWLAP 空 → 射频标注的是层,不是锅。IP 没拿到不要写「芯片 DHCP 实现垃圾」,除非你已经排除关联。
没有 ESP8266 时
用开发板自带 USB 串口打AT/AT+GMR也行。完全没模组:用电脑两个串口互环或 USB 转串口短接 TX-RX 做回显,只练接线和新行,配网会话标「待补」。第 18 篇全程案例会卡住,所以仍建议本周把板买回来。
Hi3861:若无 AT,就保存启动日志 + 你自己的wifi connected/got ip打印,同样做时间戳和分层标注。状态机一样,只是命令不是AT+CWJAP。
5. 缺陷单范文:失败必须可观察
编号:BUG-20261016-at-01 标题:【AT】错误密码时 30s 内无 ERROR/FAIL,且期间 AT 无 OK(3/3) 严重级别:严重(产品会转圈到死,测试无法自动化) 环境:ENV-xx;ESP-12F;AT+GMR=____;AP lab-ap-01 WPA2;天线锁紧;只改密码少一位 前置:正确密码 3/3 在 8s 内 GOT IP;探活 AT 正常 步骤: 1. 115200 8N1 新行。 2. AT 得 OK。 3. 发错误密码连接。 4. 等待 30s,再发 AT。 期望:30s 内返回明确失败;随后 AT 仍 OK;模组不复位。 实际:30s 无失败码;第 31s 发 AT 无回显,直到 40s 模组自行打印 ready(自行复位)。3/3。 附件:at-session-wrongpass.txt(含启动横幅) 初步分层:AT 状态机 / 关联失败路径。射频排除:扫网成功。对照:若错误密码 8s 内FAIL且AT仍OK,这是符合期望,记测试记录,不要当芯片缺陷。第 1 篇已经说过。
另一张可选单:供电不足导致一连接就复位。环境写「电脑前口 USB,无外供」。换适配器后消失。初步分层硬件/供电,不是 AT 解析器。
6. 换成泰芯公开场景会怎么变
国内读者不发射 HaLow。下面只对照公开命令和行为,学生用 ESP8266 迁移同一测试动作。到原厂板以手册为准,不要把AT+CWJAP打到 AH 模组上。
| 公开文档 | 测试动作 |
|---|---|
| 串口不识别 → CH340 | 环境未就绪清单第一项 |
| 有打印输不进 → 新行 / 会话 | 步骤 0 探活 |
| TX/RX 串 1K 防漏电 | 插串口前后电流、休眠是否仍能进;第 15 篇展开 |
AT+SYSCFG探活 | 学生用AT/AT+GMR对应 |
AT+WIFIMODEAT+SSIDAT+KEY | 对应模式、SSID、密码;改参前先 down 再 up |
AT+CHAN_LISTAT+BSS_BW两端必须完全一致(含顺序) | 学生迁移:两端加密和频段要匹配;不要在连接中途改 SSID |
AT+PAIR成功后必须PAIR=0才握手 | 迁移:配网状态机要有明确退出,否则假连接 |
AT+VERSION含 SVN,不要擅自改 | 会话开头抄完整版本 |
AT+LOADDEF改容量类参数后恢复出厂 | 改过 STA 数、分区类配置,前置必须写是否恢复 |
AT+IPERF2=c,ip,port,time | 第 12 篇再打流;本篇只记「命令存在、需要网络宏」 |
AT+PING期间不能输入其它 AT | 阻塞点:ping 会占住 AT 会话,和第 3 篇同一类 |
TXW82x:AT是 CPU0,AT1是 CPU1 | 测无线核不要只打应用核 AT;学生无该板则记在地图里 |
Wi-Fi4 SRRC:AT+WIFIMODE=sta再 SSID/KEY,连上再 iperf | 本篇完成「连上」;打流留第 12 篇 |
| 网口 netat 发 AT(网桥) | 知道 AT 不一定走 UART;学生无网桥则只认知 |
固定句式:公开 FAQ 写新行模式,学生板上用串口助手勾上新行,到 AH 板同样先探活AT+SYSCFG。
6.1 一份合格会话长什么样(可对照)
下面是打码后的示意,不是让你抄结果交差。时间戳格式按你的助手来。
21:10:01.000 AT 21:10:01.012 OK 21:10:02.000 AT+GMR 21:10:02.020 AT version:1.x.x.x 21:10:02.030 SDK version:x.x.x 21:10:02.040 OK 21:10:05.000 AT+CWMODE=1 21:10:05.010 OK 21:10:06.000 AT+CWLAP 21:10:08.100 +CWLAP:(4,lab-ap-01,-47,xx:xx:xx:xx:xx:xx,6) 21:10:08.500 OK 21:10:20.000 AT+CWJAP="lab-ap-01","********" 21:10:22.400 WIFI CONNECTED 21:10:23.100 WIFI GOT IP 21:10:23.120 OK 21:10:30.000 AT+CIFSR 21:10:30.020 +CIFSR:STAIP,"192.168.x.x" 21:10:30.030 OK 21:10:40.000 AT+CWQAP 21:10:40.050 OK 21:10:50.000 AT+CWJAP="lab-ap-01","*******" ; 少一位 21:10:58.000 FAIL 21:10:59.000 AT 21:10:59.010 OK标注稿对应:
- CWLAP 有 ssid 且 rssi=-47,射频扫描过
- CONNECTED,关联过
- GOT IP 加 STAIP,IP 过
- 错密码 FAIL 且随后 AT 得 OK,失败可观察,状态机回到空闲
如果你的固件没有 WIFI CONNECTED 这行,不要补造。以原文为准,在 times.md 里定义你用哪一行当 T1。
回显:若助手开了本地回显,同一句 AT 会出现两次。报告写明。统计耗时用模组返回的那一行。
7. 30 秒口径
现场先开串口:驱动、交叉、地、波特率、新行,先 AT 得 OK。
AT 是发、等、校验、超时、重试、放弃。失败必须有码,超时后还要能探活。
AT 在 UART 上,Wireshark 抓不到 AT 文本。网口抓的是 DHCP/TCP/MQTT。
版本字符串每次抄进环境表。改 SSID 不要在连接半路进行。
8. 作业
labs/week04/ env.md wiring.jpg # TX-RX 交叉和 GND 可见 at-session.txt # 原始会话,开时间戳 at-session-annotated.md # 每段标射频/关联/IP times.md # 正确密码 3 次 GOT IP 耗时;错密码 3 次耗时 BUG-at.md # 若失败不可观察就提单;若都符合期望,写「无缺陷,附测试记录」验收:
- 会话里能搜到
AT和版本 - 有一次成功 GOT IP 和一次故意失败
- 标注稿没有把 AT 原文写成 Wireshark
- 错密码实验没有同时拔天线
- 密码和真实 SSID 已打码或未进公开目录
9. 自测题(先闭卷)
- 有启动打印、敲 AT 没回,最优先查什么?
- 为什么 Wireshark 看不到
AT+CWJAP? - TX 接 TX 时,为什么有时仍能看见模组输出?
- 正确密码的 T1(CONNECTED)和 T2(GOT IP)分别对应第 0 篇哪一层?
- 错误密码 30s 无码且 AT 死,为什么是缺陷而不是「密码不对」?
- 为什么连 AP 等待时不能连发下一条 AT?
- AH FAQ 的新行模式,和 ESP8266 实验哪一步对应?
AT+PING期间不能输入其它 AT,和第 3 篇什么概念是同一个?- 启动前 200ms 乱码、随后
ready,要不要写成 UART 损坏? - 把 AT 会话当抓包贴进简历,错在哪?
答案见附录。
10. 学生常见翻车
- 波特率不对,先换模组。
- 没新行,提单「AT 固件坏了」。
- 正确和错误密码、拔天线写在同一次操作里。
- 会话不存文件,口头说「刚才 OK 过」。
- 把
AT+CWLAP列表当空口抓包。 - 用电脑 USB 口供电,一关联就复位,判射频差。
- 泰芯板上仍打
AT+CWJAP,不读手册。
11. 下一篇预告
第 5 篇:《扫不到、连不上、没 IP、上不了云:方案测试只记这一张分层表》。
本篇会话里已经出现了扫网空、错密码、GOT IP。下一篇把它们收成四层故障注入:同一块 ESP8266,每层只造一个故障,填同一张表。那张表是专栏中轴。
附录 A. 自测题参考答案
- 新行 / 结束符;其次 RX 是否接到模组;再查流控。
- AT 在 UART 上,不经过电脑网卡的 IP 栈。
- 模组 TX 仍可能接到了电脑 RX,所以能看打印;电脑 TX 没进模组 RX,所以输不进。
- T1 关联层,T2 IP 层。
- 期望是可观察的失败并回到空闲。死等、死机、不再探活,破坏测试和产品。
- 非法重入;状态机还在等待,第二条会粘包或被丢,现象无法分层。
- 步骤 0 探活:串口助手打开新行后再发 AT。
- 阻塞。长命令占住 AT 任务,其它命令进不去。
- 不要。先确认是否 74880 启动日志。持续全程乱码才查波特率和地。
- 通道都错了。抓包指网口或空口帧;AT 是串口旁路。
附录 B. 公开资料
- 泰芯 AH 方案 FAQ:CH340、新行、1K 电阻、版本、LOADDEF、改参 down/up
- 泰芯 AH-SDK AT 指令:WIFIMODE / SSID / KEY / CHAN_LIST / BSS_BW / PAIR / VERSION / IPERF2 / PING / SYSCFG
- Wi-Fi4 SRRC 测试方法:STA 连接命令序列,其后才是 iperf
- TXW82x ReleaseNote:AT 与 AT1 分核
附录 C. 串口助手推荐配置(可截图对照)
端口:COMx(与设备管理器一致) 波特率:115200 数据位:8 停止位:1 校验:无 流控:无 发送附加:CR LF(新行) 显示:时间戳开,本地回显可开(报告里注明回显以免和模组回显重复计算) 编码:UTF-8 或 GBK 以实际中文日志为准,不要混用(第 4 篇完)