找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19891|回復(fù): 39
打印 上一主題 下一主題
收起左側(cè)

ESP8266-01使用手機發(fā)送信息給Wifi模塊控制51單片機點亮LED燈蜂鳴器(軟件+app)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:551942 發(fā)表于 2019-5-31 17:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、準備

之前在網(wǎng)上找了很多關(guān)于ESP8266模塊和單片機互聯(lián)的資料,但是看完都一頭霧水,直到向買的店要了實例代碼后,才完成這一功能。對于我這樣的新手,單單看模塊說明書就寫出單片機中的相關(guān)代碼不要太難。本帖僅用于臨時使用卻找不到方法,而不是探究原理的愛好者們。需要準備的模塊有:ESP8266-01模塊、USB轉(zhuǎn)TTL模塊、單片機開發(fā)板或單片機學(xué)習(xí)板、LED燈、蜂鳴器、杜邦線,其他的可以自己加。


二、串口調(diào)試ESP


   首先要用ESP8266模塊和USB轉(zhuǎn)TTL模塊進行串口調(diào)試,看你的wifi模塊是不是正常工作的。具體教程百度很多,我就不過多說明了。但是記得串口調(diào)試時候要把ESP8266的波特率改為9600,因為51單片機最大也就9600,而且試驗證明用單片機發(fā)送指令去修改波特率會有問題,保險點還是串口調(diào)試就修改好。除了波特率,其他的可以在單片機程序中設(shè)置。

  
  上圖是ESP8266-01的接腳說明,在官方給的資料里有。串口調(diào)試時候接線方法為:CH_PD和VCC接3.3伏接口(模塊工作電壓3.3V,過高容易燒壞),esp的TXD接口接轉(zhuǎn)換模塊的RXD,esp的RXD接TXD,也就是讀接寫,寫接讀。不要接反。GND接GND,串口調(diào)試不是燒錄,不用接燒錄用的口。而且自己燒錄不熟練容易成板磚。







  接好后,電源指示燈亮,串口的驅(qū)動玩單片機的應(yīng)該都裝好了,打開串口調(diào)試軟件sscom42,sscom其他版本也差不多。如果串口沒接好或者驅(qū)動不正常,軟件打開會提示無法找到串口,找到就正常進入。然后點擊軟件的打開串口按鈕,在“字符串輸入框”輸入:“AT”發(fā)送,返回“OK”,正常。然后輸入“AT+RST”發(fā)送,重啟。其他指令可以百度AT指令查看,或者在我的附件里有ESP8266的官方文件。
  測試后一定要記得把波特率在串口調(diào)試中修改了,發(fā)送“AT+CIOBAUD=9600”,返回OK后修改波特率成功。



三、接入單片機


  接入單片機的接線和串口大致一樣。CH_PD和VCC接3.3V,CH_PD最好先串聯(lián)一個10k電阻再接電源防止燒壞,如果單片機工作電壓是5V,最好再接一個三端穩(wěn)壓降壓模塊,把5V輸入,輸出3.3V給wifi模塊。在STC89C52RC單片機中,P3.0是RXD口,接Wifi模塊的TXD口。P3.1是TXD口,接Wifi模塊RXD口。記住度對寫,寫對讀。(燒錄單片機程序的時候要把wifi模塊接的P3.0和P3.1接線拔了,因為燒錄用的模塊接口也是P3.0和P3.1,燒錄完再接上,不然會發(fā)現(xiàn)燒錄軟件沒反應(yīng))

  
  接好了后,把LED燈和蜂鳴器也接好就行了。下面是程序。其中有幾個點注意,接收到的數(shù)據(jù)是字符串,不能直接進行整數(shù)的判斷,要轉(zhuǎn)換或者判斷字符再賦值整數(shù)。代碼中可以設(shè)置端口號,這里是8080,。IP地址我沒有改,是官方默認的192.168.4.1。下載一個手機的串口調(diào)試助手,你也可以自己寫一個,用E4A中文編碼很適合初學(xué)者。選擇TCP調(diào)試。連接小車的wifi,(wifi名字一般帶ESP8266,也可以串口調(diào)試時候自己改)然后輸入IP和端口,連接,發(fā)送字符“0”、“1”、“2”進行測試。



