AT 指令详解----彻底讲明白
在 MCU(单片机)项目中,我们经常需要与各种通信模组(GSM、Wi-Fi、蓝牙等)交互。而这类模组通常都通过串口(UART)与 MCU 通信,控制它们的“语言”就是——AT 指令。
一、什么是 AT 指令?
AT 指令,全称 Attention Command,是一种标准的控制通信模组的命令集。
在 MCU 场景中,常见支持 AT 指令的模组有:
-
GSM 模组:如 SIM800、SIM7600,用于打电话、发短信、联网。
-
Wi-Fi 模组:如 ESP8266、ESP32,用于连接 Wi-Fi、HTTP/MQTT 通信。
-
蓝牙模组:如 HC-05、JDY 系列。
-
GPS 模组:如 NEO-6M,用于定位。
二、AT 指令格式与分类
AT 指令通过串口发送,格式统一,通常以 AT 开头,后跟操作内容,结尾必须加回车换行(\r\n)。
常见分类如下:
|
类型 |
示例 |
含义 |
|---|---|---|
|
测试模组是否在线 | AT\r\n |
正常返回 |
|
执行命令 | AT+RST\r\n |
复位模组 |
|
查询命令 | AT+CSQ?\r\n |
查询信号强度等状态 |
|
设置命令 | AT+CWMODE=1\r\n |
设置 Wi-Fi 工作模式 |
|
测试支持参数 | AT+CWMODE=?\r\n |
返回模组支持哪些模式 |
三、典型模组 AT 指令实用表
以 ESP8266 为例(Wi-Fi 模组):
|
功能 |
AT 指令 |
说明 |
|---|---|---|
|
测试是否正常 | AT |
返回 |
|
模组复位 | AT+RST |
重启模组 |
|
设置模式为 Station | AT+CWMODE=1 |
连接 Wi-Fi 用 |
|
连接 Wi-Fi | AT+CWJAP="SSID","PWD" |
连接热点 |
|
查询 IP 地址 | AT+CIFSR |
返回模组 IP |
|
建立 TCP 连接 | AT+CIPSTART="TCP","192.168.1.100",80 |
与服务器连接 |
|
发送数据 | AT+CIPSEND=10 |
返回 |
四.STM32 使用 USART2 发送 AT 指令
USART2 初始化函数
#include "stm32f10x.h"void USART2_Init(uint32_t baudrate) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 使能 GPIOA 和 USART2 时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);// PA2 -> TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);// PA3 -> RXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);// USART2 配置USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_Init(USART2, &USART_InitStructure);USART_Cmd(USART2, ENABLE);}
USART2 发送函数
void USART2_SendByte(uint8_t byte) {while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);USART_SendData(USART2, byte);}void USART2_SendString(const char *str) {while (*str) {USART2_SendByte(*str++);}}
发送基础 AT 指令测试
void Send_AT_Test(void) {USART2_SendString("AT\r\n"); // 测试模组是否在线}
示例:连接 Wi-Fi 网络(ESP8266)
void ESP8266_ConnectWiFi(const char *ssid, const char *pwd) {char cmd[100];USART2_SendString("AT+CWMODE=1\r\n");Delay_ms(1000);sprintf(cmd, "AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, pwd);USART2_SendString(cmd);Delay_ms(5000); // 等待连接}
代码解释
void ESP8266_ConnectWiFi(const char *ssid, const char *pwd)
说明:
该函数用于向 ESP8266 模组发送一系列 AT 指令,完成设置为 Station 模式并连接指定 Wi-Fi 热点的操作。
函数参数:
ssid: 目标 Wi-Fi 的 SSID。
pwd: 目标 Wi-Fi 的密码。
char cmd[100];
说明:
定义一个字符数组 cmd,用于存放格式化后的 AT 指令字符串,最大容量为 100 字节。
此缓冲区用于承接 sprintf 生成的字符串命令,随后通过串口发送。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)