LV16-31-ESP8266模块-02-AT指令

本文主要是STM32开发——ESP8266模块 AT指令 的一些基础知识相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
  • 通用
分类 网址说明
官方网站https://www.arm.com/ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.st.com/content/st_com/zh.htmlST官方网站,在这里我们可以找到STM32的相关文档
https://www.stmcu.com.cn/意法半导体ST中文官方网站,在这里我们可以找到STM32的相关中文参考文档
http://elm-chan.org/fsw/ff/00index_e.htmlFatFs文件系统官网
教程书籍《ARM Cortex-M3权威指南》ARM公司专家Joseph Yiu(姚文祥)的力作,中文翻译是NXP的宋岩
《ARM Cortex-M0权威指南》
《ARM Cortex-M3与Cortex-M4权威指南》
开发论坛http://47.111.11.73/forum.php开源电子网,正点原子的资料下载及问题讨论论坛
https://www.firebbs.cn/forum.php国内Kinetis开发板-野火/秉火(刘火良)主持的论坛,现也做STM32和i.MX RT
https://www.amobbs.com/index.php阿莫(莫进明)主持的论坛,号称国内最早最火的电子论坛,以交流Atmel AVR系列单片机起家,现已拓展到嵌入式全平台,其STM32系列帖子有70W+。
http://download.100ask.net/index.html韦东山嵌入式资料中心,有些STM32和linux的相关资料也可以来这里找。
博客参考http://www.openedv.com/开源网-原子哥个人博客
http://blog.chinaaet.com/jihceng0622博主是原Freescale现NXP的现场应用工程师
cortex-m-resources这其实并不算是一个博客,这是ARM公司专家Joseph Yiu收集整理的所有对开发者有用的官方Cortex-M资料链接(也包含极少数外部资源链接)
点击查看相关文件下载
分类 网址 说明
STM32相关 STM32F103xx英文数据手册 STM32F103xC/D/E系列的英文数据手册
STM32F103xx中文数据手册 STM32F103xC/D/E系列的中文数据手册
STM32F10xxx英文参考手册(RM0008) STM32F10xxx系列的英文参考手册
STM32F10xxx中文参考手册(RM0008) STM32F10xxx系列的中文参考手册
Arm Cortex-M3 处理器技术参考手册-英文版 Cortex-M3技术参考手册-英文版
STM32F10xxx Cortex-M3编程手册-英文版(PM0056) STM32F10xxx/20xxx/21xxx/L1xxxx系列Cortex-M3编程手册-英文版
STM32 HAL库开发实战 野火STM32开发教程在线文档——基于F103系列开发板
STM32库开发实战指南 野火STM32开发教程在线文档——基于野火霸道开发板
SD卡相关 SD卡相关资料——最新版本 有关SD卡的一些资料可以从这里下载
SD卡相关资料——历史版本 有关SD卡的一些历史版本资料可以从这里下载,比如后边看的SD卡2.0协议
SD 2.0 协议标准完整版 这是一篇关于SD卡2.0协议的中文文档,还是比较有参考价值的,可以一看
ESP32 SD卡相关资料——最新版本 这个⼿册介绍了 ESP8266EX 的产品参数。
ESP8266 系列入门教程 一个入门手册(安信可官网)
ESP8266 AT 指令集 这是一篇关于ESSP8266的AT指令集的文档(安信可官网)
ESP8266 AT 指令使用实例 这是一篇关于ESSP8266的AT指令集使用实例的文档(安信可官网)
ESP-AT 用户指南 本指南详细介绍 ESP-AT 是什么、如何连接硬件、以及如何下载和烧录 AT 固件(乐鑫官网)
乐鑫官方技术文档 这里是乐鑫官方技术文档的入口,文档都可以来这里找(乐鑫官网)

一、ESSP-AT是什么?

