2. AT指令入门与模组通信
说实话,很多刚接触蜂窝模组的朋友,上来就想着怎么发数据、怎么连服务器。但我个人的经验是——先把AT指令玩明白,后面会省掉一大半的调试时间。AT指令就像是模组的“遥控器”,你发一条指令,它回一个结果,就这么简单。
这一章,我们就从最基础的东西开始。我会带你走一遍AT指令的完整交互流程,顺便聊聊我踩过的那些坑。
2.1 AT指令是什么?
AT指令,全称是Attention Command。说白了,就是“注意,我要发指令了”。它最早用在Modem上,后来蜂窝模组也继承了这套协议。你通过串口发一串文本给模组,模组解析后执行动作,再返回结果。
AT指令的格式非常固定:
AT<命令>[参数]<回车换行>
每条指令都以“AT”开头,后面跟具体命令和参数,最后以回车换行(\r\n)结束。模组收到后,会回复一个结果码,通常是OK或ERROR。
核心要点:AT指令是文本协议,不是二进制协议。你完全可以用串口助手手动输入,不需要写一行代码就能跟模组“聊天”。
2.2 常用AT指令速览
AT指令有上百条,但日常调试常用的就那么几个。我列个表,你一看就明白:
| 指令 | 功能 | 典型回复 |
|---|---|---|
AT |
测试模组是否响应 | OK |
AT+CSQ |
查询信号强度 | +CSQ: 19,99 |
AT+CREG? |
查询网络注册状态 | +CREG: 0,1 |
AT+CGATT? |
查询GPRS附着状态 | +CGATT: 1 |
AT+CGDCONT=1,"IP","CMNET" |
设置APN | OK |
这里我重点讲三个最常用的:
2.3 信号强度查询:AT+CSQ
AT+CSQ返回两个数字,比如+CSQ: 19,99。第一个数字是信号强度,范围0~31,越大越好。第二个是误码率,99表示未测量。
我在项目里遇到过一个问题:模组放在室内,CSQ值一直是10以下,死活连不上网。后来我把天线换了个位置,CSQ跳到18,立马就通了。所以,信号强度是排查网络问题的第一步。
小技巧:CSQ值在10以下基本没法用,15以上算正常,20以上算优秀。如果一直低于10,先检查天线和位置。
2.4 网络注册状态:AT+CREG?
AT+CREG?返回两个参数,比如+CREG: 0,1。第一个参数是上报模式,0表示禁止主动上报。第二个参数才是关键:
- 0:未注册
- 1:已注册,本地网
- 2:未注册,正在搜索
- 3:注册被拒绝
- 5:已注册,漫游
你想想看,如果CSQ很好但CREG返回0或3,那问题大概率出在SIM卡或运营商侧。我曾经遇到过一张欠费的SIM卡,CSQ显示20,但CREG一直是3,折腾了半天才发现是卡的问题。
2.5 GPRS附着状态:AT+CGATT?
AT+CGATT?返回0或1。0表示未附着,1表示已附着。这个状态决定了你能不能建立数据连接。
注意,CREG注册成功不代表CGATT附着成功。有些模组需要手动执行AT+CGATT=1才能附着。我刚开始做项目时就犯过这个错——CREG显示1,但CGATT一直是0,数据死活发不出去。
2.6 AT指令交互流程
AT指令的交互流程其实很简单,就是“请求-响应”模式。但有几个细节需要注意:
- 发送指令后,必须等待模组回复,不能连续发多条。
- 每条指令的回复可能有多行,最后一行一定是
OK或ERROR。 - 模组处理指令需要时间,通常几十毫秒到几百毫秒不等。
下面是一个完整的交互示例:
发送: AT
回复: OK
发送: AT+CSQ
回复: +CSQ: 19,99
OK
发送: AT+CREG?
回复: +CREG: 0,1
OK
发送: AT+CGATT?
回复: +CGATT: 1
OK
你看,每条指令都对应一个明确的回复。如果回复是ERROR,说明指令格式有误或模组不支持。
2.7 使用串口工具与模组通信
实际调试时,我推荐用SSCOM或Putty这类串口工具。设置好波特率(通常是115200)、数据位8、停止位1、无校验,打开串口就能直接输入AT指令了。
嗯,这里要注意:串口工具的换行符必须设置为\r\n。很多新手用默认的\n,结果模组没反应,还以为是模组坏了。
避坑指南:我曾经在调试时发现模组偶尔不回AT指令,后来用逻辑分析仪抓了串口波形,才发现是串口工具的流控设置不对。如果模组没反应,先检查波特率和流控(RTS/CTS),再检查换行符。
2.8 AT指令抓包验证
光看串口工具的输出还不够,有时候我们需要抓包来验证AT指令的交互是否完整。这里我推荐用逻辑分析仪或USB转串口抓包工具。
抓包能看到什么?
- 发送的AT指令是否完整(有没有丢字符)
- 模组回复的时序(延迟是否正常)
- 是否有异常数据插入(比如模组主动上报的URC)
下面这张图展示了AT指令抓包的典型流程:
抓包时,你会看到AT指令以ASCII码形式在串口上传输。比如“AT\r\n”对应的十六进制是41 54 0D 0A。如果发现发送的数据不完整,或者模组回复延迟异常,抓包能帮你快速定位问题。
个人经验:我习惯在抓包时同时打开串口工具的日志功能,两边对照着看。有时候串口工具显示OK,但抓包发现模组其实回复了ERROR,只是串口工具没刷新过来。抓包数据才是最真实的。
2.9 本章小结
AT指令是蜂窝模组调试的基石。你只要记住三点:
- 每条指令以AT开头,以\r\n结尾
- 回复以OK或ERROR结束
- CSQ、CREG、CGATT是排查网络问题的三板斧
把这些基础打牢,后面学TCP/IP通信、MQTT协议时,你会觉得轻松很多。