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”即可免费下载。