第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指令交互流程
上面三条指令不是随便发的,有严格的先后顺序。我画了一张流程图,你看一眼就明白了。
流程其实就六步:
- 上电:模组启动,等待1-2秒让内部初始化完成
- AT测试:发一个AT,看模组是否回OK。这一步很多人跳过,我建议你别省——能快速确认串口通信是否正常
- 查信号:AT+CSQ,确认信号强度够用
- 附着网络:AT+CGATT=1,等待OK
- 配置PDP:AT+CGDCONT=1,"IP","你的APN"
- 激活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对不对。省下来的时间,喝杯咖啡不香吗?