当前位置: 首页 > article >正文

AT 指令详解:基于 MCU 的通信控制实战指南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 生成的字符串命令,随后通过串口发送。

USART2_SendString("AT+CWMODE=1\r\n");

说明:

通过 USART2 向 ESP8266 模组发送指令:

AT+CWMODE=1

该指令的含义为:设置 ESP8266 的 Wi-Fi 模式为 Station 模式(即作为客户端连接现有 AP)。

1 表示 Station 模式;

\r\n 为命令终止符,ESP8266 的 AT 命令必须以 CR+LF 结尾。

Delay_ms(1000);

说明:

延时 1000 毫秒,确保模组有足够的时间处理 AT+CWMODE=1 命令,避免后续指令过早下发造成命令丢失或处理失败。

sprintf(cmd, "AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, pwd);

说明:

使用标准 C 库函数 sprintf 将 Wi-Fi SSID 和密码填充到 AT 命令字符串中,格式如下:

AT+CWJAP="SSID","PASSWORD"\r\n

此命令的作用是:命令 ESP8266 连接到指定的 Wi-Fi 网络。

%s 占位符用于插入字符串;

使用双引号将 SSID 和密码包裹是 AT 指令格式要求;

最后加上 \r\n 表示命令结束。

USART2_SendString(cmd);

说明:

将格式化好的 AT+CWJAP 指令通过 USART2 串口发送至 ESP8266。模组接收到后将尝试连接目标 Wi-Fi 热点。

Delay_ms(5000); // 等待连接

说明:

延时 5000 毫秒,为模组预留约 5 秒时间尝试连接 Wi-Fi。


示例:发送 TCP 数据包

void ESP8266_SendTCP(const char *ip, uint16_t port, const char *data) {    char cmd[100];    sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", ip, port);    USART2_SendString(cmd);    Delay_ms(2000);    sprintf(cmd, "AT+CIPSEND=%d\r\n", strlen(data));    USART2_SendString(cmd);    Delay_ms(500);    USART2_SendString(data);}

相关文章:

AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解

在 MCU(单片机)项目中,我们经常需要与各种通信模组(GSM、Wi-Fi、蓝牙等)交互。而这类模组通常都通过串口(UART)与 MCU 通信,控制它们的“语言”就是——AT 指令。 一、什么是 AT 指…...

虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系

虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系1.Default Pawn与Camera的关系1.1. Default Pawn 是什么?1.2. Default Pawn 的主要组件1.3. Default…...

C++多态的详细讲解

【本节目标】 1. 多态的概念 2. 多态的定义及实现 3. 抽象类 4. 多态的原理 5. 单继承和多继承关系中的虚函数表 前言 需要声明的,本博客中的代码及解释都是在 vs2013 下的 x86 程序中,涉及的指针都是 4bytes 。 如果要其他平台下,部…...

vue项目启动报错

vue项目启动报错 一、问题二、解决 一、问题 从vue2更换到vue3之后,需要将node进行版本升级,之后启动项目出现了下面的问题。 Uncaught Error: A route named “PageNotFound” has been added as a child of a route with the same name. Route names …...

项目删除了,为什么vscode中的git还是存在未提交记录,应该怎么删除掉

Git的本地仓库(.git文件夹)可能仍然存在,即使项目文件已删除VSCode可能缓存了之前的Git状态Git的索引未被正确清理 解决方法: 彻底删除仓库: 确保完全删除项目文件夹及其中的.git目录或者在终端中执行 rm -rf .git&am…...

免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了

1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…...

SecureCRT 使用指南:安装、设置与高效操作

目录 一、SecureCRT 简介 1.1 什么是 SecureCRT? 1.2 核心功能亮点 1.3 软件特点 二、SecureCRT 安装与激活 2.1 安装步骤(Windows 系统) 2.2 激活与破解(仅供学习参考) 三、基础配置与优化 3.1 界面与编码设…...

Tomcat多应用部署与静态资源路径问题全解指南

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...

web常见的攻击方式

web攻击(webAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码、修改网站权限、获取网站用户隐私等等,即使是代码在的很小的bug也有可能导致隐私信息被泄漏,站点安全就是保护站点不受未授权的…...

【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等

前言 又到熟悉的前言,接到个需求,要引入高德地图api,我就记录一下,要是有帮助记得点赞、收藏、关注😁。 后续有时间会慢慢完善一些文章:(画饼时间) map组件自定义气泡、mark标记点…...

java中如何优雅处理多租户系统的查询?

多租户系统通常是指一个应用服务多个客户(租户),每个租户的数据需要隔离,确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先,我应该明确多租户的实现方式。常见的多租户数据…...

排序算法之线性时间排序:计数排序,基数排序,桶排序详解

排序算法之线性时间排序:计数排序、基数排序、桶排序详解 前言一、计数排序(Counting Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析1.4 适用场景 二、基数排序(Radix Sort)2.1 算法原理2…...

Linux | mdadm 创建软 RAID

注:本文为 “Linux mdadm RAID” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Linux 下用 mdadm 创建软 RAID 以及避坑 喵ฅ・ﻌ・ฅ Oct 31, 2023 前言 linux 下组软 raid 用 mdadm 命令,multi…...

物联网工程毕业设计课题实践指南

1. 智能家居控制系统 1.1 基于ZigBee的智能家居控制 实践过程 硬件选型主控:CC2530/CC2531传感器:温湿度、光照、人体红外执行器:继电器、电机、LED灯系统架构 A[传感器层] --> B[ZigBee网络] B --> C[网关] C --> D[云平台] D --> E[手机APP] 开…...

CodeEdit:macOS上一款可以让Xcode退休的IDE

CodeEdit 是一款轻量级、原生构建的代码编辑器,完全免费且开源。它使用纯 swift 实现,而且专为 macOS 设计,旨在为开发者提供更高效、更可靠的编程环境,同时释放 Mac 的全部潜力。 Stars 数21,719Forks 数1,081 主要特点 macOS 原…...

LLaMA-Factory 微调 Qwen2-7B-Instruct

一、系统环境 使用的 autoDL 算力平台 1、下载基座模型 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com # (可选)配置 hf 国内镜像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat -…...

mac本地docker镜像上传指定虚拟机

在Mac本地将Docker镜像上传至指定虚拟机的完整步骤 1. 在Mac本地保存Docker镜像为文件 通过docker save命令将镜像打包为.tar文件,便于传输至虚拟机。 # 示例:保存名为"my_image"的镜像到当前目录 docker save -o my_image.tar my_image:ta…...

从代码学习深度学习 - 风格迁移 PyTorch版

文章目录 前言方法 (Methodology)阅读内容和风格图像预处理和后处理抽取图像特征定义损失函数内容损失 (Content Loss)风格损失 (Style Loss)全变分损失 (Total Variation Loss)总损失函数初始化合成图像训练模型总结前言 大家好!欢迎来到我们的深度学习代码学习系列。今天,…...

软件设计师考试《综合知识》设计模式之——工厂模式与抽象工厂模式考点分析

软件设计师考试《综合知识》工厂模式与抽象工厂模式考点分析 1. 分值占比与考察趋势(75分制) 年份题量分值占总分比例核心考点2023111.33%抽象工厂模式适用场景2022222.67%工厂方法 vs 抽象工厂区别2021111.33%工厂方法模式结构2020111.33%简单工厂模式…...

轻量级离线版二维码工具的技术分析与开发指南

摘要 本文介绍一款基于本地化运行的轻量级二维码处理工具。该工具采用标准QR Code规范实现,具备完整的生成与识别功能。通过实测验证其核心功能表现及适用场景。 主要功能模块分析 编码生成模块:支持文本/URL等多种数据类型转换;提供尺寸调…...

中级网络工程师知识点4

1.Portal认证:可以以网页的形式为用户提供身份认证和个性化信息服务。如台式电脑,笔记本,手机等智能终端 2.MAC认证:无法安装和使用802.1X客户端软件的终端,如打印机,门禁等非智能终端 3.CAPWAP隧道&…...

机器学习--特征工程具体案例

一、数据集介绍 sklearn库中的玩具数据集,葡萄酒数据集。在前两次发布的内容《机器学习基础中》有介绍。 1.1葡萄酒列标签名: wine.feature_names 结果: [alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phenols, flavanoi…...

LeetCode 每日一题 2025/5/12-2025/5/18

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/12 2094. 找出 3 位偶数5/13 3335. 字符串转换后的长度 I5/14 3337. 字符串转换后的长度 II5/15 2900. 最长相邻不相等子序列 I5/16 2901. 最长相邻不相等子序列 II5/17 …...

Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览

文章目录 前言SceneCaptureComponent2D实现步骤新建渲染目标新建材质UI控件激活3DPreview鼠标拖动旋转模型最后前言 我们在(电商展示/角色预览/装备查看)等应用场景中,经常会看到这种3D展示的页面。 即使用相机捕获一个3D的模型的视图,然后把这个视图显示在一个UI画布上,…...

电机控制杂谈(25)——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?

1. 背景 最近都在写论文回复信。有个审稿人问了一个问题——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?同时,为什么相电流五、七次谐波电流会在dq基波旋转坐标系构成六次谐波电流? 回答这个问题挺简单的,但在网…...

多模态大语言模型arxiv论文略读(七十八)

AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文标题:AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文作者:Zhen Xing, Qi Dai, Zejia Weng, Zuxuan W…...

项目中把webpack 打包改为vite 打包

项目痛点: 老vu e-cli1创建的项目,项目是ERP系统集成了很多很多管理,本地运行调试的时候,每次修改代码都需要等待3分钟左右的编译时间,严重影响开发效率. 解决方案: 采用vite构建项目工程 方案执行 第一步 使用vite脚手架构件一个项目,然后把build文件自定义的编译逻辑般到…...

【C语言】易错题 经典题型

出错原因&#xff1a;之前运行起来的可执行程序没有关闭 关闭即可 平均数&#xff08;average&#xff09; 输入3个整数&#xff0c;输出它们的平均值&#xff0c;保留3位小数。 #include <stdio.h> int main() {int a, b, c;scanf("%d %d %d", &a, &…...

哈夫曼编码:数据压缩的优雅艺术

哈夫曼编码&#xff1a;数据压缩的优雅艺术 在数字信息时代&#xff0c;数据压缩技术扮演着至关重要的角色。其中&#xff0c;哈夫曼编码&#xff08;Huffman Coding&#xff09;作为一种经典的无损压缩算法&#xff0c;以其简洁优雅的设计和卓越的压缩效率而闻名。本文将通过…...

说一说Node.js高性能开发中的I/O操作

众所周知&#xff0c;在软件开发的领域中&#xff0c;输入输出&#xff08;I/O&#xff09;操作是程序与外部世界交互的重要环节&#xff0c;比如从文件读取数据、向网络发送请求等。这段时间&#xff0c;也指导项目中一些项目的开发工作&#xff0c;发现在Node.js运用中&#…...