[经验分享] 一文带你入门 AT 指令集:从串口通信到模块控制

[复制链接]
1619|0
Jiangxiaopi 发表于 2025-10-11 21:44 | 显示全部楼层 |阅读模式
在嵌入式开发、物联网以及通信模块调试中,有一个你迟早会遇到的重要工具 —— AT 指令。

无论是 GSM 模块打电话发短信、WiFi 模块联网、蓝牙模块配对,还是 GNSS 模块获取定位,AT 指令都扮演着人机通信的桥梁。

AT 指令能做什么?(结合模块场景)
AT 指令的本质是 “通过串口发送文本命令,直接控制模块功能”。
根据不同模块,AT 指令能完成的任务大致分为两大类:

① 移动通信模块(GSM / GPRS / LTE)
设备控制:模块开机、复位、查询版本信息

网络接入:注册运营商网络,检查信号强度

通话与短信:拨打电话、发送/接收短信

移动数据:PPP 拨号上网,建立 TCP/UDP 连接,上报数据到服务器

② 终端通信模块(WiFi / 蓝牙 / GNSS)
WiFi 模块:连接路由器、建立 TCP/UDP、MQTT

蓝牙模块:搜索、配对、数据透传

GNSS 模块:开启定位、输出经纬度、查询定位状态

大白话:AT 指令就是“模块的遥控器”。在 GSM/LTE 模块里,它能打电话、发短信、上网;

在 WiFi/蓝牙/GNSS 模块里,它能连路由、配对手机、获取定位。学会 AT 指令,就能直接操作通信模块的所有核心功能。

1. 什么是 AT 指令?
AT 指令(Attention Command)是一种用于控制调制解调器(Modem)或通信模块的命令集。

如今,它被广泛应用于:

移动模块:GSM / GPRS / LTE 模块(SIM800、Quectel、移远)

终端模块:WiFi 模块(ESP8266、ESP32)、蓝牙模块(HC-05)、GNSS 模块(Neo-6M)

本质:通过串口发送的“文本命令”,用来控制模块的行为。

大白话:AT 指令的本质就是“发文本命令,模块照做”。最早用于调制解调器,现在几乎所有通信模块都支持。

2. AT 指令的基本格式



通用规则:

所有命令以 AT 开头;

命令以 回车换行(\r 或 \r\n) 结束;

返回结果通常为:

OK:执行成功

ERROR:命令错误或参数非法

+CMD: xxx:返回查询结果

大白话:AT 指令的格式很规律:测试、查询、设置、执行。记住:都要以 AT 开头、回车结尾,返回 OK 就成功。

3. 常见模块 AT 指令示例
移动模块(SIM800 为例)
AT              // 测试串口是否通信正常
AT+CSQ          // 查询信号强度
AT+CREG?        // 查询网络注册状态
ATD10086;       // 拨打电话
AT+CMGF=1       // 设置短信为文本模式
AT+CMGS="手机号" // 发送短信





WiFi 模块(ESP8266 为例)
AT                       // 测试模块是否响应
AT+CWMODE?               // 查询当前工作模式
AT+CWMODE=1              // 设置为 Station 模式
AT+CWJAP="SSID","PWD"    // 连接 WiFi
AT+CIPSTART="TCP","ip",port // 建立 TCP 连接
AT+CIPSEND=5             // 准备发送数据





GNSS 模块(ATGM 为例)
AT+CGPS=1          // 打开 GPS
AT+CGPSINFO        // 获取定位信息
AT+CGPSSTATUS?     // 查询定位状态





大白话:不同模块的 AT 指令大同小异:GSM 模块能打电话发短信,WiFi 模块能联网传数据,GNSS 模块能获取经纬度。就是一套“问答语言”,用在哪儿就干哪儿的事。

4. AT 指令调试工具
常见串口调试工具:

Windows:SSCOM、XCOM、SecureCRT

Arduino IDE 串口监视器(适合 ESP32、蓝牙等)

Linux:minicom、picocom

串口常见配置:

波特率:9600 / 115200(视模块而定)

数据位:8

停止位:1

校验:None

结束符:\r 或 \r\n

大白话:要和模块聊天,需要一个“串口聊天工具”。配置好波特率和结束符,才能让模块听懂你说话。

5. 实战调试技巧
判断串口是否连通:AT → 返回 OK 即正常

模块“死机”:用 AT+RST 复位,或检查电源供电是否足够

批量测试命令:用串口助手的“宏命令/脚本”功能自动发送

打包话:调试秘诀:先发 AT 看有没有 OK,不行就复位+查供电,命令多了就用脚本,省力高效。

6. 自定义 AT 指令(高级玩法)
可以仿照模块写自己的 AT 指令:


if (strncmp(cmd, "AT+LED=ON", 9) == 0) {
    led_on();
    send_response("OK\r\n");
} elseif (strncmp(cmd, "AT+LED=OFF", 10) == 0) {
    led_off();
    send_response("OK\r\n");
} else {
    send_response("ERROR\r\n");
}

大白话:你不仅能用模块的 AT 指令,还能写自己的。别人只要发命令,就能控制你的设备,这就是 DIY 的乐趣。

7. 常见问题 FAQ
Q: AT 指令能发中文吗?
A: 直接不行,大多数模块只支持 ASCII,需要转 UCS2/PDU。

Q: 为什么返回 ERROR?
A: 参数不合法、格式错误、模块未初始化或不支持该状态。

Q: 为什么响应慢?
A: 模块需要等待初始化,比如 GSM 模块上电要 5~10 秒。

大白话:AT 指令常见坑:中文要转码;ERROR 多半是命令/状态问题;响应慢是因为模块还没准备好。
————————————————
版权声明:本文为CSDN博主「平凡灵感码头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Cha3043445754/article/details/151123270

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

296

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部