AT 指令详解----彻底讲明白

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

正常返回 OK 表示模块响应正常

执行命令

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

返回 OK

模组复位

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

返回 >,再发 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 -> TX GPIO_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 -> RX GPIO_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 生成的字符串命令,随后通过串口发送。

相关数据

开户行大额行号是什么
det365官网登录

开户行大额行号是什么

⌛ 08-15 👁️ 7578
笔记本电脑回车键是哪个
365bet足球网站

笔记本电脑回车键是哪个

⌛ 08-14 👁️ 1092
世界最贵的手表?世界最贵的手表多少钱
365bet足球网站

世界最贵的手表?世界最贵的手表多少钱

⌛ 07-06 👁️ 7368
LOL瑞兹白须皮肤多少钱
beat365官网备用

LOL瑞兹白须皮肤多少钱

⌛ 07-13 👁️ 288
Win11软件自动安装怎么操作?如何实现一键部署?
det365官网登录

Win11软件自动安装怎么操作?如何实现一键部署?

⌛ 07-21 👁️ 3578