
AT指令(Attention Command)是一種廣泛應用于調制解調器、GSM/GPRS模塊、藍牙模塊等通信設備中的文本命令行協議。
它起源于1981年Hayes公司為其智能調制解調器設計的命令集,后來成為事實上的行業標準。
AT指令集最初由Dennis Hayes為Hayes Smartmodem開發,因其簡潔高效而迅速被其他廠商采納。
隨著移動通信技術的發展,GSM標準組織ETSI在07.05和07.07規范中對AT指令進行了標準化,使其成為控制移動終端(ME)和終端設備(TE)之間接口的標準。
AT指令通常遵循以下格式:
AT<命令>[=<參數>][<子命令>][<...>][<CR>]
AT:前綴,表示Attention<命令>:單字母或多字母組成的命令=<參數>:可選參數部分<CR>:回車符(ASCII 13),通常在實際發送時表示為\rAT指令的響應通常有以下幾種形式:
\r\nOK\r\n\r\nERROR\r\n\r\n<數據>\r\nOK\r\n\r\n<前綴><數據>\r\n\r:回車符(ASCII 13)\n:換行符(ASCII 10)>:表示輸入等待,通常在發送SMS文本時出現Ctrl+Z(ASCII 26):表示輸入結束AT+VOL=5AT+CMGS="13800138000"AT+CFUN=1(1表示開,0表示關)AT+CMGF=1(1表示文本模式,0表示PDU模式)典型的AT指令應用需要以下硬件連接:
AT+CMGF=1\r\n // 設置為文本模式
OK\r\n
AT+CMGS="13800138000"\r\n // 設置目標號碼
> Hello, this is a test message!\x1A // 輸入消息內容并以Ctrl+Z結束
+CMGS: 45\r\n
OK\r\n
AT+CIPSHUT\r\n // 確保之前連接已關閉
SHUT OK\r\n
AT+CSTT="cmnet"\r\n // 設置APN
OK\r\n
AT+CIICR\r\n // 激活移動場景
OK\r\n
AT+CIFSR\r\n // 獲取本地IP
10.120.45.67\r\n
AT+CIPSTART="TCP","example.com",80\r\n // 建立TCP連接
CONNECT OK\r\n
AT+CIPSEND=12\r\n // 準備發送12字節數據
> GET / HTTP/1.1\r\n // 發送HTTP請求
SEND OK\r\n
當指令執行失敗時,模塊會返回ERROR。常見錯誤原因包括:
// 示例:通過STM32發送AT指令
void SendATCommand(UART_HandleTypeDef *huart, char *cmd)
{
HAL_UART_Transmit(huart, (uint8_t*)cmd, strlen(cmd), HAL_MAX_DELAY);
HAL_UART_Transmit(huart, (uint8_t*)"\r\n", 2, HAL_MAX_DELAY);
}
// 接收響應
void ReceiveResponse(UART_HandleTypeDef *huart)
{
char buffer[256];
HAL_UART_Receive(huart, (uint8_t*)buffer, sizeof(buffer), HAL_MAX_DELAY);
printf("Response: %s\n", buffer);
}
import serial
# 創建串口連接
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
def send_at_command(command, wait_time=1):
ser.write((command + '\r\n').encode())
time.sleep(wait_time)
response = ser.read(ser.in_waiting).decode()
return response
# 示例:查詢模塊信息
print(send_at_command('AT+CGMI'))
print(send_at_command('AT+CGMM'))
#include <SoftwareSerial.h>
SoftwareSerial sim800l(10, 11); // RX, TX
void setup()
{
Serial.begin(9600);
sim800l.begin(9600);
// 測試AT指令
sim800l.println("AT");
delay(1000);
while(sim800l.available())
{
Serial.write(sim800l.read());
}
}
void loop()
{
// 其他操作...
}
盡管AT指令已有數十年歷史,但它仍在物聯網設備中廣泛使用。
未來的發展趨勢包括:
AT指令作為通信設備控制的基礎協議,其簡單性和可靠性使其在物聯網時代仍然具有重要價值。
通過本文的詳細介紹,讀者應該能夠理解AT指令的基本原理、掌握常見指令的使用方法,并能夠在實際項目中應用這些知識。
隨著技術的發展,AT指令可能會演變出新的形式,但其核心思想——簡單有效的設備控制——仍將繼續影響未來的通信接口設計。

覺得文章不錯,點擊“分享”、“贊”、“推薦” 唄!