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指令的交互流程其实很简单,就是“请求-响应”模式。但有几个细节需要注意:

  1. 发送指令后,必须等待模组回复,不能连续发多条。
  2. 每条指令的回复可能有多行,最后一行一定是OK或ERROR。
  3. 模组处理指令需要时间,通常几十毫秒到几百毫秒不等。

下面是一个完整的交互示例:

发送: 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指令抓包交互流程 串口工具 串口总线(抓包点) 蜂窝模组 抓包数据示例 [发送] 41 54 0D 0A → "AT\r\n" [接收] 4F 4B 0D 0A → "OK\r\n" [发送] 41 54 2B 43 53 51 3F 0D 0A → "AT+CSQ?\r\n" [接收] 2B 43 53 51 3A 20 31 39 2C 39 39 0D 0A → "+CSQ: 19,99\r\n" [接收] 4F 4B 0D 0A → "OK\r\n" 抓包可以验证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协议时,你会觉得轻松很多。