51單片機經過ESP8266模塊與手機進行通信(單片機)

相關鏈接和資料下載:數組

我的博客網絡

資料下載函數

Step1:配置ESP8266spa

經過USB轉TTL模塊把ESP8266模塊和電腦鏈接起來,如圖:3d

把ESP8266模塊的VCC,GND,CH_PD,UTXD,URXD口分別接USB轉TTL模塊的3.3v,地,3.3v,RXD,TXD調試

鏈接好後,就準備用電腦用串口調試助手向ESP8266發送AT指令。code

串口調試助手下載地址:百度雲盤 blog

設置好串口調試助手的串口和波特率,ESP8266默認波特率爲115200,把串口調試助手的波特率調爲115200,勾選左下角的發送新行。在輸入框中輸入 AT+RST 而後點擊發送:
教程

 

若是前面的配置都沒錯的話,串口調試助手會接收到esp8266返回的信息,AT+RST是復位命令,ESP8266會返回一堆亂碼,這時候就說明ESP8266配置成功了。索引

配置好ESP8266以後就能夠更改模塊的信息了,按照如下順序向模塊發送AT指令:

AT+CWMODE=2

AT+CWSAP="esp8266","0123456789",11,3     //更改wifi名稱,名字最好不要亂改,有些特別的名字是顯示不出來的。

AT+RST             //配置完AT+CWMODE要重啓如下模塊使配置生效

AT+CIPMUX=1

AT+CIPSERVER=1,8080               //8080爲端口號,以後手機和單片機進行通信要用到,能夠本身修改。

前面三條綠色的指令配置一次就夠了,斷電重連配置的信息也不會改變,後面兩條紅色的指令要每次重啓模塊以後都要配置一遍。

按順序配置完以後就能夠用手機進行鏈接,若是手機發現wifi而且輸入密碼成功鏈接了,就證實上面的配置成功了。

下載手機網絡調試助手:手機網絡調試助手

打開手機網絡調試助手,把協議類型設置爲"TCP Client",IP地址設置爲用AT+CIFSR指令查詢到的ESP8266的IP,端口號就是前面設置的端口號。

配置好以後點鏈接(手機要鏈接好ESP8266的wifi),而後輸入任意信息(如:123),點擊發送。和ESP8266鏈接的電腦上的串口調試助手就會收到信息:+IPD,0,3:123(不一樣的ESP8266收到信息的格式可能會不一樣)從左到右的數字中,0是表明客戶的索引,3是表明收到信息的大小,至因而字節數仍是什麼的就不清楚了,冒號後面是收到的信息,到時候把ESP8266鏈接到單片機上面的時候,單片機收到的和電腦同樣的字符串,咱們須要編寫程序解析字符串,把其中須要的信息提取出來(如:+IPD,0,3:123,把123提取出來,單片機就能夠得知手機發送了123,就能夠在程序裏面進行對應的動做)

 

Step2:鏈接單片機和ESP8266

上面的配置只是電腦和ESP8266的鏈接,確保ESP8266運行正常,如今要進行單片機和ESP8266的鏈接了。

由於51單片機通信的波特率爲9600,因此ESP8266要與單片機進行鏈接通信,就要先用電腦吧ESP8266的波特率設置爲9600;

AT+CIOBAUD=9600    發送一下指令就能夠設置ESP8266波特率爲9600了,AT+RST重啓一下ESP8266,不要忘了把電腦串口調試助手的波特率也改成9600了,否則電腦鏈接ESP8266就會出現錯誤的了。

以前說過ESP8266有些指令配置一次就能夠,有些重啓以後要從新配置,這些指令是下面這兩條:

AT+CIPMUX=1

AT+CIPSERVER=1,8080               //8080爲端口號,以後手機和單片機進行通信要用到,能夠本身修改。

這些指令以前是用電腦給ESP8266發送的,但如今ESP8266和單片機鏈接起來的,這時要用單片機向ESP8266發送AT指令了。

在單片機程序中加入如下代碼:

 1 void connect_init()  2 {  3     char *a="AT+CIPMUX=1\r\n";  4     char *b="AT+CIPSERVER=1,8080\r\n";  5     while(*a!='\0')  6  {  7         SBUF=*a;      //寫入要發送的字符
 8         while(!TI);    //等待發送完成
 9         TI=0;          //發送
10         a++; 11  } 12     //這裏添加延時函數,延時5ms左右,給ESP8266反應時間
13     while(*b!='\0') 14  { 15         SBUF=*b;   16   17         while(!TI);    //等待發送完成
18         TI=0; 19         b++; 20  } 21 }

 

在程序的開頭,配置串口鏈接函數的後面加入上面的代碼,就可讓單片機每次開機的時候都向ESP8266發送一次指令,若是不會配置單片機串口的話,就百度一下教程,配置串口中斷是51單片機基礎的知識,這裏就很少說了。

燒錄好程序以後,而後把ESP8266模塊和單片機鏈接起來,接線方式跟以前的差很少,VCC,GND,CH_PD,UTXD,URXD口分別接3.3v,地,3.3v,單片機芯片的RXD,單片機芯片的TXD,其中,要和單片機共地。

確保鏈接好ESP8266和燒錄好程序,復位一下單片機,此時單片機應該向ESP8266完成發送AT指令了,打開手機的wifi,是否能鏈接上模塊發出的wifi

熱點,若是能鏈接上,證實單片機發送AT指令進行初始化的代碼塊沒問題,若是失敗了,檢查一下連線和程序是否有問題。

 

 如今已經完成了單片機與ESP8266的鏈接與初始化了,以後就進行對ESP8266向單片機發送的信息的解析。

 1 void Uart() interrupt 4
 2 {  3     char res;  4     res=SBUF;         //取出接受到的數據
 5     RI=0;              //清除接受中斷標誌位
 6     if(res==':'||i>0)    //i是全局變量
 7  {  8         receive[i]=res;   //receive數組也是全局變量
 9         i++; 10         if(res=='\n') 11  { 12             i=0; 13             //添加對收到信息的處理代碼
14             memset(receive,0,50); 15  } 16  } 17 }

由於單片機每產生一次串口中斷,只是接收一個字符,單片機要接收+IPD,0,3:123的話,就會產生屢次中斷,單片機的中斷程序裏面就要進行對收到的信息進行篩選和提取。上面代碼中 if(res==':'||i>0)  目的是排除掉+IPD,0,3 我不須要用的信息,而後i>0是確保以後程序能運行到if裏面, 以後if(res=='\n')就是判斷ESP8266發送完成一條信息沒有,進入if(res=='\n')裏面以後此時數組裏面的信息是:123,而後就能夠添加相關的處理函數了(如:LED=0),處理完以後要調用memset(receive,0,50);把數組清空,以便下次使用。

把程序向單片機進行燒錄,鏈接好ESP8266(鏈接着ESP8266的時候燒錄會失敗,應該拔下ESP8266的TX和RX端),復位單片機,而後用手機鏈接上wifi,打開手機網絡調試助手,發送本身設定好的信息,看看單片機有沒作出對應的處理(如:LED從滅到亮),成功的話就能夠在原先的程序上加上本身項目須要的代碼就能夠進行手機操控單片機了。

相關文章
相關標籤/搜索