esp8266引腳圖及功能
ESP8266特性
*802.11 b/g/n
*內(nèi)置低功耗32位CPU:可以兼作應(yīng)用處理器
*內(nèi)置TCP/IP協(xié)議棧
*內(nèi)置TR開(kāi)關(guān)、balun、LNA、功率放大器和匹配網(wǎng)絡(luò)
*內(nèi)置PLL、穩(wěn)壓器和電源管理組件
*支持天線分集
*STBC、1x1 MIMO、2x1 MIMO
*A-MPDU、A-MSDU的聚合和0.4 s的保護(hù)間隔
*WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
*支持STA/AP/STA+AP工作模式
*支持Smart Config功能(包括Android和iOS設(shè)備)
*SDIO 2.0、(H) SPI、UART、I2C、I2S、IR Remote Control、PWM、GPIO
*深度睡眠保持電流為10 uA,關(guān)斷電流小于5 uA
*2 ms之內(nèi)喚醒、連接并傳遞數(shù)據(jù)包
*802.11b模式下+20 dBm的輸出功率
*待機(jī)狀態(tài)消耗功率小于1.0 mW (DTIM3)
*工作溫度范圍:-40°C - 125°C
*通過(guò) FCC, CE, TELEC, WiFi Alliance 及 SRRC 認(rèn)證
5V單片機(jī)與3.3V的ESP8266串口連接
ESP8266最小系統(tǒng)與單片機(jī)最小系統(tǒng)連接
在正常使用的時(shí)候,固件刷寫開(kāi)關(guān)不需要打開(kāi),如果需要熱刷寫固件,可以考慮將刷寫固件的引腳與單片機(jī)的引腳相連。
ESP8266內(nèi)是一塊單片機(jī),也可以通過(guò)模塊本身直接控制開(kāi)關(guān),本文僅使用模塊的TCP透?jìng)鞴δ?,這里不再展開(kāi)。
單片機(jī)程序編寫
?。?)首先定義如下變量/常量:
/**********類型定義**************/
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define code const
/***********IO定義***************/
//定義P5.5口 LED指示燈
sbit LED=P2^4;
/**********緩存變量**************/
//串口接受緩存
u8 xdata RX_buffer[tbuf];
//接收計(jì)數(shù)變量
u8 RX_num;
/**********預(yù)定義字符串**************/
//握手連接指令,返回“OK”
u8 code esp_at[]=“AT ”;
//設(shè)置ESP8266的工作模式1 Station,返回“OK”或者“no change”
u8 code esp_cwmode[]=“AT+CWMODE=1 ”;
//連接到WiFi熱點(diǎn)或無(wú)線路由上,NXP為無(wú)線路由名稱,12345678為密碼;連接成功返回“OK”
u8 code esp_cwjap[]=“AT+CWJAP=”NXP“,”123456789“ ”;
//本機(jī)IP地址查詢指令
u8 code esp_cifsr[]=“AT+CIFSR ”;
//連接到TCP服務(wù)器,返回“Linked”
//192.168.0.149為服務(wù)器IP地址 6000為服務(wù)器端口號(hào) 不同電腦不同軟件可能會(huì)不一樣的
u8 code esp_cipsta[]=“AT+CIPSTART=”TCP“,”192.168.0.149“,6000 ”;
// 設(shè)置發(fā)送數(shù)據(jù)長(zhǎng)度
u8 code esp_cipsend[]=“AT+CIPSEND=5 ”;
//設(shè)置多鏈接
u8 code esp_DuoLianjie []=“AT+CIPMUX=1 ”;
//設(shè)置端口號(hào)
u8 code esp_Port []=“AT+CIPSERVER=1,3122 ”;
//查詢模塊自身IP,返回IP地址
u8 code esp_IP []=“AT+CIFSR ”;
//服務(wù)器發(fā)送 握手?jǐn)?shù)據(jù)
u8 code esp_Woshou []=“:test”;
//服務(wù)器發(fā)送 LED檢測(cè)數(shù)據(jù)
u8 code esp_test_LED []=“:LED”;
//服務(wù)器發(fā)送 打開(kāi)LED
u8 code esp_LED_ON []=“:LED ON”;
//服務(wù)器發(fā)送 關(guān)閉LED
u8 code esp_LED_OFF []=“:LED OFF”;
//復(fù)位重啟
u8 code esp_Rst []=“AT+RST ”;
//發(fā)送數(shù)據(jù)長(zhǎng)度
u8 code esp_DATA []=“AT+CIPSEND=1024 ”; 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
接下來(lái)是緩存字符串比較函數(shù),用于判斷返回值中是否含有OK等來(lái)自ESP8266模塊的工作標(biāo)識(shí)。如需用到更復(fù)雜的匹配,可以將之替換為正則表達(dá)式引擎。
//指定字符串與緩存數(shù)組數(shù)據(jù)進(jìn)行數(shù)據(jù)比較
//*p 要比較的指定字符串指針數(shù)據(jù)
//返回:1 數(shù)據(jù)一致 0 數(shù)據(jù)不一致
u8 Data_compare(u8 *p)
{
if(strstr(RX_buffer,p)!=NULL)
return 1;
else
return 0;
}12345678910
程序的變量已經(jīng)定義完,接下來(lái)是介紹主程序的部分。
(2)端口初始化
51單片機(jī)部分無(wú)需初始化端口,另一部分需要初始化端口才能使用:
//針對(duì) IAP15W4K61S4 STC15W4K56S4 系列 IO口初始化
//io口初始化 P0 P1 P2 P3 P4 為準(zhǔn)雙向IO口
//注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關(guān)的IO口均為
// 高阻態(tài),需將這些口設(shè)置為準(zhǔn)雙向口或強(qiáng)推挽模式方可正常使用
//相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
void IO_init(void)
{
P0M0 = 0X00;
P0M1 = 0X00;
P1M0 = 0X00;
P1M1 = 0X00;
P2M0 = 0X00;
P2M1 = 0X00;
P3M0 = 0X00;
P3M1 = 0X00;
P4M0 = 0X00;
P4M1 = 0X00;
}1234567891011121314151617181920212223
串口配置及中斷配置:
void UartInit(void)
{
S2CON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //定時(shí)器2時(shí)鐘1為FOSC,即1T
T2L=(65536-(11059200/4/115200)); //設(shè)置定時(shí)初值
T2H=(65536-(11059200/4/115200))》》8; //設(shè)置定時(shí)初值
AUXR |= 0x10; //啟動(dòng)定時(shí)器2
}
//串口2發(fā)送串口數(shù)據(jù)(字節(jié))
void Uart2SendByte(u8 ch)
{
S2BUF = ch; //寫數(shù)據(jù)到UART2數(shù)據(jù)寄存器
while(?。⊿2CON&S2TI));
S2CON&=~S2TI;
}
//串口2發(fā)送字符串
void Uart2SendStr(u8 *s)
{
IE2 = 0x00;
while (*s) //檢測(cè)字符串結(jié)束標(biāo)志
{
Uart2SendByte(*s++); //發(fā)送當(dāng)前字符
}
IE2 = 0x01;
}
//串口2中斷
void Uart2() interrupt 8 using 1
{
IE2 = 0x00; //關(guān)閉串口2中斷
if (S2CON & S2RI)
{
S2CON &= ~S2RI;
RX_buffer[RX_num] = S2BUF;
RX_num++;
if(RX_num》tbuf) RX_num = 0;
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI;
}
IE2 = 0x01; //開(kāi)啟串口2中斷
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
調(diào)用這一段代碼中的UartInit(void) 函數(shù)初始化串口。
全部初始化完畢后,就可以使用代碼對(duì)ESP8266配置了。
// 1 發(fā)送AT 進(jìn)行握手
while(1)
{
Uart2SendStr(esp_at); //串口2對(duì)wifi模塊發(fā)送握手指令 即AT
if(Data_compare(“OK”))break;
else Uart1SendStr(“ERROR1,some problems with ESP8266 ”);
delay1ms(600);
}
Uart1SendStr(“OK,mcu connection success with ESP8266! ”);
memset(RX_buffer, 0, tbuf);//清緩存數(shù)據(jù)
RX_num=0; //接收計(jì)數(shù)變量清0
// 2 配置wifi工作模式為SA模式
while(1)
{
Uart2SendStr(esp_cwmode); //串口2對(duì)wifi模塊工作模式進(jìn)行設(shè)置
if(Data_compare(“OK”)||Data_compare(“no change”))break;
delay1ms(600);
}
memset(RX_buffer, 0, tbuf);//清緩存數(shù)據(jù)
RX_num=0; //接收計(jì)數(shù)變量清0
// 3 連接熱點(diǎn)wifi wifi名 密碼 如果失敗 延時(shí)繼續(xù)連接
while(1)
{
Uart2SendStr(esp_cwjap); //串口2發(fā)送 指點(diǎn)wifi名 密碼 等待模塊連接
if(Data_compare(“OK”))break;
delay1ms(3000);
}
memset(RX_buffer, 0, tbuf);//清緩存數(shù)據(jù)
RX_num=0; //接收計(jì)數(shù)變量清0
// 4 設(shè)置多鏈接
while(1)
{
Uart2SendStr(esp_DuoLianjie); //設(shè)置多鏈接
if(Data_compare(“OK”))break;
delay1ms(3000);
}
memset(RX_buffer, 0, tbuf);//清緩存數(shù)據(jù)
RX_num=0; //接收計(jì)數(shù)變量清0
// 5 設(shè)置端口號(hào)
while(1)
{
Uart2SendStr(esp_Port); //設(shè)置端口號(hào)
if(Data_compare(“OK”))
{
delay1ms(3000);
break;
}
delay1ms(3000);
}
Uart1SendStr(“OK,Succeed esp_Port ”);
memset(RX_buffer, 0, tbuf);//清緩存數(shù)據(jù)
RX_num=0; //接收計(jì)數(shù)變量清0
esp8266串口wifi實(shí)例
引腳連接:
GND:接地
GPIO16:其實(shí)是RST,低電平復(fù)位,所以為了正常工作,直接連接VCC即可
VCC:接3.3V,看過(guò)其他教程說(shuō)不能接5V,不過(guò)小編有試過(guò)直接用5V來(lái)把玩,玩了一段時(shí)間都沒(méi)啥問(wèn)題,可以正常使用。但是有個(gè)問(wèn)題就是芯片很燙,所以用久了可能會(huì)燒壞模塊,而且wifi模塊一過(guò)熱,連接會(huì)很慢。所以,盡量用3.3V。
UTXD、URXD:前者接單片機(jī)或USB轉(zhuǎn)串口模塊的RXD,后者接TXD。這兩個(gè)可以和5V單片機(jī)的RXD、TXD連接,經(jīng)測(cè)試通信正常,無(wú)需5V轉(zhuǎn)3,3V
GPIO2、GPIO0:懸空
CH_PD:看一些教程說(shuō)可以直接接VCC,但經(jīng)測(cè)試不行,電流太大了,所以要經(jīng)電阻連接到VCC,也就是串聯(lián)個(gè)電阻然后電阻再接到VCC,電阻的阻值:數(shù)k。小編用4.7k,其實(shí)這個(gè)沒(méi)什么嚴(yán)格限制
調(diào)試:
調(diào)試用的是USB轉(zhuǎn)串口模塊,根據(jù)上面的引腳連接配合面包板進(jìn)行連接。然后就可以插電腦開(kāi)串口助手來(lái)調(diào)試了。波特率的話得自己試,有可能是9600或115200,甚至是其他的。小編有一塊是9600一塊是115200。怎么試呢?在串口助手勾發(fā)送新行,然后發(fā)送AT+RST,如果先出現(xiàn)一堆亂碼最后帶個(gè)ready則說(shuō)明試對(duì)了。然后說(shuō)明該模塊正常是什么大問(wèn)題了,還不放心的話還可以嘗試其他AT指令配合TCP調(diào)試工具來(lái)測(cè)試。
示例:
用單片機(jī)通過(guò)該模塊和上位機(jī)通信的例子(AP模式)
code uchar at_1[14]={‘A’,‘T’,‘+’,‘C’,‘I’,‘P’,‘M’,‘U’,‘X’,‘=’,‘1’,0x0D,0x0A,‘