一、概述
ESP8266是由乐鑫公司出品的一款物联网芯片,因为价格较低,性能稳定等收到很大关注。该芯片可工作于三种种模式下,分别是:AP模式,station模式以及混合模式,通过常用的AT指令进行控制。自芯片面世以来发行过多种型号。单单我用过的就有ESP8266-01,ESP8266-12F,ESP8266-12E这三种。当然,我没接触到过的型号还有很多。在使用这三种芯片时均是使其工作在AP模式下。所以,就拿这三个型号说一下ESP8266在AP模式下的配置吧(AP模式下通信协议为TCP,也就是说AP模式下的ESP8266相当于一个TCP服务器)。
二、ESP8266-01
因为ESP8266-01是比较早的型号,所以也存在诸多不完善的地方。一开始用的时候也走过很多弯路,例如:ESP8266-01型号不支持1200及2400的波特率(网上的资料说是支持的),就因为这个原因就玩坏了三块芯片,将近100人民币就打水漂了(幸亏指导老师还安慰我,学习的过程就是消耗的过程),一开始不知道什么原因,后来才发现是波特率的问题。因为一开始的测试用的普中V3.0的学习版,该板搭载的是12.0Mhz的晶振,而且身边也没有可以换的11.0592Mhz的晶振,没办法才选择了2400的波特率,最终导致三块ESP8266-01坏掉。而且坏掉后上电就出现乱码,这些乱码用“格西烽火串口助手”中的所有波特率都读不出来所以一旦出问题无法修复。另外,该芯片对电压要求出奇的高,标准3.3V,一点小的电压波动都会引起模块工作异常。网上曾有一种说法,“十个不能正常工作的芯片中就有八个是电压问题引起的”。(ESP8266-01的接线图如下)
三、ESP8266-12F
ESP8266-12F相比于ESP8266-01有很多改进。首先12F的flash闪存比较大,另外12F支持机智云的MCU运行。当然,与增加的功能相适应,12F增加了很多IO口,一般是16个。但工作在AP模式下,二者并没有本质区别。但是12F有一个缺点就是需要自己搭建一些简单的外围电路。(接线图如下)
四、ESP8266-01与ESP8266-12F工作在AP模式下的配置命令。
1.基本配置命令:
AT+CIOBAUD=******//修改波特率为********(模块初始波特率默认为115200,该命令通过串口助手发送,重新上电后有效)
AT+CWMODE=2//设置模块为AP模式
AT+CWSAP="111","222",11,0//设置wifi名字为111,密码是222,通道号是11,加密方式是OPEN(可以修改)
AT+CIPMUX=1//启动多路连接方式(可以修改)
AT+CIPSERVER=1,5000//开启server,端口号为5000(可以修改)
AT+CIPSEND=0,5//向id为0的链接发送5字节数据(可以修改)
2.单片机控制程序:单片机型号为STC89C52RC,晶振11.0592MHz,波特率为9600(控制程序均为自己编写且测试有效)
#include<reg51.h>
void Serial_Inti();//初始化程序(必须使用,否则无法收发)
void Uart_Sends(unsigned char *str);//发送char型字符串
//void Delay1ms(unsigned int t);//1ms延时函数
unsigned char Uart_Receive();//接收字符子函数
void Uart_Dat(unsigned char dat);//数据发送子函数
void Wifi_Init();//wifi模块初始化
void Uart_Byte(char byte);//字节发送子函数
void Delay1ms(unsigned int t);//t ms延时子函数
/*串口初始化子函数*/
void Serial_Inti()//串口初始化,一定注意不要启动T1的串口中断
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
ES=0;//关闭串口中断
TR1 = 1;
}
/*字符串发送子函数(用于配置)*/
void Uart_Sends(unsigned char *str)
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;//清除发送中断标志位以继续发送
str++;
}
}
/*WIFI模块初始化*/
void Wifi_Init()
{
Delay1ms(3000);
Serial_Inti();
Uart_Sends("AT+CWMODE=2\r\n");
Delay1ms(2000);
Uart_Sends("AT+CWSAP=\"******\",\"*****\",11,0\r\n");//wifi名称及密码设置
Delay1ms(2000);
Uart_Sends("AT+CIPMUX=1\r\n");
Delay1ms(2000);
Uart_Sends("AT+CIPSERVER=1,5000\r\n");
}
/*字节发送子函数*/
void Uart_Byte(char byte)
{
SBUF=byte;
while(!TI);
TI=0;
}
/*数据发送子函数*/
void Uart_Dat(unsigned char dat)
{
Uart_Sends("AT+CIPSEND=0,1\r\n");
Delay1ms(1000);
Uart_Byte(dat);
Uart_Byte('\r');
Uart_Byte('\n');
Delay1ms(100);//延时100ms防止出现循环发送现象
}
/*指令接收子函数*/
unsigned char Uart_Receive()
{
unsigned char order;
RI=0;//先将接收表示位置0,防止wifi'配置使的返回信息将其置1
while(!RI);//等待接收到信息后跳出循环
order=SBUF;//当RI==1时接收到数据
RI=0;//清除接收中断标志位以继续接收
return order;
}
void Delay1ms(unsigned int t) //误差 0us
{
unsigned char a,b,c;
for(t;t>0;t--)
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
五、ESP8266-12E CP2102
刚开始使用ESP8266-12E CP2102时很蒙,因为焊接在CP2102板上之后原来的操作方式就不再适用。经过摸索发现了一个比较合适的而且好用的固件ESP8266_Doit_ser2net(v2.4).bin。所以方向很明确,要给12E刷新固件。首先ESP8266-12E CP2102长这样:
用USB线连接PC,下载工具为flash_download_tool_v1.2_150512.exe,选择ESP8266_Doit_ser2net(v2.4).bin,下载地址为0x00000,按住Falsh键不放,然后按Reset键,使芯片进入下载模式,点击软件上的START开始下载,下载完成后重新上电。(如下图)
下载成功重新上电后就会发现这个固件的好处。连接wifi访问192.168.4.1就会出现以下界面
在该界面可以直接设置芯片的波特率以及AP模式下的配置,省去了麻烦的AT命令。所以,ESP8266-12E CP2102是我目前为止用到的最好用的ESP8266系列模块。
当然,我所涉及到的只是ESP8266的冰山一角,期待以后更加深入的学习!
左肩理想,右肩担当。君子不怨永远不会停下脚步!