ESP8266系列WIFI模块的使用·

时间:2021-09-11 22:23:05

一、概述

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系列WIFI模块的使用·

三、ESP8266-12F

ESP8266-12F相比于ESP8266-01有很多改进。首先12F的flash闪存比较大,另外12F支持机智云的MCU运行。当然,与增加的功能相适应,12F增加了很多IO口,一般是16个。但工作在AP模式下,二者并没有本质区别。但是12F有一个缺点就是需要自己搭建一些简单的外围电路。(接线图如下)

ESP8266系列WIFI模块的使用·

四、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长这样:ESP8266系列WIFI模块的使用·

用USB线连接PC,下载工具为flash_download_tool_v1.2_150512.exe,选择ESP8266_Doit_ser2net(v2.4).bin,下载地址为0x00000,按住Falsh键不放,然后按Reset键,使芯片进入下载模式,点击软件上的START开始下载,下载完成后重新上电。(如下图)

ESP8266系列WIFI模块的使用·

ESP8266系列WIFI模块的使用·

下载成功重新上电后就会发现这个固件的好处。连接wifi访问192.168.4.1就会出现以下界面

ESP8266系列WIFI模块的使用·

在该界面可以直接设置芯片的波特率以及AP模式下的配置,省去了麻烦的AT命令。所以,ESP8266-12E CP2102是我目前为止用到的最好用的ESP8266系列模块。

当然,我所涉及到的只是ESP8266的冰山一角,期待以后更加深入的学习!


左肩理想,右肩担当。君子不怨永远不会停下脚步!