ESP-AT 是乐鑫开发的可直接用于量产的物联网应用固件,旨在降低客户开发成本,快速形成产品。通过 ESP-AT 指令,您可以快速加入无线网络、连接云平台、实现数据通信以及远程控制等功能,真正的通过无线通讯实现万物互联。

ESP-AT 是基于 ESP-IDF 或 ESP8266_RTOS_SDK 实现的软件工程。它使 ESP 模组作为从机,MCU 作为主机。MCU 发送 AT 命令给 ESP 模组,控制 ESP 模组执行不同的操作,并接收 ESP 模组返回的 AT 响应。ESP-AT 提供了大量功能不同的 AT 命令,如 Wi-Fi 命令、TCP/IP 命令、Bluetooth LE 命令、Bluetooth 命令、MQTT 命令、HTTP 命令、Ethernet 命令等。

ESP-AT 概览

AT 命令以 “AT” 开始,代表 Attention,以新的一行 (CR LF) 为结尾。输入的每条命令都会返回 OKERROR 的响应,表示当前命令的最终执行结果。注意,所有 AT 命令均为串行执行,每次只能执行一条命令。因此,在使用 AT 命令时,应等待上一条命令执行完毕后,再发送下一条命令。如果上一条命令未执行完毕,又发送了新的命令,则会返回 busy p... 提示。更多有关 AT 命令的信息可参见 AT 命令集

默认配置下,MCU 通过 UART 连接至 ESP 模组、发送 AT 命令以及接收 AT 响应。但是,您也可以根据实际使用情况修改程序,使用其他的通信接口,例如 SDIO。

二、AT 指令格式  

AT 指令可以细分为四种类型,如下表所示:

image-20240108223813086

注意:

(1)不是每条 AT 指令都具有以上四种指令格式的命令。

(2)中括号([ ])内的参数为缺省值,不必填写或者可能不显示。

(3)使用双引号表示字符串数据,例如: AT+CWJAP=”ALIENTEK”,”15902020353”。

(4)ATK-MW8266D 模块的 UART 通讯波特率为 115200bps。

(5)AT 指令必须大写,且每条指令都需以回车换行符结尾\r\n

三、AT指令说明

模块默认是 AT 指令状态,模块波特率: 115200(8 位数据位, 1 位停止位),这里我们看一下几个用户常用指令,详细的指令集可以参《ESP8266_AT 指令集 V2.1.0.pdf》这个文档。 我们其实可以直接去乐鑫或者安信可官网查阅,例如乐鑫官网的AT 命令集

1. 基础AT指令  

  • AT:测试 AT 启动
  • AT+RST:重启模块
  • AT+GMR:查看版本信息
  • AT+CMD:查询当前固件支持的所有命令及命令类型
  • ATE:开启或关闭 AT 回显功能
  • AT+RESTORE:恢复出厂设置
  • AT+UART_CUR:设置 UART 当前临时配置,不保存到 flash
  • AT+UART_DEF:设置 UART 默认配置, 保存到 flash
  • AT+SYSSTORE:设置参数存储模式
  • AT+SYSREG:读写寄存器

2. WiFi功能AT指令

3. TCP/IP相关AT指令

四、常用AT指令实例

1. AP 模式下作 TCP 服务器

发送指令 作用
AT+CWMODE=2 设置为 AP 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”, ”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK
AT+CIPMUX=1 开启多连接
AT+CIPSERVER=1,8086 开启 SERVER 模式,端口号为 8086
AT+CIPSEND=0,25 向 ID0 发送 25 字节数据包

2. AP 模式下作 TCP 客户端

发送指令 作用
AT+CWMODE=2 设置为 AP 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”,”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、通道为 1、加密方式为 WPA_WPA2_PSK
AT+CIPMUX=0 开启单连接
AT+CIPSTART=”TCP”, ”192.168.4.XXX”,8086 建立 TCP 连接到 192.168.4.XXX:8086
AT+CIPMODE=1 开启透传模式(仅单连接 Client 时支持)
AT+CIPSEND 开始发送数据