單片機源程序如下:

  1. #include <reg52.h>
  2. #include <string.h>
  3. #include <stdio.h>

  4. sbit P11_LED =P1^1; //自己定義你的LED接口
  5. sbit BUZZ = P2^3; //自己定義你的蜂鳴器接口


  6. char Recive_table[20]="";  //接收緩沖,最大20個字節(jié)
  7. char Recive_state = 0;   //接收完成標志
  8. void WIFI_Init(void);
  9. void Uart_Init(void);
  10. void ms_delay(int t);
  11. void LED(void);

  12. int main (void)
  13. {
  14.         /********************功能初始化***********************/
  15.         Uart_Init();//串口初始化,波特率為9600
  16.         ms_delay(1000) ;
  17.         WIFI_Init(); //wifi初始化
  18.         /****************************************************/
  19.         /**********************主循環(huán)************************/
  20.         while(1)
  21.         {
  22.                 ms_delay(10) ;
  23.                 if(Recive_state == 1)
  24.                 {
  25.                         ES=0;  //清空接收標志位
  26.                         if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//接收到的字符串形式為+IPD,x,x:y
  27.                         {
  28.                             if((Recive_table[3]=='D')&&(Recive_table[6]==','))
  29.                             {   
  30.                                 
  31.                                     if(Recive_table[9]=='0')  //如果你發(fā)送的是“0”
  32.                                     {
  33.                                                 P11_LED = 0;              //LED亮
  34.                                             ms_delay (10);
  35.                             BUZZ=0;               //蜂鳴器響一聲
  36.                                         ms_delay (10);
  37.                             BUZZ=1;
  38.                                                 ms_delay (30);
  39.                                                 P11_LED = 1;              //LED滅
  40.                                     }
  41.                                        
  42.                                         if(Recive_table[9]=='1')  //如果你發(fā)送的是“1”
  43.                                     {
  44.                                                 P11_LED = 0;              //LED亮
  45.                                             ms_delay (10);
  46.                             BUZZ=0;               //蜂鳴器響兩聲
  47.                                         ms_delay (10);
  48.                             BUZZ=1;
  49.                                                 ms_delay (10);
  50.                             BUZZ=0;
  51.                                         ms_delay (10);
  52.                             BUZZ=1;
  53.                                                 ms_delay (30);
  54.                                                 P11_LED = 1;              //LED滅
  55.                                     }
  56.                                        
  57.                                         if(Recive_table[9]=='2')  //如果你發(fā)送的是“2”
  58.                                     {
  59.                                                 P11_LED = 0;              //LED亮
  60.                                             ms_delay (10);
  61.                             BUZZ=0;               //蜂鳴器響三聲
  62.                                         ms_delay (10);
  63.                             BUZZ=1;
  64.                                                 ms_delay (10);
  65.                             BUZZ=0;
  66.                                         ms_delay (10);
  67.                             BUZZ=1;
  68.                                                 ms_delay (10);
  69.                             BUZZ=0;
  70.                                         ms_delay (10);
  71.                             BUZZ=1;
  72.                                                 ms_delay (30);
  73.                                                 P11_LED = 1;              //LED滅
  74.                                     }
  75.                                        

  76.                                 }
  77.                                 
  78.                                 
  79.                                        
  80.                                        
  81.                         }
  82.                         memset(Recive_table,'\0',20);
  83.                         Recive_state = 0;
  84.                         ES=1;  //打開接收標志位
  85.                 }
  86.         }
  87.         /****************************************************/
  88.          
  89. }

  90. /******************************************************************
  91. 函 數(shù): void Uart_Interrupt() interrupt 4
  92. 功 能: 串口中斷函數(shù),將收到的字符存到Recive_table[]數(shù)組中
  93. 參 數(shù): 無
  94. 返回值: 無
  95. *******************************************************************/
  96. void Uart_Interrupt() interrupt 4         
  97. {   
  98.         static char i=0;  //因為是一位一位接收,所以用static
  99.         if(RI==1)   
  100.         {  
  101.                 ES = 0;
  102.                 RI=0;         
  103.                 Recive_table[i]=SBUF;        
  104.                 i++;
  105.                 if((Recive_table[i-1] == '\n'))
  106.                 {
  107.                         Recive_table[i]='\0';
  108.                         i=0;
  109.                         Recive_state = 1;
  110.                 }
  111.                 ES = 1;      
  112.         }
  113.         else
  114.         TI = 0;     
  115. }

  116. /******************************************************************
  117. 函 數(shù): void Uart_Init(void)
  118. 功 能: 串口初始化,波特率為9600(這個不會,上網(wǎng)百度)
  119. 參 數(shù): 無
  120. 返回值: 無
  121. *******************************************************************/
  122. void Uart_Init(void)
  123. {  
  124.         TMOD=0x20;
  125.         TH1=0xfD;
  126.         TL1=0xfD;
  127.         TR1=1;
  128.         REN=1;
  129.         SM0=0;
  130.         SM1=1;
  131.         EA=1;
  132.         ES=1;
  133. }

  134. /******************************************************************
  135. 函 數(shù): void ms_delay(int t)
  136. 功 能: 毫秒級延時
  137. 參 數(shù): 無
  138. 返回值: 無
  139. *******************************************************************/
  140. void ms_delay(int t)
  141. {  
  142.         int i,j;
  143.         for(i=t;i>0;i--)   
  144.                 for(j=110;j>0;j--);
  145. }

  146. /******************************************************************
  147. 函 數(shù): void LED(void)
  148. 功 能: 發(fā)送完命令后顯示用的函數(shù)
  149. 參 數(shù): 無
  150. 返回值: 無
  151. *******************************************************************/
  152. void LED(void)
  153. {
  154.         P2 = 0;
  155.         ms_delay(100);
  156.         P2 = 0xff;
  157.         ms_delay(100);
  158. }


  159. /******************************************************************
  160. 函 數(shù): void WIFI_Init(void)
  161. 功 能: wifi初始化
  162. 參 數(shù): 無
  163. 返回值: 無
  164. *******************************************************************/
  165. void WIFI_Init(void)
  166. {
  167.         ES = 0;
  168.         TI = 1;
  169.         printf("AT+RST\r\n");
  170.         LED();
  171.         ms_delay(1000) ;
  172.         printf("AT+CWMODE=3\r\n");
  173.         LED();
  174.         ms_delay(1000) ;
  175.         printf("AT+CIPMUX=1\r\n");
  176.         LED();
  177.         ms_delay(1000) ;
  178.         printf("AT+CIPSERVER=1,8080\r\n");      // 設(shè)置端口號8080      
  179.         LED();
  180.         ms_delay(1000) ;
  181.     printf("AT+CIOBAUD=9600\r\n");   // 設(shè)置與單片機一致的波特率     
  182.         LED();
  183.         ms_delay(1000) ;
  184.         while(!TI);
  185.         TI = 0;
  186.         ES = 1;

復(fù)制代碼
AT指令集內(nèi)容太多無法直接貼出來,只好放在附件里面了:
ESP8266模塊AT指令+ 串口調(diào)試軟件.7z (18.06 MB, 下載次數(shù): 694)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏54 分享淘帖 頂6 踩1
回復(fù)

使用道具 舉報

沙發(fā)
ID:390243 發(fā)表于 2019-6-2 00:39 | 只看該作者
請問大佬有沒有遇到過,在利用ESP8266收發(fā)送數(shù)據(jù)的時候,只要程序從中斷接受完數(shù)據(jù),就從main函數(shù)的開頭執(zhí)行,而不從進入中斷的地方開始?
回復(fù)

使用道具 舉報

板凳
ID:531751 發(fā)表于 2019-6-6 16:13 | 只看該作者
請問這個app點連接/監(jiān)聽,怎么知道連上了呢?
回復(fù)

使用道具 舉報

地板
ID:531751 發(fā)表于 2019-6-6 23:34 | 只看該作者
那個問題解決了!但是我發(fā)0,單片機沒反應(yīng)是怎么回事呀?
回復(fù)

使用道具 舉報

5#
ID:631878 發(fā)表于 2019-11-14 10:40 | 只看該作者
下載了,文件夾里沒有程序,后來在網(wǎng)頁上找到了
回復(fù)

使用道具 舉報

6#
ID:673765 發(fā)表于 2019-12-26 21:22 | 只看該作者
請問1、大佬有沒有ESP8266收發(fā)數(shù)據(jù)掉包的情況,不知是模塊的問題還是程序?qū)懙挠袉栴},有沒有大佬知道怎么回事呀。2、收發(fā)數(shù)據(jù)還沒有接收就接收成功了
回復(fù)

