1、简介
1.1 种类
WIFI模块在PC上做为客户端、服务器,在STM32上做服务器的通讯。在物联网应用开发有重要作用,种类居多,如下图
红色方框的esp8266-01s型号的无限wifi模块就是本章学习的主要对象。
1.2 特点
- 小巧的尺寸:ESP-01S模块具有紧凑的设计,适用于空间有限的应用。
- WiFi功能:它支持802.11b/g/n标准,允许设备连接到无线网络。
- 高度集成:ESP-01S集成了WiFi功能和处理器,减少了外部组件的需求。
- AT指令支持:通过串口通信,可以使用AT指令进行配置和控制。
- 低功耗:ESP-01S模块具有低功耗特性,适用于长时间运行的应用。
- 容易使用:ESP-01S模块易于配置和应用,有许多开发资源和示例代码可用。
1.3 管脚功能
Pin脚编号 | Pin脚名称 | 备注 |
1 | GND | 接地 |
2 | IO2 | GPIO2/UART1 TXD |
3 | IO0 | GPI00:下载模式:外部拉低:运行模式:悬空或者外部拉高 |
4 | RXD | UARTO RXD/GPIO3 |
5 | TXD | UARTO TXD/GPI01 |
6 | EN | 芯片使能端,高电平有效 |
7 | RST | 复位 |
8 | VCC | 3.3V供电(VDD);外部供电电源输出电流建议在500mA 以上 |
1.4 接线方式
1.5 工作模式
ESP8266-01s模块共支持3种工作模式:STA、AP、STA+AP
1、STA模式
在此模式下,模块可连接其他设备提供的无线网络,例如通过 WIFI 连接至路由器,从而可以访问互联网,进而实现手机或电脑通过互联网实现对设备的远程控制。
简单来说,此模式下,该模块相当于一个用户,需要链接外部的WIFI(或自己的热点),通过链接的WIFI进行与其他设备的通信;
2、AP
AP 模式为默认的模式,在此模式下,模块将作为热点供其他设备连接, 从而让手机或电脑直接与模块进行通讯,实现局域网的无线控制。
简单来说,此模式下,该模块相当于提供一个热点,创建一个小范围的局域网,凡是连接上的设备就能与其进行通信;
3、STA+AP
该模式为 STA 模式与 AP 模式共存的一种模式,模块既能连接至其他 设备提供的无线网络,又能作为热点,供其他设备连接,以实现广域网与局域网的无缝切换, 方便操作使用。
2、基础AT指令介绍
2.1 AT指令类型
⚠ 注意:• 不是每条 AT 指令都具备上述 4 种类型的命令。• [ ] 括号内为缺省值,不必填写或者可能不显示。• 使⽤双引号表示字符串数据 ”string” ,例如: AT+CWSAP="ESP756290","21030826",1,4• 默认波特率为 115200 。• AT 指令必须⼤写,并且以回⻋换⾏符结尾( CR LF )。
2.2 基础指令及其描述
使用示例:
AT指令启动调试
AT+RST重启调试
AT+RESTORE恢复出厂设置调试
2.3 使用AT指令需要注意的事
输入AT指令时,所有字母需要为大写形式,否则会报错(返回error),但有个例外:加号前面的可以是小写,但加号后面的必须为大写,这可能是esp8266模块中程序自己做了处理,即AT无论是大小写都能识别出来。
在等待发送AT指令时,需要回车加换行,即\r\n,否则在串口部分他会以不换行的格式不断发送你输入的AT指令,但这在esp8266模块看来,它未识别到\r\n,所以不会对输入的AT指令进行处理,只有当识别到\r\n时,才会进行处理,所以需要勾选上串口助手的发送新行选项。
3、AT指令分类和提示信息
3.1 选择是否保存到Flash的区别
AT指令主要分类在简介中有写到,但有些指令有无Flash区别很大,在这里做一下解析。
如上图所示,设置当前wifi模式可以选择是否存到Flash,则有不同的AT指令,针对上图做出调试:
1.先进行测试
2.再进行查询
3.最后进行修改并查询
可见此时wifi模式成功修改成Station模式,但此时调用复位AT指令,再次进行查询,其模式还会是修改过后的模式么,如下:
可见修改后的模式并没有存储到Flash中,复位后会发生改变,若想要保存到Flash中,调用上面第二个图片中的AT指令即可,这里就不作演示。
3.2 提示信息
3.3 其他会保存到Flash的AT指令
4、基础WI-FI功能指令
5、TCP&IP功能AT指令概述
红框的是经常需要用到的,详细概述如下:
6、AT指令应用示例_单连接 TCP Client
6.1 配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode(注:此AT指令通过试验会保存到Flash)响应 :OK
6.2 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router SSID是路由器名称 password是路由器密码响应 :OK
6.3 查询 ESP8266 设备的 IP 地址
AT+CIFSR响应 :+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"ee:fa:bc:96:20:8c"+CIFSR:STAIP,"192.168.1.120"+CIFSR:STAMAC,"ec:fa:bc:96:20:8c"OK
可见成功查询到esp8266模块连接wifi的IP
6.4 建立TCP服务器
此时显示侦听中,可见等待设备连接到该TCP服务器。同时创建的服务器IP为192.168.1.103,端口为8080.
6.5 ESP8266设备作为TCP client连接到上述服务器
AT+CIPSTART="TCP"," 192.168.1.103 ",8080 //protocol, server IP and port响应 :OK
实现本地发送数据至远端。
6.6 ESP8266 设备向服务器发送数据
AT+CIPSEND=4 // set date length which will be sent, such as 4 bytes>test // enter the data, no CR响应 :Recv 4 bytesSEND OK
可见实现了远端像本地发送数据。
⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。
可见超过AT指令设置的字节时,本地只能接收到在设置字节范围内的数据,其余数据发送失败。
6.7 ESP8266设备接收数据提示信息
提示信息如下:
+IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
上图IPD比输入数据长度多2是因为网络调试助手中勾选了换行,所以每次发送时串口助手会换行,同时\r\n算两个字符长度,下图不添加换行后,IPD与输入字符长度一样。
7、AT指令应用示例_UDP传输
UDP传输分为固定远端和远端可变,同时他们的前三步与上部分单连接TCP Client相同,所以这里将步骤列出来,不做详细操作演示。
7.1 固定远端的 UDP 通信
7.1.1 配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode(注:此AT指令通过试验会保存到Flash)响应 :OK
7.1.2 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router SSID是路由器名称 password是路由器密码响应 :OK
7.1.3 查询 ESP8266 设备的 IP 地址
AT+CIFSR响应 :+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"ee:fa:bc:96:20:8c"+CIFSR:STAIP,"192.168.1.120"+CIFSR:STAMAC,"ec:fa:bc:96:20:8c"OK
7.1.4 建立UDP服务器
PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个UDP服务器。打开网络调试助手,修改端口号为UDP,当本地IP出现时,修改端口号为8080,同时远程IP写入ESP8266模块的IP,修改端口号9090,点击侦听即可。
7.1.5 使能多连接
AT+CIPMUX=1响应 :OK
7.1.6 创建UDP传输
例如,分配连接号为 4 ,指令如下:AT+CIPSTART=4,"UDP","192.168.1.103",8080,9090,0响应 :4,CONNNECTOK说明:示例指令中的参数说明如下:• "192.168.1.103", 8080 为 UDP 传输的远端 IP 和端⼝,即前⽂步骤 4 中 PC 建⽴的 UDP 端⼝;(这里的远端IP是相对于esp8266的远端,即网络调试助手中的本地IP)•9090 为 ESP8266 本地的 UDP 端⼝,⽤户可⾃⾏设置,如不设置则为随机值;• 0 表示当前 UDP 传输建⽴后, UDP 远端不会被其他设备更改;即使有其他设备通过 UDP 协议发数据到ESP8266 UDP 端⼝ 1112 , ESP8266 的第 4 号 UDP 传输的远端也不会被替换,使⽤指令“AT+CIPSEND=4, X” 发送数据,仍然是当前固定的 PC 端收到。
可见创建完UDP传输后,网络调试助手成功连接上远端esp8266模块。
7.1.7 发送数据
AT+CIPSEND=4,7 // Send 7 bytes to transmission NO.4>UDPtest// enter the data, no CR响应 :Recv 7 bytesSEND OK
⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。
7.1.8 断开UDP传输
AT+CIPCLOSE=4(4为一开始分配的连接号)响应 :4,CLOSEDOK
可见断开连接后,远端发送数据到esp8266时,并不能接收数据。
7.2 远端可变的 UDP 通信
7.2.1 配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode(注:此AT指令通过试验会保存到Flash)响应 :OK
7.2.2 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router SSID是路由器名称 password是路由器密码响应 :OK
7.2.3 查询 ESP8266 设备的 IP 地址
AT+CIFSR响应 :+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"ee:fa:bc:96:20:8c"+CIFSR:STAIP,"192.168.1.120"+CIFSR:STAMAC,"ec:fa:bc:96:20:8c"OK
7.2.4 建立UDP服务器
PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个UDP服务器。打开网络调试助手,修改端口号为UDP,当本地IP出现时,修改端口号为8080,同时远程IP写入ESP8266模块的IP,修改端口号9090,点击侦听即可。
7.2.5 使能单连接
AT+CIPMUX=0响应 :OK
7.2.5 创建UDP传输
AT+CIPSTART="UDP","192.168.1.103",8080,9090,2响应 :4,CONNNECTOK示例指令中的参数说明如下:• "192.168.1.103"", 8080 为 UDP 传输的远端 IP 和端⼝,即前⽂ PC 建⽴的 UDP 端⼝;• 9090 为 ESP8266 本地的 UDP 端⼝,⽤户可⾃⾏设置,如不设置则为随机值;• 2 表示当前 UDP 传输建⽴后, UDP 传输远端仍然会更改; UDP 传输远端会⾃动更改为最近⼀个与 ESP8266 UDP 通信的远端。
注意:这里设置的是单连接模式,所以在使用此通信方式时,需调用AT+CIPMUX?指令查询是否为0(单连接模式),同时单连接不需要加网络连接ID,与前面的固定远端UDP传输有所不同。
7.2.6 发送数据
AT+CIPSEND=7 // Send 7 bytes>UDPtest// enter the data, no CR响应 :Recv 7 bytesSEND OK⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。
这里为单连接模式,所以AT指令后面直接加上数据长度即可。
7.2.7 发送数据到其他指定远端
例如,发数据到192.168.1.103, 端⼝ 8081 。AT+CIPSEND=7,"192.168.1.103",8081 // Send 7 bytes>UDPtest// enter the data, no CR响应 :Recv 7 bytesSEND OK
最左边的新开的其他远端UDP,通过修改端口号为8081,实现串口助手中发送指定长度的数据到端口号8081的远端。
7.2.8 断开UDP传输
AT+CIPCLOSE响应 :CLOSEDOK
上面设置的是单连接模式,所以这里直接执行下图红框内AT指令即可。
8、AT指令应用示例_透传
8.1 TCP Client单连接透传
8.1.1 配置WIFI模式
AT+CWMODE=3 // softAP+station mode响应 :OK
8.1.2 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router响应 :OK
8.1.3 查询 ESP8266 设备的 IP 地址
AT+CIFSR响应 :+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"ee:fa:bc:96:20:8c"+CIFSR:STAIP,"192.168.1.120"+CIFSR:STAMAC,"ec:fa:bc:96:20:8c"OK
8.1.4 建立TCP服务器
8.1.5 ESP8266 设备作为 TCP client 连接到上述服务器
AT+CIPSTART="TCP","192.168.3.116",8080 //protocol, server IP and port响应 :OK
8.1.6 使能透传模式
AT+CIPMODE=1响应 :OK
8.1.7 ESP8266设备向服务器发送数据
AT+CIPSEND> //From now on, data received from UART will be transmitted to server automatically.⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。- 进⼊透传模式发送数据,每包最⼤ 2048 字 节,或者每包数据以 20 ms 间隔区分。
8.1.8 退出发送数据
在透传发送数据过程中,若识别到单独的⼀包数据 “+++” ,则退出透传发送。- 如果使⽤键盘打字输⼊ “+++” ,可能耗时太⻓,不被认为是连续的三个 “+” ,建议使⽤串⼝⼯具⼀次性发送 “+++” ,并请注意不要携带空格或换⾏符等不可⻅字符。- 之后,请⾄少间隔 1 秒,再发下⼀条 AT 指令。⚠ 注意:“+++“ 退出透传发送数据,回到正常 AT 指令模式。此时, TCP 连接仍然是保持的,可以再发 AT+CIPSEND指令,重新开始透传。
注意:在输入"+++"数据时,需要取消换行,否则串口助手识别到多出来的\r\n,无论输入什么都会继续发送数据,如下:
解决方法是取消换行,单独发送"+++",过后要发送新指令,重新勾选上换行即可,如下:
8.1.9 退出透传模式
AT+CIPMODE=0响应 :OK
可见退出透传模式后,无法再向服务器发送数据,AT指令发送失败,可见该AT指令只在透传模式下生效。
8.1.10 断开TCP连接
AT+CIPCLOSE响应 :CLOSEDOK
8.2 UDP透传
8.2.1 配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode(注:此AT指令通过试验会保存到Flash)响应 :OK
8.2.2 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router SSID是路由器名称 password是路由器密码响应 :OK
8.2.3 查询 ESP8266 设备的 IP 地址
AT+CIFSR响应 :+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"ee:fa:bc:96:20:8c"+CIFSR:STAIP,"192.168.1.120"+CIFSR:STAMAC,"ec:fa:bc:96:20:8c"OK
8.2.4 建立UDP服务器
PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个UDP服务器。打开网络调试助手,修改端口号为UDP,当本地IP出现时,修改端口号为8080,同时远程IP写入ESP8266模块的IP,修改端口号9090,点击侦听即可。
8.2.5 ESP8266与PC对应端⼝建⽴固定对端的UDP传输
AT+CIPSTART="UDP","192.168.1.103",8080,9090,2
响应 :OK
8.2.6 使能透传模式
AT+CIPMODE=1响应 :OK
8.1.7 ESP8266设备向服务器发送数据
AT+CIPSEND> //From now on, data received from UART will be transmitted to server automatically.⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。- 进⼊透传模式发送数据,每包最⼤ 2048 字 节,或者每包数据以 20 ms 间隔区分。
8.1.8 退出发送数据
在透传发送数据过程中,若识别到单独的⼀包数据 “+++” ,则退出透传发送。- 如果使⽤键盘打字输⼊ “+++” ,可能耗时太⻓,不被认为是连续的三个 “+” ,建议使⽤串⼝⼯具⼀次性发送 “+++” ,并请注意不要携带空格或换⾏符等不可⻅字符。- 之后,请⾄少间隔 1 秒,再发下⼀条 AT 指令。⚠ 注意:“+++“ 退出透传发送数据,回到正常 AT 指令模式。此时, UDP 连接仍然是保持的,可以再发 AT+CIPSEND指令,重新开始透传。
注意:在输入"+++"数据时,需要取消换行,否则串口助手识别到多出来的\r\n,无论输入什么都会继续发送数据,如下:
解决方法是取消换行,单独发送"+++",过后要发送新指令,重新勾选上换行即可,如下:
8.1.9 退出透传模式
AT+CIPMODE=0响应 :OK
可见退出透传模式后,无法再向服务器发送数据,AT指令发送失败,可见该AT指令只在透传模式下生效。
8.1.10 断开UDP连接
AT+CIPCLOSE响应 :CLOSEDOK
9、多连接TCP Server
9.1 配置WiFi模式
AT+CWMODE=3 // softAP+station mode响应 :OK
9.2 使能多连接
AT+CIPMUX=1响应 :OK
9.3 建⽴ TCP server
AT+CIPSERVER=1 // default port = 333响应 :OK
9090端口号是esp8266模块通过我们设定的端口号。
9.4 连接路由器
AT+CWJAP="SSID","password" // SSID and password of router SSID是路由器名称 password是路由器密码响应 :OK
9.5 在PC端使⽤⽹络调试⼯具,建⽴⼀个TCP client,连接ESP8266的TCP server(上面设置9090)
⚠ 注意:ESP8266 作为 TCP server 有超时机制,如果连接建⽴后,⼀段时间内⽆数据来往, ESP8266 TCP server 会 将 TCP client 踢掉。因此,请在 PC TCP client 连上 ESP8266 TCP server 后建⽴⼀个 2s 的循环数据发送, ⽤于保持连接。
若超过2s为发送数据,则会自动断开。
9.6 发送数据
// ID number of connection is defaulted to be 0.AT+CIPSEND=0, 4 // send 4 bytes to connection NO.0>test // enter the data, no CR响应 :Recv 4 bytesSEND OK⚠ 注意:• 发送数据时,如果输⼊的字节数超过了设置⻓度( n ):- 系统将提示 busy ,并发送数据的前 n 个字节,发送完成后响应 SEND OK 。- 超出⻓度的部分数据被认为是⽆效数据,不被接受。- 进⼊透传模式发送数据,每包最⼤ 2048 字 节,或者每包数据以 20 ms 间隔区分。
这里AT指令中网络连接号为0是默认为0,若有多个TCP Client连接则会增加序号,例如多增加一个TCP Clinet第二个序号为1,如下:
序号0为8080端口号,序号1为8081端口号。
9.7 断开TCP连接
AT+CIPCLOSE=5(关闭所有序号的TCP连接)响应 :CLOSEDOK
可以输入对应序号关闭TCP连接,如下:
也可以输入5关闭所有TCP连接,如下: