ESP8266 WIFI模組學習之路(2)——模組與微控制器連線進行遠端操作
阿新 • • 發佈:2018-12-18
上一個部落格: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燈亮滅操作。
如圖:
最後使用
同樣可以完成相應的效果,配置如下圖:
到此就結束了,希望大家指正,共同探討。