標(biāo)題: ESP8266模塊與單片機(jī)的通信程序(硬件與軟件詳解) [打印本頁(yè)]

作者: fkup    時(shí)間: 2017-12-27 16:44
標(biāo)題: ESP8266模塊與單片機(jī)的通信程序(硬件與軟件詳解)
  初次接觸ESP8266模塊,說(shuō)實(shí)話還是費(fèi)了很大的勁,從硬件部分到軟件部分,一個(gè)一個(gè)的問(wèn)題對(duì)于我這個(gè)新手來(lái)說(shuō),確實(shí)有些吃力。不過(guò)還好,在51hei電子論壇有很多這方面的資料,也有很多很友好的人,感謝他們給予的幫助。
  雖然我是一個(gè)菜鳥(niǎo),但我還是希望和大家分享一下。時(shí)間比較倉(cāng)促,代碼也有很多不成熟的地方,希望能對(duì)初次接觸這個(gè)模塊的人有一些幫助。
  1,硬件:USB轉(zhuǎn)TTL是必需的,ESP8266模塊,一般模塊出廠就已經(jīng)燒好了固件,拿到就可以直接發(fā)AT指令,AT指令的手冊(cè)網(wǎng)上很多,可以自行百度。
  硬件連接  TXD-RXD, RXD-TXD; 交叉連接,有的模塊需要自己拉高一個(gè)引腳的電平,如圖所示,電源最好是3.3V,模塊發(fā)熱很?chē)?yán)重,不要長(zhǎng)時(shí)間接電。
  2 ,軟件:在執(zhí)行代碼之前,模塊要先設(shè)定好什么模式,用串口助手發(fā)送AT指令設(shè)定。我的是AP模式,模塊設(shè)定為server端,然后生成一個(gè)WiFi,名字隨   意,這個(gè)時(shí)候(當(dāng)然得知道模塊的IP地址),可以用電腦上的網(wǎng)絡(luò)助手,嘗試連接模塊,電腦必須連接ESP8266模塊產(chǎn)生的WiFi才可以;這幾步之后,模塊就可以連接已經(jīng)下載好的單片機(jī)了,在上面設(shè)定好之后,模塊斷電重啟后,在設(shè)定的模式不會(huì)變,WiFi不會(huì)變,后面的指令就需要通過(guò)單片機(jī)發(fā)送了。到這兒基本就可以實(shí)現(xiàn)簡(jiǎn)單的通訊了,程序工程已附上。

