【硬件模块】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进行重启才行。

打开关闭回显

ATE0

ATE1

回显是什么东西呢,比如说上面的“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”即可免费下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/615611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称&#x1f47a;子键特性 查看注册表&#x1f47a;使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

Ubuntu磁盘剩余空间不足,空间异常

近日发现用了3年的Ubuntu系统笔记本磁盘空间极度告急&#xff0c;上网搜了一下都是讲解如何扩容、如何重新挂载空间&#xff0c;但是博主发现/home目录明明分配了200G的空间&#xff0c;但是只剩下6G可用&#xff0c;查询所有的文件夹发现&#xff0c;所有文件加起来已使用50G左…

串口数据的发送(单词的发送)and UART原理协议---第九天

1.在中断函数中&#xff0c;定义一个数组给SBUF&#xff0c; i数组的偏移以便输入单词&#xff0c;&#xff1b; 用strstr&#xff08;&#xff09;函数来比较cmd输入的单词里面的 "en" , " se ";亮灯后i回来原来的位置0&#xff0c;清空cmd, UART 原理…

二进制转为HEX数组小工具

在使用RA8889时&#xff0c;JPG的解码只能从FLASH的DMA通道获取&#xff0c;那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办&#xff1f; RA8889支持JPG图片硬解码&#xff0c;但数据流是从FLASH进行DMA读取的&#xff0c;然后再进行解码。因此这种情况下&#xff…

01.Net基础知识

.Net的用途 Web、移动、云、桌面、游戏开发、物联网 &#xff08;IDE&#xff1a;集成开发环境&#xff09; .Net学习资源 Microsoft Learn、GitHub、G码云&#xff08;Gitee&#xff09; Visual Studio初步使用 1&#xff09;可创建的项目种类&#xff08;主要学习以下四…

从loss角度理解LLM涌现能力

如今的很多研究都表明小模型也能出现涌现能力&#xff0c;本文的作者团队通过大量实验发现模型的涌现能力与模型大小、训练计算量无关&#xff0c;只与预训练loss相关。 作者团队惊奇地发现&#xff0c;不管任何下游任务&#xff0c;不管模型大小&#xff0c;模型出现涌现能力…

【C语言题解】输入n(1~9),再输入n个长度不超过50的字符串,给这n个字符串排序并输出它们

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f308;感谢大家的阅读、点赞、收藏和关注 解题思路&#xff1a; 首先&#xff1a;使用一个二维字符数组来存储输入的字符串。由于n的范围是1到9&#xff0c;我们可以直接定义一…

容器中的单例集合(二)——List接口的实现类之ArrayList

根据接口的定义我们知道&#xff0c;接口的作用是定义标准或者规定&#xff0c;要满足接口中的要求就需要定义一个实现类来实现接口中定义的标准。List接口的常用实现类有ArrayList、Vector、Stack以及LinkedList。其中ArrayList类是较为基础的一个实现类&#xff0c;理解Array…

xilinx xdma drive 传输8MB以上数据受限的问题

当传输超过8 MB数据时报错error code1359&#xff0c; #define XDMA_MAX_TRANSFER_SIZE (8UL * 1024UL * 1024UL) 可以修改成&#xff1a; #define XDMA_MAX_TRANSFER_SIZE (80UL * 1024UL * 1024UL) VS2019 WDK环境的搭建 先准备好VS WDK的驱动开发环境。需要下载VS、SD…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测&#xff0c;2024.4.24&#xff0c;华为机试 &#x1f3e9;题目一描述&#xff1a;输入格式输出格式样例1样例2样例3数据范围解题思路一&#xff1a;dfs解题思路二&#xff1a;直接二分查找哇&#xff01;解题思路三&am…

XMind 2023 v23.05.2660软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XMind 2023 v23.05.2660被视为顶尖思维导图软件&#xff0c;其界面简洁清爽&#xff0c;功能布局直观简单&#xff0c;摒弃繁复不实。尽管体积小巧&a…

OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

实质问题是报错&#xff1a;caffe2_detectron_ops.dll“ or one of its dependencies 还需要安装一个包&#xff1a; pip install intel-openmp 安装之后顺利测试通过。

怎么把图片改成1920*1080的?一键修改图片尺寸小技巧

一张合适尺寸的图片&#xff0c;不仅可以适应不同设备的屏幕尺寸&#xff0c;保证视觉效果的舒适和协调&#xff0c;还可以有效降低图片的存储空间占用&#xff0c;比如我们有时候想要把一张图片改成1920*1080尺寸的&#xff0c;该如何修改图片尺寸呢&#xff1f;其实可以使用图…

一文弄懂Pytest——fixture用法

&#x1f49f;&#x1f49f;前言 ​ 友友们大家好&#xff0c;我是你们的小王同学&#x1f617;&#x1f617; 今天给大家打来的是 一文弄懂Pytest——fixture用法 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞&#x1f44d; 收藏⭐ 评论&#x1f4c4; 小…

[GESP样题 四级] 填幻方和幸运数

B3940 [GESP样题 四级] 填幻方 题目 在一个NN 的正方形网格中&#xff0c;每个格子分别填上从 1 到 NN 的正整数&#xff0c;使得正方形中任一行、任一列及对角线的几个数之和都相等&#xff0c;则这种正方形图案就称为“幻方”&#xff08;输出样例中展示了一个33 的幻方&am…

探索国外静态住宅代理:保护网络安全与隐私的利器

随着互联网的日益发展&#xff0c;网络安全和隐私保护成为越来越多用户关注的焦点。在这个信息爆炸的时代&#xff0c;如何确保网络活动的匿名性和安全性成为了我们必须面对的问题。国外静态住宅代理作为一种新兴的网络技术&#xff0c;为我们提供了有效的解决方案。 &#xf…

量子波函数白话解释

关键词&#xff1a;Quantum Wave Function 文章目录 一、说明二、什么是波函数&#xff1f;三 量子波的可视化四、量子波的概率解释 一、说明 在量子力学中&#xff0c;粒子是我们只有在测量它们时才能看到的东西。其中运动模式由满足薛定谔方程的波函数描述。波函数并非量子…

PTP 对时协议 IEEE1588 网络对时 计算原理

前言 本文将阐述 PTP 对时协议的原理&#xff0c;slave 节点如何根据获取的时间来纠正和更新自己的时间。 协议概述 整个通讯过程中会发送 4 种类型的数据包&#xff0c;用来支撑对时。下面是 4 个包的解释 Sync message: 由 master 发送&#xff0c;发起对时事务, slave 接…

Chromium编译指南2024 Windows11篇-Git工具准备(四)

前言 在《Chromium编译指南2024&#xff08;三&#xff09;》中&#xff0c;我们已经完成了对 Chromium 编译环境的其他相关环境变量的设置&#xff0c; 接下来&#xff0c;我们将进一步探讨如何初始化配置 Git&#xff0c;为获取 Chromium 源代码做好准备。 1. 配置Git 用户…