【硬件模块】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)https://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)
ESP-01S ESP-01S是由安信可科技开发的一款Wi-Fi模块。其核心处理器是ESP8266,该处理器在较小尺寸的封装中集成了业界领先的Tensilica L106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,并集成了Wi-Fi MAC/BB/RF/P…...

数据结构之单单单——链表
目录 一.链表 1)链表的概念 2)链表的结构 二.单链表的实现 三.链表的分类 1)单向或者双向 2)带头或不带头 3)循环或非循环 一.链表 1)链表的概念 链表(Linked List)是一种…...

【Linux笔记】 基础指令(二)
风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介: mv 命令是 move 的缩写,可以用来移动文件或者将文件改名,是 Linux 系统下常用的命令,经常用来备份文件或者目录 语法: mv [选项] 源文件或目录 目标文件或目录…...

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)
软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,…...

javacv实时解析pcm音频流
javacv实时解析pcm音频流 解析代码 try (ByteArrayInputStream inputStream new ByteArrayInputStream(bytes);){FFmpegFrameGrabber grabber new FFmpegFrameGrabber(inputStream);// PCM S16LE 格式grabber.setFormat("s16le");// 采样率grabber.setSampleRate(1…...

Matlab|考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
1主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》,针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析,然后进行分布式电源接入位置与极端天气的关联性分析&#…...

【Python基础】装饰器(3848字)
文章目录 [toc]闭包什么是装饰器装饰器示例不使用装饰器语法使用装饰器语法 装饰器传参带参数的装饰器类装饰器魔术方法\__call__()类装饰器示例带参数类装饰器property装饰器分页操作商品价格操作 个人主页:丷从心 系列专栏:Python基础 学习指南&…...

十、Redis内存回收策略和机制
1、Redis的内存回收 在Redis中可以设置key的过期时间,以期可以让Redis回收内存,循环使用。在Redis中有4个命令可以设置Key的过期时间。分别为 expire、pexpire、expireat、pexpireat。 1.1、expire expire key ttl:将key的过期时间设置为tt…...

Ansible --- playbook 脚本+inventory 主机清单
一 inventory 主机清单 Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或 多个主机组内。 如果是名称类似的主机,可以使用列表的方式标识各个主机。vim /etc/ansible/hosts[webservers]192.168.10.1…...

【hive】transform脚本
文档地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManualTransform 一、介绍二、实现1.脚本上传到本地2.脚本上传到hdfs 三、几个需要注意的点1.脚本名不要写全路径2.using后面语句中,带不带"python"的问题3.py脚本Shebang…...

5款可用于LLMs的爬虫工具/方案
5款可用于LLMs的爬虫工具/方案 Crawl4AI 功能: 提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。 用途: 适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。 特点: 高效数据提取,支持LLM格式,多U…...

投影、选择转SQL语言
使用以下两个表进行举例,第一个表为R表,第二个表为S表 R.AR.BR.C123456789 S.AS.BS.C101112131415161718 1、投影转SQL语言: 兀 A,B,C (R) 等价于select A,B,C from R 解释: 兀:相当于select (R):相当于from R…...

系统加固-自用
一、windows 1、概述 (1)、权限最高:system(系统账户),权限比administrator权限还高 (2)、常见操作系统安全漏洞类型 缓冲区溢出漏洞TCP/IP协议漏洞web应用安全漏洞开放端口的安全漏洞 2、系统安全加固方法 (1)、系统不显示上次登录的用户名 进入…...

Java面试题:阐述Java中的自动装箱与拆箱机制,以及使用它们时可能遇到的性能问题
在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java 5引入的特性,它们允许基本数据类型和对应的包装类之间的自动转换。 自动装箱 自动装箱是指将基本数据类型(如int、double等)…...

初识sql注入--手工注入
目录 可能使用的sql函数 入侵网站方式 1、文件上传漏洞 2、rce 3、sql注入 SQL注入 什么是sql注入 进行SQL注入 实验环境 开始实验(使用information_shema数据库) 1、进入靶场 2、报列数 下面来解释一下为什么要照上面SQL语句写 url编码 单…...

OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB 但是,并不是所有业务都接受修改源码,因为复杂系统里&…...

Java---类和对象第一节
目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…...

Zeller公式的应用:给定日期,确定周几
开篇 本篇文章依然是对于日期相关函数的实现。 问题概要 给定一个日期,返回为周几 思路分析 这个问题的思路只是对于Zeller公式的直接引用,不存在其他逻辑。公式详情可参考Zeller公式百科 代码实现 #include <stdio.h>// 根据Zeller公式计算 int …...

程序链接和运行 - 笔记
1 linux下程序a连接b.so后,运行时如何找到调用的函数 在Linux下,当程序A连接了动态链接库B(.so文件)后,在运行时,程序A会使用动态链接器(dynamic linker)来解析并加载动态链接库B中的函数。动态链接器会在系统中搜索动态链接库,并将它们加载到程序的地址空间中。 当…...

pyqt 按钮常用格式Qss设置
pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS(Cascading Style Sheets),但专门为 Qt 应用程序设计。使用 QSS&am…...

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步
文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结(陈硕老师的总结) 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段:数据准备和数据读写。 我们的网络IO…...

【C++】引用传递 常量引用
在C中,引用传递和常量引用是两个常用的概念,主要用于函数参数传递。它们提供了对变量或对象更有效率和更安全的访问方式。 引用传递(Pass by Reference) 引用传递意味着当你将变量作为参数传递给函数时,你实际上是传…...

Docker停止不了
报错信息 意思是,docker.socket可能也会把docker服务启动起来 解决 检查服务状态 systemctl status dockersystemctl is-enabled docker停止docker.socket systemctl stop docker.socket停止docker systemctl stop docker知识扩展 安装了docker后,…...

【网络】为什么TCP需要四次挥手?
在网络通信中,TCP(传输控制协议)是一种可靠的、面向连接的协议,它在数据传输过程中保证了数据的可靠性和顺序性。而TCP的连接建立过程只需要三次握手,但是TCP的挥手过程却需要四次挥手,这是为什么呢&#x…...

2024自动化测试市场分析
大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长: 随着技术的进步和企业对软件质量的要求日益提高,自动化测试在测试行…...

什么是机器视觉应用解决方案?
机器视觉应用解决方案通常指的是利用视觉系统自动检测、处理和分析图像的技术方案,以便执行各种工业或研究任务,如质量控制、自动检测、导航和识别等。在LabVIEW环境中,这些解决方案通常涉及到硬件和软件的紧密集成,以实现高效的数…...

使用 scrapyd 部署 scrapy
1.scrapyd 是什么? Scrapyd 是一个用于部署和运行 Scrapy 爬虫项目的服务器应用程序。它使得你可以通过 HTTP 命令来部署、管理和执行多个 Scrapy 爬虫,非常适合持续集成和生产环境中的爬虫部署。 2.安装scrapyd 并使用 2.1 安装 scrapyd F:\scrapydTes…...

Python计算器程序代码
from tkinter import * import random class App: def __init__(self, master): self.master master self.initwidgets() #表达式的值 self.expr None def initwidgets(self): #定义一个输入组件 self.show Label(relief SUNKEN, font (Courier New, 24), width 25, bg …...

图像分割各种算子算法-可直接使用(Canny、Roberts、Sobel)
Canny算子: import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg cv.imread("../test_1_1.png") edges cv.Canny(img, 100, 200)plt.subplot(121),plt.imshow(img,cmap gray) plt.title(Original Image), plt.xticks([]), …...

Spring Boot进阶 - 实现自动装配原理
Spring Boot的自动装配(Auto-Configuration)是其核心特性之一,它极大地简化了Spring应用的配置过程。自动装配的原理基于Spring框架的Configuration、ConditionalOnClass、ConditionalOnMissingBean等注解,以及Spring Boot提供的s…...