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


相關連接和資料下載:

個人博客

資料下載

Step1:配置ESP8266

通過USB轉TTL模塊把ESP8266模塊和電腦連接起來,如圖:

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

連接好后,就准備用電腦用串口調試助手向ESP8266發送AT指令。

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

設置好串口調試助手的串口和波特率,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從滅到亮),成功的話就可以在原先的程序上加上自己項目需要的代碼就可以進行手機操控單片機了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM