【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT)

2024-05-12 04:52

本文主要是介绍【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ESP-01S

ESP-01S是由安信可科技开发的一款Wi-Fi模块。其核心处理器是ESP8266,该处理器在较小尺寸的封装中集成了业界领先的Tensilica L106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,并集成了Wi-Fi MAC/BB/RF/PA/LNA。

ESP-01S具有多种特性和功能:

  • 尺寸小巧,设计紧凑,适用于空间有限的应用。
  • 支持标准的IEEE802.11 b/g/n协议和完整的TCP/IP协议栈,可以方便地与其他设备或网络进行通信。
  • 可以通过路由器连接到互联网,使手机或电脑能够实现对设备的远程控制(STA模式)。
  • 也可以作为热点,使其他设备能够连接到它(AP模式)。
  • 提供了多个可编程的GPIO引脚,可以用于控制外部设备,如传感器和执行器等。

在硬件连接方面,ESP-01S模块需要与主控制器(如Arduino、STM32等)进行连接,通过串行UART接口与主控制器进行数据传输。同时,该模块通常工作在3.3V的电压下,建议使用2节干电池或经过LDO转换后的3.3V进行供电,而不应使用USB转TTL的3.3V或5V进行供电。

在软件方面,初始情况下,ESP-01S通常预装了Espressif提供的AT指令固件,这意味着可以通过发送简单的AT指令来控制模块的Wi-Fi连接和数据传输。此外,用户还可以根据需要进行固件烧录和配置,以满足特定的应用需求。

总的来说,ESP-01S是一款功能强大、易于使用的Wi-Fi模块,适用于各种物联网和智能家居应用,为设备添加联网功能或构建独立的网络控制器提供了方便和灵活的选择。

以上介绍来自文心一言。

上面就是我买的ESP-01S,它的芯片是ESP8266,但是看得出来引脚少的可怜,不过我买的价格是六块。

也就是说如果我们的项目仅仅只是需要联网的话,那么选择ESP-01S的性价比会比直接整一块NodeMCU更高。

使用它的原理跟我们之前的蓝牙模块一样,都是AT指令,也就是通过串口来进行交互。

还有要注意的就是供电问题。

不能用USB转TTL供电,不能用ST-Link供电,不能用STM32供电。

建议用电池供电。

也可以像我一样买个底座。一般卖ESP-01S的店家都会有配件一起卖。

AT指令

ESP8266系列模组出厂自带AT固件,默认波特率为115200。虽然文档里没写其他配置,但是测试之后得出了其他的配置要求:八位数据位,一位停止位,无校验。也是最常见的配置了。

接下来我们直接就拿串口助手来进行AT指令的实验。

串口助手可以上网搜,随便一搜都有,也可以跟着我之前的文章动手敲一个。

200行C++代码写一个QT串口助手-CSDN博客文章浏览阅读1k次,点赞21次,收藏29次。今天分享一个用QT写的串口助手,关键代码会直接在文章的对应位置贴出,完整的工程文件(用的VS 2019)可以进入我的主页免费下载,也可以关注我的公众号“折途想要敲代码” 回复关键词“qt串口助手”免费获取。如果是使用QTCreator的小伙伴在项目配置完毕后可以通过复制我提供的工程文件中的.cpp和.h文件来达到同样的效果。要配置的就是在配置文件中加上串口对应的部分。使用VS的需要再拓展插件中找到模块管理再加上串口的模块。需要包含以下头文件。https://blog.csdn.net/m0_63235356/article/details/135283060?spm=1001.2014.3001.5501有个小问题就是我写这个串口助手的时候没有115200这个选项,因此需要改两个地方来支持115200的波特率。

也可以使用之前实验蓝牙模块的AT指令的时候用的串口助手,那个功能相对齐全一些,虽然是跟蓝牙模块配套的,但是在我们这里也能用。

在安信可的手册里只有很少一部分的AT指令。

提供的网站也打不开(用了魔法也打不开,看来是服务器停了)。

于是我直接杀到ESP-01S的老家——乐鑫,找到了完整版的文档(在线的,跟ESP-IDF的编程指南不一样,这个不需要魔法就可以直接访问)。

基础 AT 命令 — ESP-AT 用户指南 文档 (readthedocs-hosted.com)icon-default.png?t=N7T8https://espressif-docs.readthedocs-hosted.com/projects/esp-at/zh-cn/release-v2.2.0.0_esp8266/AT_Command_Set/Basic_AT_Commands.html

基础AT命令 

基础的AT指令有上面这些,我们挑几个常用的来介绍一下。

需要注意的是不是所有指令都是可以用的。

有一些是ESP32用的。

也有一些是需要额外烧录一些AT固件才能使用的(例如flash)。可以通过发送“指令+?”来判断一些具体的指令能不能用。

测试启动

AT

先来个简单的,直接通过串口发送“AT”,会得到响应“OK”,表示我们的ESP-01S在正常地工作着。

重启命令

AT+RST

发送重启命令,ESP-01S回复OK之后进行重启,重启之后会打印一堆调试信息,可以不用管。

进入休眠

AT+GSLP=<time>

发送命令进入休眠之后可以省电,这一点在嵌入式应用中还是很重要的。过了休眠时间之后又会自动启动,我们也可以通过拉低RST引脚强制唤醒。

我们的ESP-01S用的是8266,因此一次最多只能休眠3个小时,不过硬件层面解决不了的问题可以通过软件解决。

说是说按照毫秒为单位进行休眠,

但是我一旦发送这个命令之后ESP-01S就醒不来了,得手动拉低RST进行重启才行。

大家可以拿自己的模块进行测试,实在不行我们就当没有参数,发送这个命令就是进入睡眠,要拉低RST进行重启才行。

打开关闭回显

ATE0ATE1

回显是什么东西呢,比如说上面的“AT”,ESP-01S回复的应该的“OK”,但是我们收到的却是“AT”和一行空白和“OK”。其中“AT”就是回显,也就是我们发送的命令。

关闭回显之后我们就只会收到响应了。平时应用的时候可以关闭方便接收响应而不需要过滤。

不过后面的演示我们还是打开回显,这样方便对照AT命令。

修改串口配置

一共有两个修改命令。

一个是临时修改,也就是说重启之后又回到默认配置了。

AT+UART_CUR=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

另一个是直接修改falsh里的默认配置,重启之后也是修改过后的配置了。

AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

AT+UART_CUR?AT+UART_DEF?

查看当前配置的话就是上面两个命令不加参数,改为加个“?”。

一般不建议修改这个,都是用默认的。

但是以防大家看到这么多参数感到害怕,就小小的演示一下。

其实参数就是用逗号隔开就行。

恢复出厂设置

AT+RESTORE

如果配置了太多想改回去,但是又嫌麻烦的话,可以直接恢复出厂设置。

这个命令直接把flash中保存的参数都删掉。并且会重启ESP-01S。

WiFi命令

WiFi相关的命令有上面这么多,但是常用的就那几个,我们一样是挑着演示。 

查看/设置模式

AT+CWMODE?AT+CWMODE=<mode>[,<auto_connect>]

我们一般是要连接WiFI的,而不是释放热点。

因此我们常用的模式是1(Station)或者3(SoftAP+Station)。

并且默认情况下ESP-01S会帮助我们把连接过的WiFi记录在flash,之后如果还是Station模式就会自动连接。

连接WiFi

AT+CWJAP=[<ssid>],[<pwd>][,<bssid>][,<pci_en>][,<reconn_interval>][,<listen_interval>][,<scan_mode>][,<jap_timeout>][,<pmf>]

这个命令的参数很多,但是我们只需要配置上前两个,WiFi名和密码即可,剩下的都用默认值就行。

确实是可以连接上我的热点。

断开连接

AT+CWQAP

如果我们自动连接上了上次连接过的WiFi,但是这次我们想要换一个WiFi来连接,那么我们可以选择断开连接。

查询STA模式下的MAC/IP地址

AT+CIPSTAMAC?

上面这个是查询MAC地址的。

需要注意的是需要为STA模式,如果是AP模式则是另一个命令。

另一个就是需要先连上网。

下面这个是查询IP地址的。

AT+CIPSTA?

扫描当前可用WiFi

AT+CWLAP

这个命令实际上可以有参数,但是参数太长而且基本上用不上,这里就不贴出来了,感兴趣的小伙伴可以自己去文档里看。

TCP/IP命令

连上了网,我们自然是要通信的。

那么必然是离不开TCP/IP协议栈的。

建立TCP连接

// 单连接 (AT+CIPMUX=0):
AT+CIPSTART=<"type">,<"remote host">,<remote port>[,<keep alive>][,<"local IP">]// 多连接 (AT+CIPMUX=1):
AT+CIPSTART=<link ID>,<"type">,<"remote host">,<remote port>[,<keep alive>][,<"local IP">]

测试发现了一个奇怪的问题。

那就是我尝试连接网络调试助手的TCP服务器的时候死活连不上。

但是乐鑫提供的测试服务器却一下就连上去了。

我的电脑和ESP-01S连的都是我手机的热点,因此不是不在一个局域网的问题。

具体是什么原因我还没有找到,知道的小伙伴可以在评论区分享一下。

断开连接

AT+CIPCLOSE

如果是多连接模式,那么断开连接需要对应的ID号(0~4)。

如果是单连接模式那么不需要参数。

发送数据

// 单连接:(AT+CIPMUX=0)
AT+CIPSEND=<length>// 多连接:(AT+CIPMUX=1)
AT+CIPSEND=<link ID>,<length>// UDP 传输可指定对端主机和端口
AT+CIPSEND=[<link ID>,]<length>[,<"remote host">,<remote port>]

有上面三种发送情况,分别是TCP单连接,TCP多连接,UDP(UDP不需要连接)。

link ID是连接ID号(0~4)。

length是发送数据的长度。

当我们发送完命令,ESP-01S回复OK之后,我们就可以发送数据了。

当数据达到length这个长度之后就会开始发送数据。

查询/设置接收数据模式

AT+CIPRECVMODE?AT+CIPRECVMODE=<mode>

简单来说是分为两种,一种主动,一种被动。

主动模式下,TCP服务器发来数据,ESP-01S马上就会通过串口打印出来。

被动模式下则是需要我们手动去获取。

因为本地的网络调试助手连接不上,无法模拟出服务器发来信息,因此只能连接上乐鑫的测试服务器,等连接久了没有发送任何消息然后断开连接之后接收断开连接的通知。

手动获取接收数据

// 单连接:(AT+CIPMUX=0)
AT+CIPRECVDATA=<len>// 多连接:(AT+CIPMUX=1)
AT+CIPRECVDATA=<link_id>,<len>

查询MAC地址和IP地址

AT+CIFSR

这个命令可以直接获取到MAC地址和IP地址。比上面的命令方便一些。

MQTT命令

重头戏来啦,没想到吧,它居然支持MQTT。

但是问题在于我们需要去烧录MQTT的AT固件,你买来ESP-01S,卖家大概率是不会给你烧好的。

所以我们需要自己去烧录。

烧录软件和固件可以去安信可官网去找。

也可以关注我的公众号“折途想要敲代码”回复关键词“ESP01S”免费下载,我会把所有资料打包好,包括串口助手,网络调试助手。

配置MQTT

AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">

参数看着多,实际上很多是没得选的。比如第一个就选0,第二个就是1。倒数第二和第三都填0。

大家可以自行去找一些免费的公用的MQTT服务器,然后连接服务器用的ID一般是用自己的MAC地址,因为不能和别人重复。

另外还有一堆命令是单独配置MQTT的单项配置的,这个大家去文档里看就行,这边就不重复介绍了,用这一个总和的配置命令即可。

查询/连接MQTT服务器

AT+MQTTCONN?AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect>

配置完之后我们就可以连接了。

断开MQTT服务器连接

AT+MQTTCLEAN=<LinkID>

参数只能填0,因为目前只支持0。

发布信息

AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>AT+MQTTPUBRAW=<LinkID>,<"topic">,<length>,<qos>,<retain>

发布信息分为两种,第一种是发布字符串信息,第二种是发布二进制信息。

只是命令名字不一样而已,参数是一样的。

ESP-01S一个显著的缺点就是MQTT发布是数据长度受限,不过也是够我们正常使用的。

通过电脑端的MQTT客户端,发现可以正常接收到来自ESP-01S发布的信息。

订阅&取消订阅主题

AT+MQTTSUB=<LinkID>,<"topic">,<qos>AT+MQTTUNSUB=<LinkID>,<"topic">

订阅和取消订阅相比,除了命令名字不一样,订阅还多一个参数,那就是指定订阅的主题的等级,一般就是0或者1。

当我们收到来自订阅的主题的信息时,ESP-01S会通过串口打印出来。就不像之前TCP那样可以选择是主动接收还是被动接收了。

可以发现,我们的ESP-01S可以正常接收订阅的主题的信息。

收到数据后串口打印的数据格式为“+MQTTSUBRECV:0,主题名,数据长度,数据”

结尾

那么差不多到这边就结束啦。

相信通过上面这堆命令的介绍,各位小伙伴应该都可以使用ESP-01S了。

上面我是拿串口助手来进行实验的,大家在实际项目中只需要把单片机对ESP-01S进行串口通信即可实现一样的效果。

还有一点就是ESP-01S的供电问题,最好就是听官方文档的,拿俩干电池来供电。

另外文中涉及的所有资料,包括串口助手,MQTT固件,固件烧录软件,MQTT客户端软件等,我都已经打包好了。大家可以关注我的公众“折途想要敲代码”,回复关键词“ESP01S”即可免费下载。

这篇关于【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981655

相关文章

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-