-
一、ESP8266 01简介
ESP-01 WiFi 模块是一款低功耗高性价比的嵌入式无线网络控制模块。 该模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ B/RF/PA/LNA,板载天线。 该模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。
图1-1 ESP8266-01模块
(1) 模块供电电压为直流3.0~3.6V(典型3.3V)、供电电流大于500mA;
(2) Wi-Fi模块IO最大输出电流为12mA;
(3) Wi-Fi模块NRST管脚低电平有效;EN使能管脚高电平有效;
(4) Wi-Fi模块进入升级模式:GPIO0处于低电平,然后模块复位上电;Wi-Fi模块进入正常工作模式: GPIO0处于高电平,模块复位上电;
(5)Wi-Fi模块的RXD接外部MCU的TXD,Wi-Fi模块的TXD接外部MCU的RXD。
-
二、使用AT指令组网
联网的方式有很多种,例如通过网线联网、WIFI 路由器联网、GPRS 联网(SIM 流量业务) 。这常用的三种方式只不过是硬件层不同而已,其内置的都是 TCP/IP 网络协议。ESP8266作为WIFI射频模块支持SDK开发和AT指令开发。两种开发各有优势,其中采用AT指令开发开发周期短,但相应的成本较高,乐鑫官方的 AT 指令有将近 100 条,但经常使用的就十几条而已,采用这几条指令,我们可以通过TCP实现模块间的组网。
在组网之前先简单熟悉下AT指令的格式以及组网方式和拓扑:
- AT指令格式
类型 | 指令格式 | 描述 |
---|---|---|
测试指令 | AT+<X>=? | 该命令用于查询设置命令的参数取值及其范围 |
查询指令 | AT+<X>? | 该命令用于返回参数的当前值 |
设置命令 | AT+<X>=<X.....> | 该命令用于设置用户自定义的参数值 |
执行命令 | AT+<X> | 该命令用于执行模块内部定义的不可变更的功能 |
(注:<X>、<X....>为命令关键字和参数)
2.组网方式和拓扑
ESP8266 支持Station 模式 、SoftAP 模式、SoftAP + Station 共存模式三种。
模式 | 拓扑 | 描述 |
---|---|---|
Station模式(客户端) | ![]() | ESP8266 作为 Station,通过路由器(AP)连入 internet ,可向云端服务器上传、下载数据。用户可随时使用移动终端(手机、笔记本等),通过云端监控 ESP8266 模块的状况,向 ESP8266 模块发送控制指令。 |
SoftAP 模式(服务器、热点) | ![]() | ESP8266 作为 SoftAP,手机、电脑、用户设备、其他 ESP8266 station 接口等均可以作为 Station 连入ESP8266,组建成一个局域网 |
Station+SoftAP模式(混合模式) | ![]() | ESP8266 支持 softAP+station 共存的模式,用户设备、手机等可以作为station 连入 ESP8266 的 softAP 接口,同时,可以控制 ESP8266 的 station 接口通过路由器(AP)连入 internet |
好了,熟悉了一些基本概念之后我们进入正题,组网!!
- 建立AP(服务器、热点)
先将ESP8266与CH340按照图2-1的方式进行连线,然后打开串口调试助手,波特率选择115200(ESP8266默认波特率是115200),发送AT测试模块是否正常,若模块返回AT OK则说明模块正常。
图2-1 ESP8266接线
①发送 AT+CWMODE=2 ,设置为SoftAP 模式(服务器、热点)。
②发送 AT+CWSAP="ESP8266-AP","123456789",5,3 ,设置AP热点属性。
具体含义:"ESP8266-AP"为热点名;“123456789”为密码;5指通道为5(1~14任选);3指加密方式为WPA2-PSK。这时我们重新插拔下ESP8266的电源线,在电脑的WIFI连接设置里便可以找到我们建立的热点了。
图2-2PC端 WIFI热点查看
③发送 AT+CIPMUX=1 ,设置为多连接模式。
④发送 AT+CIPSERVER=1,8080 ,设置为服务器,其中1为设置为服务器,8080为端口号。
⑤发送 AT+CIFSR ,查询本机IP地址。串口助手返回下列数据
AT+CIFSR
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"96:b9:7e:14:39:63"
OK
OK!到这里我们的AP就建立成功了。接下来我们检验一下成果,通过手机与ESP8266通信。
①打开手机WIF,连接名称为"ESP8266-AP"的热点,输入密码“123456789”连接。
②打开手机APP:“TCP连接”,进入该软件点击右上角连接,点击其他主机(APP用三个点表示了),之后输入刚刚查询到的地址,即"192.168.4.1",端口“8080”,点击连接串口助手返回下列数据即连接成功。其中0代表介入的序号,当有其他设备接入时顺延。
0,CONNECT
③在聊天页面通过键盘输入文本,点击发送,在电脑的串口助手上即可看到手机端发送的内容了,效果如下。其中0代表是设备0发送的数据,13代表接受到的数据长度为13个字节(因为这里我们设置的是非透明传输所以会有+IPD,< len >的前缀)。
+IPD,0,13:The send text
④通过串口助手让ESP8266发送数据,发送AT指令 AT+CIPSEND=0,5 ,该指令首先指定要发送的设备为0设备,发送的数据长度为6个字节内容为“I send”。APP聊天界面即可收到串口助手发送的数据了。
2.建立Station模式(客户端)
另找一块ESP8266与CH340连接,再打开一个串口调试助手窗口。
①发送 AT+CWMODE=1 ,设置为Station模式(客户端)。
②发送 AT+CWJAP="ESP8266-AP","123456789" ,连接刚刚建立的AP。
③发送 AT+CIPSTA? ,查询路AP分配给 ESP8266的局域网IP以及网关地址和子网掩码。
AT+CIPSTA?
+CIPSTA:ip:"192.168.4.3"
+CIPSTA:gateway:"192.168.4.1"
+CIPSTA:netmask:"255.255.255.0"
OK
④发送 AT+CIPSTART="TCP","192.168.4.1",8080 ,建立TCP连接。
Station模式下的ESP8266返回:
AT+CIPSTART="TCP","192.168.4.1",8080
CONNECT
OK
SoftAP模式下的ESP8266返回:
1,CONNECT
OK!到这里我们的Station就建立成功了。接下来我们检验一下成果,让两块ESP8266通信。
①AP发送 AT+CIPSEND=1,5 ,表示AP模式下的ESP8266要发送给1设备5个字节的数据。再在AP的串口助手输入“I send”,点发送。Station模式下的ESP8266便可接受到这5个字节的数据如下。
+IPD,5:I send
②Station发送 AT+CIPSEND=5 ,表示Station模式下的ESP8266要发送给AP 5个字节的数据。再在Station的串口助手输入“I have”,点击发送。AP模式下的ESP8266便可接受到这5个字节的数据如下。
+IPD,1,5:I have
OK! 至此两块ESP8266便建立起一张组网了。但是似乎总觉得有些麻烦,前面在使用 TCP 进行数据发送时,在每次发送数据之前都要指定发送数据的长度,而且在接收到数据之后,还会有+IPD,< len>的前缀,这样很不方便进行数据的处理。
因此我们可以使用AT+CIPMODE=1指令开启透传模式,开启透传模式后只需要在第一次发送数据时使用ATD +CIPSEND指令来使Station模式下的ESP8266开始透传发送,随后我们直接发送想要的数据即可,在接收到数据时,也没有了+IPD,< len >前缀。
透传模式下:
①发送 AT+CWMODE=1 ,设置为Station模式(客户端)。
②发送 AT+CWJAP="ESP8266-AP","123456789" ,连接刚刚建立的AP。
③发送 AT+CIPSTART="TCP","192.168.4.1",8080 ,建立TCP连接。
④发送 AT+CIPMODE=1 ,开启透传。
⑤发送 AT+CIPSEND ,开始透传。
⑥发送要发送的内内容即可
⑦若要退出透传发送 AT+CIPMODE=0 指令或者+++
(0x2B 0x2B 0x2B),后者没有换行符。
注意:在非透传模式下,客户端每次向服务端发送数据之前都要先发送AT+CIPSEND=<len>来告诉服务端我接下来要发送数据的长度,否则在发送之后会返回EEROR。
在透传模式下,客户端每次向服务端发送数据之前不需要发送AT+CIPSEND=<len>来告诉服务端我接下来要发送数据的长度。在设置好透传模式(即发送了AT+CIPMODE=1和AT+CIPSEND)后,直接发送数据就可以了。
在非透传模式下和透传模式下。只有客服端向服务端发送数据之前需要先发送最对应的命令,然后再发送数据。而服务端向客户端发送数据之前不需要向客户端先发送任何命令,直接就是发送数据。另外,所有AT指令(除了退出透传的+++指令)和数据在发送时都需要勾选发送新行或AT指令自动回车,也就是说命令和数据发送之前都需要回车换行,否则不能发送成功。
参考文章链接:
STM32物联网实战教程(一)—ESP8266的AT指令集详解【附源码】_果果小师弟_51CTO博客https://blog.51cto.com/u_14114084/3897868