基于Arduino调试ESP8266 01和01S wifi模块
ESP8266一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。 ESP8266系列Wi-Fi模块一共有01~14十多款模块, ESP8266-01简称ESP-01, ESP8266-01S简称ESP-01S
至于他们的区别请看下图:左边的是ESP8266-01S,右边的是ESP8266-01
左边的是ESP8266-01S,右边的是ESP8266-01
外观区别1:ESP8266-01S天线区域右下角只有一个指示灯,ESP8266-01天线区域右下角有两个指示灯。 外观区别2:ESP8266-01S背面有引脚说明,ESP8266-01背面有没有引脚说明。 内部区别:ESP8266-01S内部电路相对应ESP8266-01做了优化,使用建议大家购买的时候买ESP8266-01S 功能区别:无区别
引脚说明(1S标记名称不同,功能相同)
引脚名称
- UTXD:UART_TXD,发送
- GND:GND
- CH_PD/EN:高电平工作;低电平模块供电关掉
- GPIO2:(1)开机上电时必须为高电平,禁止硬件下拉;(2)内部默认已拉高
- RST:外部Reset信号,低电平复位,高电平工作(默认高)
- GPIO0:工作模式选择:悬空:FlashBoot,工作模式;下拉:UARTDownload,下载模式
- VCC:3.3V(切不可接5V,烧片)
- UTXD:UART_RXD,接收
Arduino uno r3 使用 ESP8266 wifi 模块
ESP8266 <------> Arduino Uno UTXD <------> 1(TX1) GND <------> GND CH_PD/EN <------> 串联10KΩ电阻连接3.3v VCC <------>3.3V URXD<------> 0(RX0) 8个口接5个就可以。
其中有几点要注意
- ardunio 的串口分为硬串口和软串口,我们第一步连接的0和1是硬串口。后面会说如何用软串口。
- CH_PD需要串联一个10kΩ的电阻后,再连接3.3v的电源
- Arduino先上传程序再进行连接,因为占用的数据口程序会上传失败
- 下面是测试ESP8266是否连接正确的代码
- const int tx = 1;
- const int rx = 0;
- void setup() {
- pinMode(rx,INPUT_PULLUP);
- pinMode(tx,INPUT_PULLUP);
- }
- void loop() {
- }
复制代码
串口显示ready
连接硬件后串口显示,如果接线正确会在消息窗里显示ready消息,如果没有显示可以再插拔下3.3V引脚,重启小模块就行 每个版本的ESP8266波特率不同,一般是115200,你可以多测试几次。 如果全部都是准确的还是无法实现,可以进行重新固件烧录,具体请参考ESP8266固件烧录文章
ESP8266 的 AT 命令调试
ESP8266 的 AT 命令可以在网上查,比如下面的这几个比较常用的 AT 测试正常不 AT+GMR 查看版本信息 AT+RST 重启 AT+RESTORE 恢复初始化,和手机恢复出厂一样 AT+UART=9600,8,1,0,0 "修改波特率、也叫设置串口配置"8是数据位8字节 AT+CWMODE? 查询工作模式 ("1.Station(客户端模式)2.AP (接入点模式)3.Station+AP(两种模式共存)") AT+UART=115200,8,1,0,0 "修改波特率、也叫设置串口配置"8是数据位8字节 AT+CWMODE_DEF=1 配置WiFi模组工作模式 ("1.Station(客户端模式)2.AP (接入点模式)3.Station+AP(两种模式共存)") AT+CWJAP? 查询当前连接的路由器 AT+CIFSR 查询IP地址、MAC地址 AT+CWJAP="wifi","123456789" 连接路由器(名称+密码) 我们可以测试下ESP8266模块是否正常工作
AT指令调试 如果模块运行正常会反馈OK
正确反馈OK
ESP8266 的三种工作模式
ESP8266有三种工作模式: - Station (客户端模式)
- AP (接入点模式)
- Station+AP (两种模式共存)
就是说模块可以当成一个设备(client)连接区域网内的路由,也可以设置成是一个路由(sever),也可以既作为局域网里面的client同时又是其他client的sever。
下面我们可以尝试一下配置ESP8266的指令 AP(sever)模式
1.输入:AT+CWMODE=2 响应:OK 说明:指令原型为:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
2.输入:AT+RST 响应: OK 说明:配置好模式后需要重启生效。
3.输入:AT+CWMODE? 响应:+CWMODE:2 OK 说明:这条指令可以不要,这是查询当前模式的指令,模式返回是2,说明是AP模式。
4.输入:AT+CWSAP="ESP8266","0123456789",11,0 响应:OK 说明:指令原型为:AT+CWSAP=<ssid>,<pwd>,<chl>, <ecn>;其中<ssid>:字符串参数,接入点名称;<pwd>:字符串参数,密码最长64字节,ASCII;<chl>:通道号;< ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK。 然后现在就可以在你的手机或者是电脑通过无线网卡连接到ESP8266上了。
5.输入:AT+CIPMUX=1 响应:OK 说明:开启多连接模式,因为只有在开启多连接模式的时候才能开启服务器模式。注意:透传只能在单连接模式下进行。
6.输入:AT+CIPSERVER=1,8080 响应:OK 说明:设置端口为8080。 最后,我们就可以通过网络调试助手来通过“TCP Client”模式下添加“IP:192.168.4.1(模块默认的IP),端口8080(第6步设置的)”值得一提的是,ESP8266当服务器的时候,客户端如果没有数据传输,隔一段时间会自动断开连接,可通过AT+CIPSTO=<time>命令设置超时时间(说明:<time>:服务器超时时间,0~2880,单位为s)。 7.输入AT+CIPSEND=0,10 返回:OK > 输入字符串,就可以发到手机上了,0是通道号,10是数据长度。
Station(client)模式
1.输入:AT+CWMODE=1 响应:OK 说明:指令原型为:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
2.输入:AT+RST 响应: OK 说明:配置好模式后需要重启生效。
3.输入:AT+CWMODE? 响应:+CWMODE:1 OK 说明:这条指令可以不要,这是查询当前模式的指令,模式返回是1,说明是Station模式。再看电脑或者手机wifi连接窗口,刚才的热点已经消失了,说明已经把模式转换为了客户端模式。
4.输入:AT+CWLAP 响应:+CWLAP4,"呭摜",-84,"78:eb:14:f3:9c:1a",1) +CWLAP4,"509509",-53,"20:dc:e6:d0:3b:3c",1) +CWLAP4,"bing2014",-73,"ec:88:8f:63:40:d4",1) +CWLAP3,"瀵嗙爜鏄?883125",-80,"7e:2f:68:6b:df:5e",11) OK 说明:可以让模块搜索周围的信号了,列出可以连接的热点(中文显示为乱码)。
5.输入:AT+CWJAP="509509","ldzldz509" 响应:OK 说明:指令原型为:AT+CWJAP=<ssid>,<pwd>),ssid就是wifi的名字,pwd就是wifi的密码。
6.输入:AT+CWJAP? 响应:+CWJAP:”509509” OK 说明:这条指令可以不要,这是查询一下当前连接的AP。
7.输入:AT+CIFSR 响应:192.168.1.104 OK
8.输入:AT+CIPSTA_CUR=”192.168.6.100”,"192.168.6.1","255.255.255.0" 响应:OK 说明:这条指令可以不要,这是分配固定ip。 说明:通过路由器查看下模块的IP地址。如果模块之前我们设置成了AP和Station共存模式,则会出现两个IP,上面的APIP是作为无线AP的IP地址。下面的STAIP是它作为客户端从路由器获取到的IP 地址。 ESP8266是有寄存器的,所以即使重启连接信息也不会丢失,重启后再查询,发现会自动连接。使用电脑ping一下这个ip,ip是可以ping通的,说明连接正常。 C:\Users\Administrator>ping192.168.1.104 正在 Ping 192.168.1.104 具有 32 字节的数据: 来自 192.168.1.104 的回复: 字节=32 时间=65msTTL=255 来自 192.168.1.104 的回复: 字节=32 时间=95msTTL=255 来自 192.168.1.104 的回复: 字节=32 时间=102msTTL=255 来自 192.168.1.104 的回复: 字节=32 时间=18msTTL=255 192.168.1.104 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 =18ms,最长 = 102ms,平均 = 70ms 通过路由器管理界面查看到模块的MAC地址为:18-FE-34-9C-8B-9D 可以调整一下路由器的IP分发策略,让这个mac地址获得固定的ip,这样每次连接路由器之后就不用查看ip了。配置后提示要重启路由器才生效,没关系以后有时间再重启。
8.输入:我们用来调试的这台电脑(电脑也需连接同一个路由器)上建立一个TCP服务器,然后用我们刚刚连接到路由器的ESP8266模块连接到我们建立的这个TCP服务器上,然后在这个模块与服务器之间转输数据。用到的工具是网络助手NetAssist.exe,运行后在网络协议类型:TCP Server ,然后点“连接”按扭,成为一台TCP服务器。
9.输入:AT+CIPSTART="TCP","192.168.1.100",8080 响应:CONNECT OK 说明:192.168.1.100为服务器IP地址;8080为端口。
10.输入:AT+CIPSEND=4 响应:OK 说明:意思是发送四个字节的数据。
11.输入:ABCD 响应:SENDOK 说明:NetAssist会收到ABCD四个字母。
这里他以十六进制显示出来了。
12.把网络助手的“连接对象”选择成我们的模块IP地址,在下面输入:CDEFG,点发送,会在串口工具收到+IPD,5:CDEFG。意思是接收到的数据长度为5个字节,CDEFG为数据内容。
Station(client)模式下与手机通信
1.输入:AT+CWMODE=3 响应:OK 说明:指令原型为:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
2.输入:AT+RST 响应: OK 说明:配置好模式后需要重启生效。
3.输入:AT+CWMODE? 响应:+CWMODE:3 OK 说明:这条指令可以不要。
4.输入:AT+CWSAP="ESP8266","0123456789",11,0 响应:OK 说明:指令原型为:AT+CWSAP=<ssid>,<pwd>,<chl>, <ecn>;其中<ssid>:字符串参数,接入点名称;<pwd>:字符串参数,密码最长64字节,ASCII;<chl>:通道号;< ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK。 然后现在就可以在你的手机或者是电脑通过无线网卡连接到ESP8266上了。 打开手机上的有人网络助手,TCP server→配置→激活→能看到此时手机的IP和端口号,要记下,下面要用。
5.输入:AT+CIPMODE=1 响应:OK 说明:开启透传模式。
6.输入:AT+CIPMUX=0 响应:OK 说明:开启单路模式。
7.输入:AT+CIPSTART="TCP","192.168.4.2",8080 响应:CONNECT OK 说明:192.168.4.2为服务器IP地址;8080为端口。填刚才记下的手机IP和端口号 这时手机已经能向模块发信息了,但模块不能发。
8.输入:AT+CIPSEND 响应:OK 说明:ESP8266发送数据至手机。
使用软串口通讯
使用Arduino和ESP8266模块制作案例,需要先按照刚才的步骤,把ESP8266 的波特率改为9600。之前我们连接的Arduino上的0和1是硬串口。 输入:AT+UART=9600,8,1,0,0 返回:OK
更改波特率
接下来我们用设置arduino上的8号口为rx,9号口为tx 注意,使用软串口连接导线时,模块的rx连接Arduino的tx,模块的tx连接Arduino的rx,就需要把ESP8266 的rx连接到Arduino的9号口上,模块的tx连接Arduino的8号口上。
- #include <SoftwareSerial.h>
- SoftwareSerial mySerial(8, 9); // RX, TX
- void setup() {
- Serial.begin(9600);
- mySerial.begin(9600);
- delay(1000);
- Serial.println("Goodnight moon2");
- mySerial.println("AT+GMR");
- }
- void loop() {
- while (mySerial.available()) {
- Serial.write(mySerial.read());
- }
- }
复制代码
使用上面的测试代码,就可以和模块通讯了
软串口连接正常 |