1. 程式人生 > >ESP8266 WIFI模組學習之路(2)——模組與微控制器連線進行遠端操作

ESP8266 WIFI模組學習之路(2)——模組與微控制器連線進行遠端操作

上一個部落格:ESP8266 WIFI模組學習之路(1)是關於對串列埠連線的,簡單驗證ESP8266是怎麼樣連線及其功能驗證,下面將通過微控制器連線,和手機進行遠端操作。

ESP8266和微控制器的連線,我這裡的微控制器型號為:STC12C5A60S2

ESP8266 微控制器
VCC VCC(最好選擇3.3V)
CH_PD VCC(最好選擇3.3V)
GND GND
URXD TXD
UTXD RXD

然後手機上要按照網路除錯助手,這裡我提供兩個:

我將會上傳到我的資源裡,請各位需要的下載嘗試。註明:我的是Android版本的。

現在我要完成的是控制P20口的LED燈亮滅,程式碼如下:  

#include <reg52.h>
#include <string.h>
#include <stdio.h>

sbit P20_LED=P2^0;


char Recive_table[20]="";  //接收緩衝,最大20個位元組
char Recive_state = 0;   //接收完成標誌
void WIFI_Init(void);
void Uart_Init(void);
void ms_delay(int t);
void LED(void);

int main (void)
{ 
	/********************功能初始化***********************/
	Uart_Init();//串列埠初始化,波特率為9600
	ms_delay(1000) ;
	WIFI_Init(); //wifi初始化
	/****************************************************/
	/**********************主迴圈************************/
	for(;;)
	{ 
		ms_delay(10) ;
		if(Recive_state == 1)
		{
			ES=0;  //清空接收標誌位 
			if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//接收到的字串形式為+IPD,x,x:y
			{
			    if((Recive_table[3]=='D')&&(Recive_table[6]==','))
			    {   
			        if(Recive_table[9]=='0')
					P20_LED = 0;
					if(Recive_table[9]=='1')
					P20_LED = 1;
				}
			}
			memset(Recive_table,'\0',20);
			Recive_state = 0;
			ES=1;  //開啟接收標誌位
		}
	}
	/****************************************************/
	  
}

/******************************************************************
函 數: void Uart_Interrupt() interrupt 4
功 能: 串列埠中斷函式,將收到的字元存到Recive_table[]陣列中
參 數: 無
返回值: 無
*******************************************************************/
void Uart_Interrupt() interrupt 4         
{   
	static char i=0;  //因為是一位一位接收,所以用static
	if(RI==1)    
	{  
		ES = 0;
		RI=0;         
		Recive_table[i]=SBUF;        
		i++; 
		if((Recive_table[i-1] == '\n'))
		{ 
			Recive_table[i]='\0';
			i=0; 
			Recive_state = 1;
		}
		ES = 1;      
	}
	else
	TI = 0;     
} 

/******************************************************************
函 數: void Uart_Init(void)
功 能: 串列埠初始化,波特率為9600(這個不會,上網百度)
參 數: 無
返回值: 無
*******************************************************************/
void Uart_Init(void)
{  
	TMOD=0x20;
	TH1=0xfD;
	TL1=0xfD;
	TR1=1;
	REN=1;
	SM0=0;
	SM1=1;
	EA=1;
	ES=1;
}

/******************************************************************
函 數: void ms_delay(int t)
功 能: 毫秒級延時
參 數: 無
返回值: 無
*******************************************************************/
void ms_delay(int t) 
{  
	int i,j; 
	for(i=t;i>0;i--)   
		for(j=110;j>0;j--); 
}

/******************************************************************
函 數: void LED(void)
功 能: 傳送完命令後顯示用的函式
參 數: 無
返回值: 無
*******************************************************************/
void LED(void)
{
	P2 = 0;
	ms_delay(100);
	P2 = 0xff;
	ms_delay(100);
}


/******************************************************************
函 數: void WIFI_Init(void)
功 能: wifi初始化
參 數: 無
返回值: 無
*******************************************************************/
void WIFI_Init(void)
{
	ES = 0;
	TI = 1; 
	printf("AT+RST\r\n");
	LED();
	ms_delay(1000) ;
	printf("AT+CWMODE=3\r\n");
	LED();
	ms_delay(1000) ;
	printf("AT+CIPMUX=1\r\n");
	LED(); 
	ms_delay(1000) ;
	printf("AT+CIPSERVER=1,8080\r\n");        
	LED();
	ms_delay(1000) ;
    printf("AT+CIOBAUD=9600\r\n");   // 設定與微控制器一致的波特率     
	LED();
	ms_delay(1000) ;
	while(!TI);
	TI = 0;
	ES = 1;
}

將HEX檔案載入到微控制器中驗證效果。

我們先用如圖除錯助手進行操作:

除錯之前需要先連線到正確的WIFI上,我的esp8266模組的WIFI名稱為:AI-THINKER_7C5C0F

TCP server端配置正確的埠號,這個埠號是自己設定的

然後在client端配置正確的IP,這個IP必須

如果正確會提示連線成功,然後就可以輸入0或者1進行對LED燈亮滅操作。

如圖:

最後使用

同樣可以完成相應的效果,配置如下圖:

到此就結束了,希望大家指正,共同探討。