3. AP 模式下 UDP 连接

发送指令 作用
AT+CWMODE=2 设置为 AP 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”, ”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK
AT+CIPMUX=0 开启单连接
AT+CIPSTART=”UDP”, “192.168.4.XXX”,8086 建立 UDP 连接到 192.168.4.XXX:8086
AT+CIPSEND=25 向目标 UDP 发送 25 字节数据

4. STA 模式下作 TCP 服务器

发送指令 作用
AT+CWMODE=1 设置为 STA 模式
AT+RST 重启生效
AT+CWJAP=”ATK-MW8266D”, ”12345678” 加入 WiFi 热点。 SSID: ATK-MW8266D、密码: 12345678
AT+CIPMUX=1 开启多连接
AT+CIPSERVER=1,8086 开启 SERVER 模式,端口号为 8086
AT+CIPSEND=0,25 向 ID0 发送 25 字节数据包

5. STA 模式下作 TCP 客户端

发送指令 作用
AT+CWMODE=1 设置为 STA 模式
AT+RST 重启生效
AT+CWJAP=”ATK-MW8266D”, ”12345678” 加入 WiFi 热点。 SSID: ATK-MW8266D、密码: 12345678
AT+CIPMUX=0 开启单连接
AT+CIPSTART=”TCP”, ”192.168.4.XXX”,8086 建立 TCP 连接到 192.168.4.XXX:8086
AT+CIPMODE=1 开启透传模式(仅单连接 Client 时支持)
AT+CIPSEND 开始发送数据

6. STA 模式下 UDP 连接

发送指令 作用
AT+CWMODE=1 设置为 STA 模式
AT+RST 重启生效
AT+CWJAP=”ATK-MW8266D”, ”12345678” 加入 WiFi 热点。 SSID: ATK-MW8266D、密码: 12345678
AT+CIPMUX=0 开启单连接
AT+CIPSTART=”UDP”, “192.168.4.XXX”,8086 建立 UDP 连接到 192.168.4.XXX:8086
AT+CIPSEND=25 向目标 UDP 发送 25 字节数据

7. AP+STA 模式下作 TCP 服务器

发送指令 作用
AT+CWMODE=3 设置为 AP+STA 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”, ”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK
AT+CWJAP=”ALIENTEK”, ”12345678” 加入 WiFi 热点。 SSID: ALIENTEK、密码: 12345678
AT+CIPMUX=1 开启多连接
AT+CIPSERVER=1,8086 开启 SERVER 模式,端口号为 8086
AT+CIPSTO=1200 设置服务器超时时间 1200s
AT+CIPSEND=0,25 向 ID0 发送数据
AT+CIPSEND=1,25 向 ID1 发送数据

8. AP+STA 模式下作 TCP 客户端

发送指令 作用
AT+CWMODE=3 设置为 AP+STA 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”, ”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK
AT+CWJAP=”ALIENTEK”, ”12345678” 加入 WiFi 热点。 SSID: ALIENTEK、密码: 12345678
AT+CIPMUX=1 开启多连接
AT+CIPSTART=0,”TCP”, ”192.168.4.XXX”,8086 建立 TCP 连接到 192.168.4.XXX:8086
AT+CIPSEND=0,25 向 ID0 发送数据
AT+CIPSEND=1,25 向 ID1 发送数据

9. AP+STA 模式下 UDP 连接

发送指令 作用
AT+CWMODE=3 设置为 AP+STA 模式
AT+RST 重启生效
AT+CWSAP=”ATK-MW8266D”, ”12345678”,1,4 设置 AP 参数。 SSID 为 ATK-MW8266D、密码为 12345678、 通道为 1、加密方式为 WPA_WPA2_PSK
AT+CWJAP=”ALIENTEK”,”12345678” 加入 WiFi 热点。 SSID: ALIENTEK、密码: 12345678
AT+CIPMUX=1 开启多连接
AT+CIPSERVER=1,8086 开启服务器,端口号 8086
AT+CIPSTO=1200 设置服务器超时时间 1200s
AT+CIPSTART=0,”UDP”, “192.168.1.XXX”,8086 STA 作为 ID0 连接到 192.168.1.XXX:8086
AT+CIPSEND=0,25 向 ID0 发送数据
AT+CIPSEND=1,25 向 ID1 发送数据