使用道具 舉報

7#
ID:758478 發(fā)表于 2020-5-22 16:36 | 只看該作者
圍觀一下,看看效果
回復(fù)

使用道具 舉報

8#
ID:758478 發(fā)表于 2020-5-22 16:36 | 只看該作者
圍觀一下,看看效果
回復(fù)

使用道具 舉報

9#
ID:761405 發(fā)表于 2020-5-26 10:39 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

10#
ID:632112 發(fā)表于 2020-5-27 11:13 | 只看該作者
值得學(xué)習(xí)學(xué)習(xí),謝謝分享
回復(fù)

使用道具 舉報

11#
ID:69408 發(fā)表于 2020-6-3 13:13 | 只看該作者
這個經(jīng)過測試單片機這邊的程序可以使用的,就是用APP控制時不知道怎么回事不太靈敏,有時候要點擊APP上的開或者關(guān)按鍵多次才能夠正確的執(zhí)行亮滅LED的了
回復(fù)

使用道具 舉報

12#
ID:787683 發(fā)表于 2020-6-23 14:42 | 只看該作者
看一下效果
回復(fù)

使用道具 舉報

13#
ID:787683 發(fā)表于 2020-6-23 14:43 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

14#
ID:430492 發(fā)表于 2020-6-24 11:15 | 只看該作者
這個不錯的思路!家電都可以手機WIFI控制了!
回復(fù)

使用道具 舉報

15#
ID:724172 發(fā)表于 2020-6-29 10:54 | 只看該作者
真不錯的思路
回復(fù)

使用道具 舉報

16#
ID:56960 發(fā)表于 2020-7-10 14:14 | 只看該作者
真不錯的思路,路過頂一下!
回復(fù)

使用道具 舉報

17#
ID:65237 發(fā)表于 2020-7-14 21:39 | 只看該作者
謝謝分享 下載有空做一個
回復(fù)

使用道具 舉報

18#
ID:702127 發(fā)表于 2020-7-25 14:02 | 只看該作者
請問樓主,蘋果手機可以嗎?我按照您的教程一步一步來,8266通過USB轉(zhuǎn)串口連接到電腦后,蘋果手機可以正常連接wifi與串口,但是8266連接到單片機后,蘋果手機只能連接wifi,連接串口時顯示連接失敗。
回復(fù)

使用道具 舉報

19#
ID:65237 發(fā)表于 2020-7-27 21:05 | 只看該作者
樓主請教下 你這是通過路 手機APP 路郵器 8266 單片機控制電路 是嗎  其中路郵器那塊怎么設(shè)置 能講一下嗎
回復(fù)

使用道具 舉報

20#
ID:65237 發(fā)表于 2020-7-29 16:52 來自手機 | 只看該作者
denminshen 發(fā)表于 2020-6-3 13:13
這個經(jīng)過測試單片機這邊的程序可以使用的,就是用APP控制時不知道怎么回事不太靈敏,有時候要點擊APP上的開 ...

你好 你做的是直接app和esp8266直接連嗎?中間有通過路由器沒 還有app上面二項是怎么設(shè)置的 求指點啊 搞了好久app里二項tcp那里
回復(fù)

使用道具 舉報

21#
ID:65237 發(fā)表于 2020-7-30 17:16 來自手機 | 只看該作者
ziziziziz 發(fā)表于 2019-6-6 16:13
請問這個app點連接/監(jiān)聽,怎么知道連上了呢?

