在Linux系统中,AT指令通常与调制解调器(Modem)或GSM模块通信相关,用于控制设备拨号、发送短信、查询网络状态等操作,尽管现代Linux系统更倾向于使用ModemManager和ppp等工具管理网络连接,但AT指令因其直接性和灵活性,在嵌入式开发、物联网设备调试和传统通信场景中仍具有重要价值,本文将详细介绍AT指令在Linux环境下的使用方法、常见命令及实际应用场景。

AT指令基础与Linux环境准备
AT指令(Attention Command)是 Hayes公司为调制解调器设计的命令集,每条指令以”AT”开头,以回车符(r)结束,在Linux中,通常通过串口(如/dev/ttyS0或/dev/ttyUSB0)与设备通信,首先需确认设备是否被正确识别:
ls -l /dev/ttyUSB*
若设备存在,可使用minicom、screen或cu等工具直接交互,使用minicom配置串口参数(波特率9600、数据位8、停止位1、无校验):
sudo minicom -D /dev/ttyUSB0 -b 9600
进入后输入AT并回车,若返回OK,则表示设备连接正常。
常用AT指令分类与示例
基础指令
用于测试设备连接和基本信息查询:
AT:测试通信是否正常,返回OK。ATI:查询设备制造商和型号信息。AT+CGMM:获取模块型号,如Quectel EC25。
网络相关指令
用于管理和查询网络状态:
AT+CREG?:检查网络注册状态,返回+CREG: 0,1表示已注册到家庭网络。AT+COPS?:查询当前运营商信息,如+COPS: Vodafone。AT+CSQ:获取信号强度值(范围0-31,31为最强)。
数据连接指令
用于建立和断开PPP拨号连接:

ATD*99#:拨号连接到默认APN,成功后系统会自动启动pppd进程。ATH:挂断当前连接。
短信指令
(仅支持GSM模块)
AT+CMGF=1:设置为文本模式。AT+CMGS="13800138000":发送短信,输入内容后按Ctrl+Z发送。
通过脚本批量执行AT指令
在实际应用中,常需通过脚本自动化控制设备,以下示例为使用echo和socat工具发送指令并获取响应:
#!/bin/bash
DEVICE="/dev/ttyUSB0"
BAUDRATE="9600"
send_at() {
echo -e "$1r" | socat - $DEVICE,b=$BAUDRATE,raw,echo=0
}
response=$(send_at "AT+CSQ")
echo "Signal Quality: $response"
将脚本保存为check_signal.sh,赋予执行权限后运行即可自动查询信号强度。
故障排查与优化
-
权限问题:串口设备通常属于
dialout组,需将用户添加到该组:sudo usermod -aG dialout $USER
修改后需重新登录生效。
-
指令无响应:检查波特率是否匹配,硬件连接是否稳定,可通过
stty -F /dev/ttyUSB0查看当前串口参数。
-
拨号失败:确认APN配置是否正确,部分运营商需指定用户名和密码,可通过
AT+CGDCONT=1,"IP","your_apn"设置。
AT指令在物联网中的应用
在嵌入式Linux设备(如树莓派+4G模块)中,AT指令常用于实现远程数据传输,定期采集传感器数据并通过GPRS上传至服务器:
#!/bin/bash
# 读取温度传感器
TEMP=$(sensors | grep temp1 | awk '{print $2}')
# 发送至HTTP服务器
curl -X POST -d "temp=$TEMP" http://your-server.com/api/data
结合cron定时任务,可实现无人值守的远程监控。
相关问答FAQs
Q1: 如何在Linux中持续监控AT指令的响应日志?
A1: 可使用screen或minicom的日志功能,或通过cat和tee组合实时保存输出:
screen -L -Logfile at_log.txt -dmS at_monitor /dev/ttyUSB0 9600 # 或 cat /dev/ttyUSB0 | tee at_monitor.log
Q2: AT指令与AT+Q指令有何区别?
A2: AT指令是基础命令集,而AT+Q(如华为模块的AT+QENG)是厂商扩展指令,用于查询更详细的网络信息(如LTE频段、RSRP等),不同厂商的扩展指令可能不同,需参考具体模块的AT指令手册。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/71434.html