五、测试实验

1. 使用前准备

1.1 所需工具

(1)ATK-ESP8266 WIFI 模块一个

(2)USB 转 TTL 模块一个(战舰板板载USB 转 TTL)

(3)电脑安装 CH340 驱动(USB 转 TTL 模块必须)

(4)网络调试助手网络调试助手软件(ATK-XNET) 版本:v1.8 — 正点原子资料下载中心 1.0.0 文档,在windows下使用的时候发现无论如何模块都连接不上服务器,所以又找了一个Linux下的,说是在虚拟机中可以正常建立服务器并可以连接mNetAssist(hecanbo/mNetAssist: mNetAssist - A UDP/TCP Assistant (github.com)),但是吧,我试了,还是不行,后来觉得没必要在这里浪费时间,写个笔记就算了,后面再说。

(5)串口调试助手:串口调试助手软件(ATK-XCOM) 版本:v3.0 — 正点原子资料下载中心 1.0.0 文档

1.2 硬件连接

image-20240109225730589

2. TCP Client 透传模式测试

2.1 助手配置

  • 网络助手

我们下载上面提到的网络调试助手,并且创建一个server,如下图,注意这里的IP一般都是自动识别:

image-20240109235230086
  • 串口调试助手

主要是配置一下波特率:

image-20240111075813405

2.2 配置WiFi模块

我们在串口调试助手依次输入以下命令:

步骤 命令 响应
(1)设置 WIFI 模式 AT+CWMODE=1 //设置为 STA 模式 OK
(2)重启生效 AT+RST OK
(3)连接路由器 AT+CWJAP=”ALIENTEK”,”15902020353” //连接对象路由器的 ssid 和 password OK
(4)查询模块 IP AT+CIFSR 192.168.1.xxx
(5)模块连接到 server AT+CIPSTART="TCP","192.168.19.1",8080 CONNECT
OK
(6)开启透传模式 AT+CIPMODE=1 OK
(7) 开始透传 AT+CIPSEND OK
(8)退出透传模式 在透传模式中,若识别到单独的一包数据“ +++”,则退出透传模式。

2.3 实验效果

这里的图和实际效果是直接用的正点原子文档里的,因为我自己在尝试的时候发现网络调试助手识别到的本机IP地址和WiFi模块连接后获取的IP并不在一个网段,即便我改了模块的IP,或者说用自己手机开热点,都无法连接到网络助手的服务器,也没找到解决办法,所以这里就看教程大概了解一下好啦。做完上面的前7个步骤,理论上我们就可以成功连接到服务器了:

image-20240109235245573

连接上服务器后,就可以相互发数据了,如下图 :

image-20240109235607278

在透传模式中,若识别到单独的一包数据“ +++”,则退出透传模式。

image-20240109235704161

注意:如果需要模块上电自动连接到某个 IP 并进入透传模式,这个时候需要在模块连接到路由器wifi热点之后,发送AT+SAVETRANSLINK=1,”192.168.1.xxx”,8086,”TCP”, 设置模块为上电自动连接到 TCP Server:192.168.1.xxx , 8086 , 并进入透传模式。当发送AT+SAVETRANSLINK 指令后,模块断电再上电会自动进入透传模式,此时发送 AT 指令模块是不会回复的(即使透传的服务器不存在,模块也会进入透传模式的)。模块要恢复到 AT 指令模式需要先退出透传模式,然后勾选发送新行,再发送“ AT+SAVETRANSLINK=0”,这样上电模块就不会再上电进入透传了。

3. 多连接server

