第2章 AT指令基础:格式、常用指令与交互流程

好,咱们正式开始跟模组“对话”。

你买了一块蜂窝模组,焊好了天线,通了电。然后呢?模组不会自己上网——你得告诉它:搜信号、连网络、建连接。这个“告诉”的过程,就是通过AT指令完成的。

AT指令,说白了就是一套文本命令。你发一句,模组回一句。简单,但极其重要。我做了这么多年物联网,见过太多项目栽在AT指令交互的细节上——不是超时没处理,就是指令顺序搞反了。

这一章,咱们把AT指令的底裤扒干净。

2.1 AT指令长什么样?

AT指令的格式其实很固定。我直接给你看标准结构:

AT<命令名>[=参数1,参数2,...]<回车换行>

每个字符都是ASCII文本。模组收到回车换行(\r\n)后,才开始解析执行。

举个例子:

AT+CSQ

AT+CGATT=1

AT+CGDCONT=1,"IP","cmnet"

第一行查信号强度,没参数。第二行附着网络,参数是1(附着)。第三行设PDP上下文,三个参数用逗号隔开。

模组收到指令后,会返回结果。结果分两种:

  • 中间信息:比如网络注册状态变化时,模组主动上报的 +CREG: 1
  • 最终结果:OK 或 ERROR,表示指令执行成功或失败

核心原则:发一条,等一条。没收到OK之前,别发下一条。很多新手一上来就噼里啪啦发一堆,结果模组全丢了,最后一脸懵。

2.2 三条最常用的AT指令

模组支持的AT指令有上百条,但日常开发中,80%的时间你只用到不到10条。下面这三条,是每次上电后必跑的“三板斧”。

2.2.1 AT+CSQ —— 查信号强度

这条指令用来获取当前接收信号强度指示(RSSI)。

AT+CSQ

+CSQ: 19,99

OK

返回的两个数字:

  • 第一个是信号强度值,范围0-31,越大越好。19对应大约-75 dBm,属于中等偏上。
  • 第二个是误码率,99表示未知或无效。

我个人的经验:如果CSQ值低于10,就别指望网络能稳定工作了。我在一个地下停车场项目里吃过这个亏——CSQ只有5,模组死活连不上服务器,后来加了外置天线才解决。

CSQ值 对应RSSI (dBm) 信号质量
0 ≤ -113 极差
10 -93 较差
20 -73 良好
31 -51 极好

2.2.2 AT+CGATT —— 附着网络

信号有了,下一步是让模组“附着”到移动网络。附着成功,模组才能进行数据业务。

AT+CGATT=1

OK

参数1表示附着,0表示分离。查询当前状态:

AT+CGATT?

+CGATT: 1

OK

返回1表示已附着,0表示未附着。

注意:附着操作不是瞬间完成的。有些模组需要5-10秒才能返回OK。我建议你发完指令后,设置至少15秒的超时等待。我曾经在一个项目中把超时设成了3秒,结果模组每次都返回ERROR,排查了半天才发现是超时太短。

2.2.3 AT+CGDCONT —— 配置PDP上下文

附着网络之后,还需要配置PDP上下文。你可以把它理解成“告诉模组用哪个APN上网”。

AT+CGDCONT=1,"IP","cmnet"

OK

三个参数的含义:

  • CID(上下文ID):一般用1,表示第一个PDP上下文
  • 协议类型:IP(IPv4)或 IPV6,绝大多数场景用IP
  • APN:接入点名称。移动卡一般是cmnet,联通是3gnet或uninet,电信是ctnet

查询当前配置:

AT+CGDCONT?

+CGDCONT: 1,"IP","cmnet","0.0.0.0",0,0,0,0

OK

看到0.0.0.0别慌,那是还没获取到IP地址。等后面激活PDP上下文后,这里会变成真正的IP。

小技巧:APN填错了,模组也能返回OK,但后面激活PDP时一定会失败。我建议你在配置完CGDCONT后,立即用AT+CGACT=1,1激活一下,看能不能拿到IP。能拿到,说明APN对了。

2.3 AT指令交互流程

上面三条指令不是随便发的,有严格的先后顺序。我画了一张流程图,你看一眼就明白了。

AT指令交互流程图 AT指令交互流程 模组上电启动 发送 AT 测试通信 AT+CSQ 查信号 AT+CGATT=1 附着 AT+CGDCONT 配APN AT+CGACT=1,1 激活 关键原则 • 发一条,等一条 • 收到OK再发下一条 • 超时时间至少15秒 常见错误 • 跳过CSQ直接附着 • APN填错不检查 • 超时设太短

流程其实就六步:

  1. 上电:模组启动,等待1-2秒让内部初始化完成
  2. AT测试:发一个AT,看模组是否回OK。这一步很多人跳过,我建议你别省——能快速确认串口通信是否正常
  3. 查信号:AT+CSQ,确认信号强度够用
  4. 附着网络:AT+CGATT=1,等待OK
  5. 配置PDP:AT+CGDCONT=1,"IP","你的APN"
  6. 激活PDP:AT+CGACT=1,1,激活成功后模组会拿到IP地址

激活成功后,你就可以用AT+CIPSTART或AT+QIOPEN等指令建立TCP/UDP连接了。这部分咱们后面章节细讲。

避坑指南:我曾经在一个NB-IoT项目里,发现模组每次附着都要等30秒以上。一开始以为是模组坏了,后来查手册才发现——NB-IoT模组在信号弱时会自动降低发射功率来省电,导致附着变慢。解决办法是强制设置一个较高的发射功率等级。所以,遇到附着慢,先查信号,再查配置。

2.4 实操建议

纸上谈兵没意思。我给你一个最小可用的AT指令序列,你拿到模组后可以直接用串口工具(比如SSCOM或Putty)一条一条发:

AT
OK

AT+CSQ
+CSQ: 20,99
OK

AT+CGATT=1
OK

AT+CGDCONT=1,"IP","cmnet"
OK

AT+CGACT=1,1
OK

AT+CGPADDR=1
+CGPADDR:1,"10.168.1.100"
OK

最后一条AT+CGPADDR用来查模组获取到的IP地址。看到IP了,说明网络通路已经打通。

我的习惯:每次调试新模组,我都会写一个简单的Python脚本,用pyserial自动跑完上面这一整套流程。这样既能验证模组好坏,又能确认APN对不对。省下来的时间,喝杯咖啡不香吗?