零、简介
感谢百文网韦东山 老师对ESP8266模块的讲解
笔记在CSDN也有文章备份
大家可以在我的gitee仓库 中下载笔记源文件、ESP8266资料等
笔记源文件可以在Notion中导入
一、ESP8266-01S模块详细介绍
1. 名字的由来
- ESP8266 是方形的主控芯片
- 旁边的长方形是一个Flash
- -01S 是用来区分基于ESP8266芯片做成的型号(种类)
- 也能称ESP8266-01S为ESP-01S
2. 引脚定义
单片机常用连接方式
3. 与ESP826601对比
- ESP8266-01
- 两个灯,一个为电源,一个为串口信号灯(有串口发送会一闪一闪的)
- 在接线时还需要把4引脚拉高(官方建议再接个电阻)
- ESP8266-01S
- 一个灯,但为信号灯
- 正面有ESP-01S的丝印
- 背面有引脚名称的丝印
- 在接线时只需要RX、TX、GND和3V3接好就OK了
二、AT指令简介
全程AT command set,AT 是 Attention的缩写。
出自Dennis Hayes,为海斯智能300所开发的一种命令语言。
可以使用指令集 与 设备进行沟通
三、AT指令注意事项
注意事项
- **不是每条 AT 指令都具备上述 4 种类型的命令。
- **括号内为缺省值,不必填写或者可能不显示。
- **使⽤双引号表示字符串数据 ”string”,例如:AT+CWSAP="ESP756290","21030826",1,4
- **默认波特率为 115200。
- AT 指令必须⼤写,并且以回⻋换⾏符结尾(CR LF)。
- 对于认识的指令,他会作出处理并返回OK
- 对于不认识的指令,他会返回ERROR!
- 指令必须全部大写(其实AT可以小写),
- 指令必须以\r\n结尾(否则ESP8266会认为是一条指令,直到\r\n换行)
- CR (Carriage Return) 表示回车
- LF (Line Feed) 表示换行
- Dos和Windows采用回车+换行(CR+LF)表示下一行
- 而UNIX/Linux采用换行符:(LF)表示下一行
- MAC OS系统采用回车符(CR)表示下一行
- 所以 Windows下编写的Shell脚本,直接放到linux/unix下执行会报错,就是因为行结束符不一样导致的。
- \r为回车 \n为换行
- ESP8266默认的波特率为115200
例如
- 串口发送:AT ,那么会收到OK
- 发送AT+RST ,ESP8266会重置,并打印日志,最后输出Ready
AT指令详情参考《ESP8266 Non-OS SDK AT 指令集_V3.0.1.pdf》
四、AT指令的分类和提示信息
1. 四种类型
AT指令可以细分为四种类型
- 测试指令
- 该命令用于该命令用于查询设置指令的参数以及取值范围
- 指令格式:AT+<x>=?
- 查询指令
- 该命令用于返回参数的当前值。
- 指令格式:AT+<x>?
- 设置指令
- 该命令用于设置用户自定义的参数值。
- 指令格式:AT+<x>=<…>
- 执行指令
- 该命令用于执行受模块内部程序控制的参数不可变的功能,
- 指令格式:AT+<x>
2. 简单测试
例如可以使用测试指令查看取值列表、查询指令查询当前模式是什么、设置指令设置当前模式。
串口工具测试发送如下
3. CUR与DEF
附录A:
AT指令有一部分分为保存到Flash和不保存到Flash 显然,保存到Flash的下次开机仍会保持,而临时的则在下次掉电 或 重启后恢复原状 保存到Falash的指令会在手册的附录中列出(大部分的指令都有后缀DEF,是definite 明确的 的缩写。) 那么临时改变的话,后缀就是CUR(是current 当前的 的缩写) 如果不加后缀,那么默认是保存在Flash中的,即带DEF后缀 例如AT+CWMODE=3(AT+CWMODE_DEF=3)
4. 提示信息
附录B:
提示信息 | 说明 |
---|---|
ready | AT 固件成功启动 |
ERROR | 指令输入错误,或者指令执行出错 |
WIFI CONNECTED | ESP8266 station 连接到 AP |
WIFI GOT IP | ESP8266 station 获取到 IP 地址 |
WIFI DISCONNECT | ESP8266 station 的 WiFi 连接断开 |
busy s... | busy sending,表示系统正在发送数据的过程中,无法响应当前输入 |
busy p... | busy processing,表示系统正在处理前一条指令,无法响应当前输入 |
<conn_id>,CONNECT | 建立了 <conn_id> 号网络连接 |
<conn_id>,CLOSED | <conn_id> 号网络连接断开 |
+IPD | 接收到网络数据 |
+STA_CONNECTED:<sta_mac> | 有 station 连入 ESP8266 softAP |
+DIST_STA_IP:<sta_mac>,<sta_ip> | ESP8266 softAP 给连入的 station 分配 IP 地址 |
+STA_DISCONNECTED:<sta_mac> | station 从 ESP8266 softAP 断开连接 |
五、使用AT指令的简单方法
使用AT指令的大概步骤:
- 打开AT文档
- 找到指令所在的位置
- 查看指令说明
- 指令类型
- 相应信息
- 注意事项
- 参数说明
- 指令示例
六、AT指令应用示例
以下示例,均来自乐鑫官方的《ESP8266 AT 指令使⽤示例.pdf》文档
1. TCP 单连接 Client
-
配置 WiFi 模式:
- 使用命令 “AT+CWMODE=3”,设置为可连可被连模式。
- 响应:OK。
-
连接路由器(热点):
- 使用命令 “AT+CWJAP="SSID","password"”(其中 SSID 是 wifi 名称,后者为密码)。
- 响应:OK。
-
查询 ESP8266 设备的 IP 地址:
-
使用命令 “AT+CIFSR”。
-
响应:
+CIFSR:APIP,"192.168.4.1" +CIFSR:APMAC,"1a:fe:34:a5:8d:c6" +CIFSR:STAIP,"192.168.3.133" +CIFSR:STAMAC,"18:fe:34:a5:8d:c6" OK
-
-
PC 与 ESP8266 设备连接同一路由器,在 PC 端使用网络调试工具,建立一个 TCP 服务器。
- 假设 PC 创建的服务器 IP 地址为 192.168.3.116,端口为 8080。
- 这里使用了网络调试工具,监听PC端所处的网关
- 假设 PC 创建的服务器 IP 地址为 192.168.3.116,端口为 8080。
-
ESP8266 设备作为 TCP client 连接到上述服务器:
- 使用命令 “AT+CIPSTART="TCP","192.168.3.116",8080” (protocol、server IP 和 port)(协议、IP地址、端口)。
- 响应:OK。
-
ESP8266 设备向服务器发送数据:
- 使用命令 “AT+CIPSEND=4”(设置要发送的数据长度,例如 4 字节)。
- 输入 1234”(输入数据,无回车符)。
- 响应:Recv 4 bytes SEND OK。
-
当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:
-
“+IPD,n:xxxxxxxxxx”
-
n指接收到的字节,后面的xx为接收到的数据
-
例如 默认这里的3,指的是接收到3字节(因为发送时有\r\n换行回车,他们各占一个字节)(中文每个占2字节)
+IPD,7:11222 +IPD,3:1 +IPD,8:你人呢
-
2. UDP 传输_固定远端的UDP通信
基础配置:
- 配置 WiFi 模式:
AT+CWMODE=1
- 连接路由器(热点):
AT+CWJAP="SSID","password
- 查询 ESP8266 设备的 IP 地址:
AT+CIFSR
UDP 通信步骤:
UDP 通信远端固定规则:AT+CIPSTART 指令的最后一个参数设置为 0 决定UDP通信为远端固定 。系统会分配一个连接号给这个固定连接,UDP 通信双方不会被其他设备替代。
假设,PC 创建的 UDP ⾃身 IP 地址为 192.168.118.168,端⼝为 25563
-
使能多连接:
AT+CIPMUX=1
。- 多连接模式 (AT+CIPMUX=1) 时,设置指令:
AT+CIPSTART=<link ID>,<type>,<remote IP>,<remote port>[,(<UDP local port>),(<UDP mode>)]
- <link ID>:⽹络连接 ID (0 ~ 4),⽤于多连接的情况 • <type>:字符串参数,连接类型,"TCP","UDP"或"SSL" • <remote IP>:远端 IP 地址,字符串参数 • <remote port>:远端端⼝号 • [<UDP local port>]:UDP 传输时,设置本地端⼝ • [<UDP mode>]:UDP 传输的属性,若透传,则必须为 0 ‣ 0:收到数据后,不更改远端⽬标,默认值为 0 ‣ 1:收到数据后,改变⼀次远端⽬标 ‣ 2:收到数据后,改变远端⽬标
- 多连接模式 (AT+CIPMUX=1) 时,设置指令:
-
创建 UDP 传输,例如连接号为 4 的指令为
AT+CIPSTART=4,"UDP","192.168.118.168",25563,9090,0
响应为 4,CONNNECT 和 OK。参数说明如下:
- "192.168.118.168", 25563为 UDP 传输的远端 IP 和端⼝,即前⽂中 PC 建⽴的 UDP 端⼝;
- 9090为 ESP8266 本地的 UDP 端⼝,⽤户可⾃⾏设置,如不设置则为随机值;
- 0 表示当前 UDP 传输建⽴后,UDP 远端不会被其他设备更改;即使有其他设备通过 UDP 协议发数据到
ESP8266 UDP 端⼝ 1112,ESP8266 的第 4 号 UDP 传输的远端也不会被替换,使⽤指令
“AT+CIPSEND=4, X” 发送数据,仍然是当前固定的 PC 端收到。
-
发送数据:
AT+CIPSEND=4,7
,输入 “UDPtest
”,响应为 Recv 7 bytes 和 SEND OK。 -
接收数据时,ESP8266 设备会提示 “+IPD,4,n:xxxxxxxxxx”
-
断开 UDP 传输:
AT+CIPCLOSE=4
,响应为 4,CLOSED 和 OK。
3. UDP 传输_远端可变的UDP通信
基础配置:
- 配置 WiFi 模式:
AT+CWMODE=1
- 连接路由器(热点):
AT+CWJAP="SSID","password
- 查询 ESP8266 设备的 IP 地址:
AT+CIFSR
UDP 通信远端可改变的情况:当使用 AT+CIPSTART 指令创建 UDP 通信,将最后一个参数设置为 2 时,UDP 通信的远端可改变。
UDP 通信步骤:
(这里不需要使能多连接)
- 创建 UDP 传输:
AT+CIPSTART="UDP","192.168.118.168",25563,9090,2
,响应为 CONNNECT 和 OK。 - 发送数据:
AT+CIPSEND=7
,输入 “UDPtest
”,响应为 Recv 7 bytes 和 SEND OK。 (这里不需要再和AT+CIPSEND=4,7
一样,指定网络连接ID*)* - 发送数据到其他指定远端,例如发数据到 192.168.118.168,端口25563:
AT+CIPSEND=7," 192.168.118.168",25563
,输入 “UDPtest
”,响应为 Recv 7 bytes 和 SEND OK。
参数说明:192.168.118.168",25563为 UDP 传输的远端 IP 和端口;9090为 ESP8266 本地的 UDP 端口,用户可自行设置,如不设置则为随机值;2 表示当前 UDP 传输建立后,UDP 传输远端会自动更改为最近一个与 ESP8266 UDP 通信的远端。
注意事项:发送数据时,如果输入的字节数超过了设置长度(n),系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK,超出长度的部分数据被认为是无效数据,不被接受。
接收数据时,ESP8266 设备会提示 “+IPD,n:xxxxxxxxxx”
- 断开 UDP 传输:
AT+CIPCLOSE
,响应为 CLOSED 和 OK。
4. TCP 单连接 透传
- 透传 就是 透明传输就是在传输过程中,对外界透明,就是说你看不见他是传送网络,不管传输的业务如何,我只负责将需要传送的业务传送到目的节点,相当于一条数据线或者串口线,同时保证传输的质量即可,而不对传输的业务进行处理。
- ESP8266 AT 默认仅在 TCP client 单连接或 UDP 传输模式时,⽀持透传。
一、ESP8266 透传功能概述
- ESP8266 可作为 station 实现 TCP client 单连接透传,作为 softAP 也可同理实现透传。
二、配置步骤
- 配置 WiFi 模式:
- 指令:AT+CWMODE=3,设置为 softAP+station 模式。
- 响应:OK。
- 连接路由器:
- 指令:AT+CWJAP="SSID","password",输入路由器的 SSID 和密码。
- 响应:OK。
- 查询 IP 地址:
- 指令:AT+CIFSR。
- 响应:显示 APIP、APMAC、STAIP、STAMAC 等信息,如 +CIFSR:APIP,"192.168.4.1"、+CIFSR:APMAC,"1a:fe:34:a5:8d:c6"、+CIFSR:STAIP,"192.168.3.133"、+CIFSR:STAMAC,"18:fe:34:a5:8d:c6"。
- 响应:OK。
- PC 端操作与连接:
- PC 与 ESP8266 设备连接同一路由器,在 PC 端使用网络调试工具,建立一个 TCP 服务器。假设 PC 创建的服务器 IP 地址为 192.168.3.116,端口为 8080。
- ESP8266 作为 TCP client 连接服务器:
- 指令:AT+CIPSTART="TCP","192.168.3.116",8080,指定协议、服务器 IP 和端口。
- 响应:OK。
- 使能透传模式:
- 指令:AT+CIPMODE=1。
- 响应:OK。
- 注意**(此设置不保存到flash,透传模式传输时,如果连接断开,ESP8266 会不停尝试重连,此时单独输入 +++ 退出透传,则停止重连;普通传输模式则不会重连,提示连接断开。)**
- ESP8266 设备向服务器发送数据:
- 指令:AT+CIPSEND。
- 响应:>,表示从此时起,从 UART 接收的数据将自动传输到服务器。
- 注意:每次发送(每包)最大2048个字节,或者每包20ms间隔区分
- 退出发送数据:
- 在透传发送数据过程中,若识别到单独的一包数据 “+++”,则退出透传发送。 建议使用串口工具一次性发送 “+++”,且不要携带空格或换行符等不可见字符。 之后,至少间隔 1 秒,再发下一条 AT 指令。
- 退出透传模式:
- 指令:AT+CIPMODE=0。
- 响应:OK。
- 断开 TCP 连接:
- 指令:AT+CIPCLOSE。
- 响应:CLOSED、OK。
5. UDP 透传
一、ESP8266 UDP 透传功能概述
- ESP8266 作为 softAP 可实现 UDP 透传,作为 station 同理可实现。
二、配置步骤
- 配置 WiFi 模式:
- 指令:AT+CIMODE=3,设置为 softAP+station 模式。
- 响应:OK(假设此处应有 OK 响应)。
- PC 连入 ESP8266 softAP:无特定指令,在 PC 上选择 ESP8266 的无线网络连接。
- 模块和PC接入同局域网也可
- PC 端建立 UDP 传输:
- 在 PC 端使用网络调试工具,建立一个 UDP 传输。假设 PC 创建的 UDP 自身 IP 地址为 192.168.4.2,端口为 1001。
- ESP8266 建立 UDP 传输:
- 指令:AT+CIPSTART="UDP", "192.168.4.2",1081,2233,0。
- 响应:OK(假设此处应有 OK 响应)。
- 使能透传模式:
- 指令:AT+CIPMODE=1。
- 响应:OK。
- ESP8266 设备向服务器发送数据:
- 指令:AT+CIPSEND。
- 响应:>,表示从此时起,从 UART 接收的数据将自动传输到服务器。
- 注意:发送数据时,如果输入的字节数超过了设置长度 (n),系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。超出长度的部分数据被认为是无效数据,不被接受。
- 退出发送数据:
- 在透传发送数据过程中,若识别到单独的一包数据 “+++”,则退出透传发送。建议使用串口工具一次性发送 “+++”,且不要携带空格或换行符等不可见字符。之后,至少间隔 1 秒,再发下一条 AT 指令。
- 注意:“+++” 退出透传发送数据,回到正常 AT 指令模式。此时,TCP 连接仍然是保持的,可以再发 AT+CIPSEND 指令,重新开始透传。
- 退出透传模式:
- 指令:AT+CIPMODE=0。
- 响应:OK。
- 断开 UTP 连接:
- 指令:AT+CIPCLOSE。
- 响应:CLOSED、OK。
6. 多连接 TCP Server
一、ESP8266 多连接 TCP Server 功能概述
- ESP8266 AT 仅支持建立一个 TCP 服务器,且必须使能多连接,允许连接多个 TCP client。ESP8266 作为 softAP 可建立 TCP 服务器,作为 station 在连接路由后同理可建立服务器。
二、配置步骤
-
配置 WiFi 模式:
- 指令:AT+CWMODE=3,设置为 softAP+station 模式。
- 响应:OK(假设此处应有 OK 响应)。
-
使能多连接:
-
指令:AT+CIPMUX=1。(AT+CIPSERVER=<mode>[,<port>])
-
响应:OK。
-
-
建立 TCP server:
- 指令:AT+CIPSERVER=1(默认端口为 333)。
- 响应:OK。
-
PC 连入 ESP8266 softAP:无特定指令,在 PC 上选择 ESP8266 的无线网络连接。
- 模块和PC接入同局域网也可
-
PC 端建立多个 TCP client 连接 ESP8266 的 TCP server:在 PC 端使用网络调试工具建立一个 TCP client,连接 ESP8266 的 TCP server。
-
如果要显示端口和IP可以使能这个
-
断开链接
AT+CIPCLOSE=1
注意:
ESP8266 作为 TCP server 有超时机制,如果连接建⽴后,⼀段时间内⽆数据来往,ESP8266 TCP server 会将 TCP client 踢掉。因此,请在 PC TCP client 连上 ESP8266 TCP server 后建⽴⼀个 2s 的循环数据发送,⽤于保持连接。