3.1 配置WiFi模块

前 ATK_ESP8266 模块作为 server,需建立多连接,即可以连接多个 client以下为 ATK_ESP8266 作为 STA 模式建立 TCP SERVER 的设置

步骤 命令 响应
(1)设置 wifi 模式 AT+CWMODE=1 //设置模块为 STA 模式 OK
(2)重启生效 AT+RST OK
(3)连接路由器 AT+CWJAP=”ALIENTEK”,”15902020353” //连接对象路由器的 ssid 和 password OK
(4)启动多链接 AT+CIPMUX=1 OK
(5)建立 server AT+CIPSERVER=1,8080 //设置端口号为 8080 OK
(6)获取模块 IP 地址 AT+CIFSR OK
IP // IP地址
MAC // MAC地址
(7)电脑或者手机连接到 server,电脑或手机作为 client
(8)模块向指定通道发送数据 AT+CIPSEND=id,size
id:client 通道号
size:要发送的数据长度
OK
>
(9)接收数据 +IPD,id,size: //id:收到数据的 client 通道号, size:接收到的数据长度 OK

3.2 助手配置

image-20240111075135425

3.3 实验效果

我们做第(7)步的时候,模块配置为 TCP Server ,客户端连接过来如下图所示:

image-20240111075222372

第(9)步接收数据的时候如下图所示:

image-20240111075716960

4. 连接原子云

原子云即原子云服务器,是正点原子推出的互联网云服务平台,它可以实现数据的远程监控、转发和管理等功能。原子云域名为: cloud.alientek.com,端口号为: 59666。

4.1 创建设备

在创建设备之前, 需登入原子云的网址原子云-用户登录 (alientek.com) 创建并登入账号。创建和登入账号的过程比较简单, 这里不做过多介绍,登入原子云后,如下图所示:

image-20240112190444885

建议第一次使用原子云的用户,点击原子云首页左下角的“帮助文档”,快速了解原子云服务器。在原子云平台创建设备,首先点击原子云首页左侧导航栏中的“设备管理”,随后在出现的页面中,点击“新增设备”,如下图所示:

image-20240112190511186

接着在弹出的窗口中,根据 ATK-MW8266D 模块的设备类型选择“ESP8266”,随后根据个人喜好填入“设备名称”和“密码”(这里的密码在就是 ATK-MW8266D 模块通过 AT指令连接原子云时需要的密码),如下图所示:

image-20240112190526692

最后,点击“新增”按钮, 即可创建设备,设备创建好后,如下图所示:

image-20240112190541015

创建好设备后, 系统会自动为设备生成编号, 这个设备编号就是 ATK-MW8266D 模块使用 AT 指令连接原子云时需要的设备 ID。

4.2 连接到原子云

建好设备后,就能后根据设备的编号和密码并通过 AT 指令操作 ATK-MW8266D 模块连接原子云了。 具体的 AT 指令如下所示:

1
2
3
4
5
6
# 使能 ATK-MW8266D 模块的 STA 模式,以连接路由器的 AP
AT+CWMODE=1
# 连接路由器的 AP,以访问互联网
AT+CWJAP=”ALIENTEK-YF”,”15902020353”
# 连接原子云服务器
AT+ATKCLDSTA=”63218710518682355498”,”12345678”

实际在串口调试助手中的操作,如下图所示:

image-20240112190715225

当串口调试助手显示“CLOUD CONNECTED”后,说明已成功连接上原子云服务器,此时在原子云的设备管理界面,也能够看到对应的设备显示为“已连接”的连接状态,如下图所示:

image-20240112190733184

当 ATK-MW8266D 模块成功连接原子云服务器后,即进入了透传模式,此时就能够在原子云的对应设备的“消息收发”操作界面通过原子云服务器发送消息至 ATK-MW8266D模块,同时,也能后在该界面下,查看到接收自 ATK-MW8266D 模块的消息,如下图所示:

image-20240112190852071