時(shí)間倉(cāng)促,我也是這幾天才學(xué)的,分享只是為了更多的分享,不足的地方希望諒解,目前準(zhǔn)備做433M。有愿意指導(dǎo)的或是技術(shù)交流的可以加我qq1946706342

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit D1 = P2^0;
  7. sbit D2 = P2^1;
  8. sbit D3 = P2^2;
  9. sbit D4 = P2^3;
  10. sbit D5 = P2^4;
  11. sbit D6 = P2^5;
  12. sbit D7 = P2^6;
  13. sbit D8 = P2^7;

  14. uchar Receive;
  15. uchar Recive_table[15];
  16. uchar flag = 1;
  17. uchar flag1 = 1;
  18. uchar flag2 = 0;
  19. uchar num = 0;
  20. uint i=0;
  21. void ms_delay(uint n)        
  22. {
  23.         uint j,m;
  24.         for( m =n; m>0; m--)
  25.         for(j=110; j>0; j--);
  26. }
  27. void us_delay(uchar n)
  28. {
  29.         while(n--);
  30. }

  31. void Usart_init()
  32. {
  33.         SCON = 0x50;        //設(shè)置串行口工作在方式一,且啟動(dòng)串行口接收(REN=1)
  34.         TMOD = 0x20;        //設(shè)置計(jì)數(shù)器1工作在方式二,即自動(dòng)重裝計(jì)數(shù)值(8位)
  35.         PCON=0X80;
  36.         TH1 = 0xf3;                //設(shè)置波特率為4800
  37.         TL1 = 0xf3;
  38.         
  39.         EA = 1;       //開(kāi)總中斷
  40.         TR1 = 1;                         //啟動(dòng)計(jì)數(shù)器
  41. }

  42. void sent_AT(uchar *at_comd)
  43. {
  44.         ES = 0;
  45.         while(*at_comd != '\0')  //字符串結(jié)束標(biāo)志
  46.         {
  47.                 TI = 0;
  48.                 SBUF = *at_comd;
  49.                 while(!TI);
  50.                 TI = 0;
  51.                 us_delay(5);
  52.                 at_comd++;
  53.         }
  54.         us_delay(5);
  55.         SBUF = '\r';
  56.         while(!TI);
  57.         TI = 0;
  58.         us_delay(5);
  59.         SBUF = '\n';
  60.         while(!TI);
  61.         TI = 0;
  62. }
  63. void main()
  64. {

  65.                 uchar Recivedat;
  66.         //        uchar Rec;
  67.         
  68.                 Usart_init();
  69.                 ms_delay(5000);
  70.                 ES = 0;
  71.                 while(flag == 1){
  72.                         sent_AT("AT+CIPMUX=1");//最方便的是直接printf("AT+CIPMUX=1\r\n");我想弄清楚發(fā)送原理,所以繞了一個(gè)彎
  73.                                 flag1 = 1;
  74.                                 while(flag1 == 1)//檢測(cè)模塊是否返回OK
  75.                                 {
  76.                                         if(RI)
  77.                                         {
  78.                                                 RI = 0;
  79.                                                 Recivedat = SBUF;
  80.                                                 if(Recivedat == 'K')
  81.                                                 {
  82.                                                         flag = 0;
  83.                                                         flag1 = 0;
  84.                                                 }
  85.                                         }
  86.                                         num++;
  87.                                         if(num == 1000)
  88.                                         {
  89.                                                 num = 0;
  90.                                                 flag1 = 0;
  91.                                         }
  92.                                 }
  93.                         }
  94.                 flag = 1;
  95.                 flag1 = 1;
  96.                 num = 0;
  97.           D1 = 0;
  98.                         
  99.                 while(flag == 1){
  100.                                 sent_AT("AT+CIPSERVER=1,8080");
  101.                                 flag1 = 1;
  102.                                 while(flag1 == 1)
  103.                                 {
  104.                                         if(RI)
  105.                                         {
  106.                                                 RI = 0;
  107.                                                 Recivedat = SBUF;
  108.                                                 if(Recivedat == 'K')
  109.                                                 {
  110.                                                         flag = 0;
  111.                                                         flag1 = 0;
  112.                                                 }
  113.                                         }
  114.                                         num++;
  115.                                         if(num == 1000)
  116.                                         {
  117.                                                 num = 0;
  118.                                                 flag1 = 0;
  119.                                         }
  120.                                 }
  121.                         }
  122.                 flag = 1;
  123.                 flag1 = 1;
  124.                 num = 0;
  125.                 D2 = 0;                        
  126. //                RI=0;

  127.         ES = 1;        //開(kāi)串口中斷,接收完數(shù)據(jù),進(jìn)行處理
  128.         while(1);//掛住不讓代碼死掉
  129. }

  130. void Usat()interrupt 4//串口中斷里面接收從client端發(fā)過(guò)來(lái)的信息
  131. {
  132.                 if(RI==1)
  133.                 {
  134.                         RI=0;
  135.                         Recive_table[i] = SBUF;
  136.                         if(Recive_table[0]=='+')
  137.                         {
  138.                                 D3=0;
  139.                                 i++;
  140.                         }else{
  141.                                 D4=0;
  142.                                 i=0;
  143.                         }
  144.                         if(i>=10)  //這個(gè)參數(shù)很重要,因?yàn)閕++
  145.                         {        
  146. ……………………

  147. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
wifi_51_3.rar (31.37 KB, 下載次數(shù): 828)



作者: ntlclxyc    時(shí)間: 2018-2-11 16:53
好定西,值得參考
作者: 妒不    時(shí)間: 2018-4-19 15:15
謝謝分享
作者: 慣性想象me    時(shí)間: 2018-4-27 11:05
那個(gè)RST引腳和IO-O引腳是不是不用接?
作者: 戚嘉丶    時(shí)間: 2018-4-27 14:52
感謝分享
作者: 76711031    時(shí)間: 2018-4-30 13:22
謝謝分享
作者: 余大哥    時(shí)間: 2018-6-14 17:41
謝謝分享
作者: aj8714523    時(shí)間: 2018-7-8 22:58
perfect123 發(fā)表于 2018-6-30 15:13
你寫(xiě)了半天代碼,也沒(méi)說(shuō)清楚到底實(shí)現(xiàn)了什么功能,硬件連接實(shí)物圖也沒(méi)有照片

你真看代碼了嗎?實(shí)現(xiàn)的功能就是用單片機(jī)對(duì)ESP8266進(jìn)行設(shè)置。
作者: jhyeqf    時(shí)間: 2018-7-10 21:28
感謝樓主分享
作者: stinfo    時(shí)間: 2018-7-21 10:36
樓主你好,請(qǐng)問(wèn)下你單片機(jī)發(fā)送指令時(shí)候,不用帶\r\n嗎?

另外有個(gè)問(wèn)題想請(qǐng)教,我用C51單片機(jī)開(kāi)發(fā)板,把C51的TXD,RXD和ESP2866RXD,TXD連接后,用串口助手鏈接到開(kāi)發(fā)板的COM口,都是直接聯(lián)入ESP2866里面,C51不響應(yīng)我發(fā)送的指令,但是ESP2866會(huì)響應(yīng),請(qǐng)問(wèn)您有沒(méi)有遇到這個(gè)情況?
作者: qwthh    時(shí)間: 2018-7-26 09:55
電路圖能不能看看呢

作者: 特兒小跟班    時(shí)間: 2018-7-30 17:46
謝謝分享

作者: fuzhoudaxuelin    時(shí)間: 2018-8-7 20:52
不錯(cuò)的
作者: yrb1993    時(shí)間: 2018-8-8 09:26
stinfo 發(fā)表于 2018-7-21 10:36
樓主你好,請(qǐng)問(wèn)下你單片機(jī)發(fā)送指令時(shí)候,不用帶\r\n嗎?

另外有個(gè)問(wèn)題想請(qǐng)教,我用C51單片機(jī)開(kāi)發(fā)板,把C ...

如果發(fā)的指令后面不帶\r\n,ESP8266就不會(huì)有回復(fù)
作者: lyMarvin    時(shí)間: 2018-8-9 07:08
在此基礎(chǔ)上,是否可以通過(guò)ESP8266讀取某網(wǎng)站的天氣信息?
一直沒(méi)有找到用51單片機(jī)獲得天氣信心的資料
作者: lizengjie    時(shí)間: 2018-8-9 08:10
好東西,學(xué)習(xí)一下
作者: 中分男神    時(shí)間: 2018-9-4 19:12
慣性想象me 發(fā)表于 2018-4-27 11:05
那個(gè)RST引腳和IO-O引腳是不是不用接?

我也想知道誒,請(qǐng)問(wèn)一下你找到答案了嗎?
作者: leviiii    時(shí)間: 2018-9-7 21:34
很給力!
作者: leviiii    時(shí)間: 2018-9-7 22:39
好東西
作者: yleer3407    時(shí)間: 2018-10-4 13:31
點(diǎn)贊。。。。。。。。。。。。。。!
作者: Duo2048    時(shí)間: 2018-10-5 16:35
看看啊看
作者: zjj1998    時(shí)間: 2018-10-31 01:51
感謝樓主分享!
作者: 單片機(jī)1234567    時(shí)間: 2018-10-31 09:21
謝謝分享,這個(gè)可以用嗎
作者: gogokl    時(shí)間: 2018-11-12 09:41
謝謝分享
作者: qq23230233    時(shí)間: 2018-11-12 17:32
lyMarvin 發(fā)表于 2018-8-9 07:08
在此基礎(chǔ)上,是否可以通過(guò)ESP8266讀取某網(wǎng)站的天氣信息?
一直沒(méi)有找到用51單片機(jī)獲得天氣信心的資料

和你做同一樣?xùn)|西,至于天氣情況我能通過(guò)Python爬取天氣網(wǎng)站信息獲得,那么如何通過(guò)8266+c51----電腦之間連接數(shù)據(jù)我就不懂了
作者: zhao321    時(shí)間: 2018-11-14 11:22
很好,很清楚
作者: zdxshr    時(shí)間: 2018-12-1 19:43
硬件連接那部分學(xué)習(xí)到了,謝謝
作者: qxm666    時(shí)間: 2019-3-12 15:29
還沒(méi)試過(guò)
作者: 811787454    時(shí)間: 2019-3-14 03:24
謝謝分享!
作者: ZICHENGYINGJIAN    時(shí)間: 2019-3-14 11:13
謝謝樓主分享!
作者: zcy5621194    時(shí)間: 2019-3-21 12:55
我頂樓主,我想問(wèn)個(gè)問(wèn)題,就是esp8266如何發(fā)送數(shù)據(jù)給51單片機(jī)
作者: fanxiaoer    時(shí)間: 2019-3-22 15:06
太感謝您的幫助了
作者: JC111111    時(shí)間: 2019-3-23 16:04
謝謝分享
作者: wanglx    時(shí)間: 2019-4-10 20:33
正想學(xué)習(xí)ESP8266,謝謝樓主
作者: ben0147    時(shí)間: 2019-4-16 12:49
謝謝分享!!!!!!!
作者: qinjiabao    時(shí)間: 2019-4-17 17:15
好東西呀
作者: HughDai    時(shí)間: 2019-4-17 21:28
謝謝樓主  之前8266一直是用延時(shí)做的 現(xiàn)在能讓他自行判斷了
作者: JamesGordan    時(shí)間: 2019-4-22 22:33
為什么我的WiFi模塊連接上單片機(jī) 通過(guò)sscom發(fā)送AT指令 串口沒(méi)有反應(yīng)
作者: 1962306553    時(shí)間: 2019-5-9 22:00
這真的很不錯(cuò)
作者: 西瓜不懂檸檬    時(shí)間: 2019-5-15 22:58
很好用
作者: gnalorange    時(shí)間: 2019-5-25 21:50
是完整資料么?
作者: panlongdian    時(shí)間: 2019-5-26 09:53
感謝分享,有時(shí)間可以做做。
作者: lwh999995    時(shí)間: 2019-6-6 23:05
學(xué)習(xí)學(xué)習(xí)!!!!!!!!  AT沒(méi)怎么玩過(guò),用的SDK
作者: jemery1030    時(shí)間: 2019-7-19 12:07
感謝寶貴資料無(wú)私分享
作者: 追蝴蝶的貓    時(shí)間: 2019-7-25 17:29
感謝樓主分享
作者: 401086798    時(shí)間: 2019-10-23 12:55
感謝樓主
作者: ouwen    時(shí)間: 2019-11-4 16:51
謝謝樓主
作者: szzxl10    時(shí)間: 2019-11-4 18:08
這真的很不錯(cuò)
作者: GitHub    時(shí)間: 2019-11-5 09:20
不錯(cuò),初學(xué)有意
作者: diligence丶    時(shí)間: 2019-11-14 11:32
謝謝,很不錯(cuò)啊
作者: pxh316    時(shí)間: 2019-11-30 09:41
謝謝樓主分享
作者: 1286086241    時(shí)間: 2019-12-16 02:10
謝謝分享!
作者: STC89C54RC    時(shí)間: 2019-12-27 16:51
正在準(zhǔn)備學(xué)習(xí), 模塊也到了, 希望能有幫助。感謝樓主分享。
作者: A_heibai    時(shí)間: 2020-5-22 16:36
感謝分享!!
作者: fannec    時(shí)間: 2021-6-28 09:08
也是新人,剛好可以學(xué)習(xí),感謝分享。
作者: 12111lll    時(shí)間: 2022-1-16 23:30
stinfo 發(fā)表于 2018-7-21 10:36
樓主你好,請(qǐng)問(wèn)下你單片機(jī)發(fā)送指令時(shí)候,不用帶\r\n嗎?

另外有個(gè)問(wèn)題想請(qǐng)教,我用C51單片機(jī)開(kāi)發(fā)板,把C ...

你解決這個(gè)問(wèn)題了嘛,我遇到了





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1