你是看那里說連上了
回復(fù)

使用道具 舉報

22#
ID:495323 發(fā)表于 2020-10-18 11:11 | 只看該作者
軟件:TCP連接。樓主做的和我相同可以參考我的
,
回復(fù)

使用道具 舉報

23#
ID:810999 發(fā)表于 2020-10-23 08:59 | 只看該作者
非常不錯,學(xué)習(xí)了。
回復(fù)

使用道具 舉報

24#
ID:881400 發(fā)表于 2021-1-29 14:55 | 只看該作者
用app控制不太靈敏,需要發(fā)送好幾次數(shù)據(jù)才能打開或關(guān)閉,這是怎么回事呀?
回復(fù)

使用道具 舉報

25#
ID:545457 發(fā)表于 2021-1-29 17:29 | 只看該作者
打擾,請問為什么下載后沒有程序?
回復(fù)

使用道具 舉報

26#
ID:545457 發(fā)表于 2021-1-29 17:36 | 只看該作者
GitHub 發(fā)表于 2019-11-14 10:40
下載了,文件夾里沒有程序

我也是這個情況,不知道您解決了嗎
回復(fù)

使用道具 舉報

27#
ID:915899 發(fā)表于 2021-5-5 15:30 | 只看該作者
沒有單片機程序在里面啊
回復(fù)

使用道具 舉報

28#
ID:328014 發(fā)表于 2021-5-5 17:30 | 只看該作者
929260 發(fā)表于 2021-5-5 15:30
沒有單片機程序在里面啊

單片機C語言程序有198行,不用下載 直接在網(wǎng)頁上復(fù)制即可
回復(fù)

使用道具 舉報

29#
ID:430492 發(fā)表于 2021-5-5 19:59 | 只看該作者
沒有APP的源程序,只有APK。
回復(fù)

使用道具 舉報

30#
ID:579174 發(fā)表于 2021-5-11 19:36 | 只看該作者
打卡,以后好找到!感謝分享!
回復(fù)

使用道具 舉報

31#
ID:409166 發(fā)表于 2021-5-13 21:16 | 只看該作者
感謝,正需要呢,下來學(xué)習(xí)下。
回復(fù)

使用道具 舉報

32#
ID:197229 發(fā)表于 2021-5-15 05:45 | 只看該作者
下載了app文件壓縮檔 7z格式要用什么軟件打開?那位朋友能發(fā)給我一份解壓好的?感謝先
回復(fù)

使用道具 舉報

33#
ID:403144 發(fā)表于 2021-5-17 18:16 | 只看該作者
這個壓縮包里面怎么沒有51單片機的程序啊

回復(fù)

使用道具 舉報

34#
ID:61192 發(fā)表于 2021-6-10 21:07 | 只看該作者
darkside 發(fā)表于 2021-5-17 18:16
這個壓縮包里面怎么沒有51單片機的程序啊

看28#已經(jīng)回答了
回復(fù)

使用道具 舉報

35#
ID:920914 發(fā)表于 2021-6-14 15:55 | 只看該作者
多謝大佬分享技術(shù)
回復(fù)

使用道具 舉報

36#
ID:941748 發(fā)表于 2021-6-21 18:06 | 只看該作者
wifi模塊?
回復(fù)

使用道具 舉報

37#
ID:624685 發(fā)表于 2021-6-21 18:54 | 只看該作者
先收藏,剛剛開始學(xué)習(xí),后邊一定用的到。謝謝
回復(fù)

使用道具 舉報

38#
ID:1010593 發(fā)表于 2022-3-15 21:31 | 只看該作者
樓主很詳細的介紹。多謝了
回復(fù)

使用道具 舉報

39#
ID:974905 發(fā)表于 2022-7-6 00:15 | 只看該作者
ESP8266 的 默認 baud 不是115200嗎?  用9600 可以調(diào)試?
回復(fù)

使用道具 舉報

40#
ID:36322 發(fā)表于 2023-2-16 23:15 | 只看該作者
解決了入門的第一步,終于有反應(yīng)了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表