ESP8266系列WIFI模塊的使用·

一、概述

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的冰山一角,期待以後更加深入的學習!


左肩理想,右肩擔當。君子不怨永遠不會停下腳步!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章