找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

基于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

1.jpg 2.jpg
左边的是ESP8266-01S,右边的是ESP8266-01

外观区别1:ESP8266-01S天线区域右下角只有一个指示灯,ESP8266-01天线区域右下角有两个指示灯。
外观区别2:ESP8266-01S背面有引脚说明,ESP8266-01背面有没有引脚说明。
内部区别:ESP8266-01S内部电路相对应ESP8266-01做了优化,使用建议大家购买的时候买ESP8266-01S
功能区别:无区别

引脚说明(1S标记名称不同,功能相同)

3.jpg
引脚名称

  • 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是否连接正确的代码


  1. const int tx = 1;

  2. const int rx = 0;

  3. void setup() {

  4.   pinMode(rx,INPUT_PULLUP);

  5.   pinMode(tx,INPUT_PULLUP);

  6. }

  7. void loop() {

  8. }
复制代码

4.png
串口显示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模块是否正常工作

5.png
AT指令调试
如果模块运行正常会反馈OK

6.png
正确反馈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服务器。

8.png

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四个字母。

9.png

这里他以十六进制显示出来了。

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上的01是硬串口。
输入:AT+UART=9600,8,1,0,0
返回:OK

10.png
更改波特率

接下来我们用设置arduino上的8号口为rx9号口为tx
注意,使用软串口连接导线时,模块的rx连接Arduinotx,模块的tx连接Arduinorx,就需要把ESP8266 rx连接到Arduino9号口上,模块的tx连接Arduino8号口上。

  1. #include <SoftwareSerial.h>

  2. SoftwareSerial mySerial(8, 9); // RX, TX

  3. void setup() {

  4.   Serial.begin(9600);

  5.   mySerial.begin(9600);

  6.   delay(1000);

  7.   Serial.println("Goodnight  moon2");

  8.   mySerial.println("AT+GMR");

  9. }

  10. void loop() {

  11.   while (mySerial.available()) {

  12.     Serial.write(mySerial.read());

  13.   }

  14. }

复制代码

使用上面的测试代码,就可以和模块通讯了

12.png
软串口连接正常
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册