找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 46079|回復: 84
打印 上一主題 下一主題
收起左側

ESP8266 wifi模塊與51單片機通信入門教程,模塊出廠固件燒錄

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:479008 發(fā)表于 2019-5-9 23:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
前段時間在某寶買了個ESP8266模塊,用來實現(xiàn)和51單片機的通信,現(xiàn)在將大致過程分享一下,希望能幫助到那些想學習的小白
三部分內(nèi)容:配置模塊、模塊與51單片機簡單通信、出廠固件的燒錄
附件里有pdf教程,跟帖子內(nèi)容一樣的,瀏覽體驗可能會更好一點

我買的是8266-01,引腳圖如下



    引腳說明:
    •   VCC接3.3v,接5v時間長了可能會燒
    •   UTXD,URXD和其它的TXD,RXD接時注意交叉接就行了
    •   CH_PD要給高電平模塊才工作
    •   GPIO0一般不用管,燒錄固件時要接地
    •   RST低電平復位,高電平工作(默認高)
    •   GPIO2必須為高電平,內(nèi)部默認已拉高,不用管

一、配置模塊:
一般接線如下,圖為模塊與usb轉(zhuǎn)ttl模塊的接線,與單片機的接線也類似



下圖為我的連接圖,我這個usb轉(zhuǎn)ttl模塊的VCC引腳是輸出3.3v的



接到電腦usb口,打開串口調(diào)試助手,wifi模塊買回來的時候波特率應該都是115200,所以要把串口助手的波特率設置為115200,然后點擊打開串口。

用到的AT指令如下:
•   AT(返回ok表示通信成功)
•   AT+CIOBAUD=X(改模塊的波特率,X為要改成的波特率,因單片機達不到太高的波特率所以要更改一下波特率,因為我學習板上的晶振是12MHZ的,所以我這里改成4800,原因后面會說到,一般改9600就行,改完之后記得把串口助手的波特率也設置成新波特率,再發(fā)AT,有ok表明通信成功)


•   AT+CWMODE=X(設置工作模式指令,X可以是1、2、3,具體如下:
1:Station模式
2:AP模式
3:Station+AP模式
Station可理解為讓wifi模塊去連接路由器或熱點,此時模塊作為客戶端
AP模式可理解為模塊本身是一個熱點,手機或電腦可以連接這個熱點,此時模塊作為服務器。
這里講的是AP模式,Station模式不講,可以自己去了解。
•   AT+RST(重啟指令,設置新的工作模式后需重啟才能生效。發(fā)送完這條指令后再發(fā)送其它指令可能會顯示串口無效,需要退出串口調(diào)試助手再重新進入。)



•   AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>(設置AP模式下的參數(shù),簡單點說就是設置熱點的名字,密碼之類的,例如AT+CWSAP=”8266”,“66666666”,0,3)



這里我不設置,用默認的
•   AT+CWSAP?(可以查看當前AP模式下模塊熱點的具體信息)
•   AT+CIFSR(查看IP地址,好像都是192.168.4.1)
•   AT+CIPMUX=1(開啟多連接,貌似最多可以有5臺設備連接這個模塊,設備id分別分配為0到4)
•   AT+CIPSERVER=1,X(1表示開啟服務器,X為自己設置的端口號,一般設3或4位。也可以只開啟服務器而不設置端口號,默認端口是333好像)
注:倒數(shù)的這兩條指令在模塊掉電后需要重新配置,其它那幾條配置過一次不用再重新配置了。




到這里拿出手機,打開wifi并連接上模塊的熱點,如果搜不到熱點可以試一下拔了重插,再重新發(fā)那兩條指令。



連接熱點成功后打開網(wǎng)絡調(diào)試助手這個軟件,右滑進入設置,協(xié)議設置為TCP Client,即客戶端模式,IP地址為192.168.4.1,端口為剛才設置的,然后點連接,連接成功后就能通信了。



這里發(fā)送了hello和hello66666666,可以看到電腦上的串口調(diào)試助手顯示到手機發(fā)送過去的信息,這里注意到信息前還附帶了+IPD,0,X:這里的0表示設備id號,表示第0臺設備發(fā)送過來的信息,然后X表示信息包含的字符數(shù)量。


二、模塊與51單片機通信
程序比較簡單,實現(xiàn)的功能:手機發(fā)一個A,學習板上的燈亮,發(fā)B滅燈,簡單地測試一下。下圖是我的連線,很亂,主要注意接對就行了,學習板沒有3.3v,接了一個降壓模塊給模塊供電。



程序:
  1. #include <reg52.h>
  2. #include "intrins.h"
  3. sbit LED1=P2^0;
  4. typedef unsigned int u16;
  5. typedef unsigned char u8;
  6. u8 receive[2];
  7. u8 sign=0;
  8. void delay1s(void)   //誤差 0us
  9. {
  10.     u8 a,b,c;
  11.     for(c=46;c>0;c--)
  12.        for(b=152;b>0;b--)
  13.            for(a=70;a>0;a--);
  14.     _nop_();  //if Keil,require use intrins.h
  15. }
  16. //初始化串口
  17. void Init()
  18. {
  19.        SCON = 0x50;      //串口模式1,允許接收
  20.        TMOD = 0x20;    //T1工作模式2,自動重裝
  21.        PCON = 0x80;      //波特率倍增
  22.        REN = 1;
  23.                                          //根據(jù)實際選擇
  24. //  TH1 = 0xfa;          //波特率9600(11.0592)
  25.        TH1 = 0xf3;          //波特率4800(12.0000)
  26. //  TH1 = 0xf4;          //波特率4800(11.0592)
  27.        TL1 = TH1;
  28.        RI=0;
  29.        EA = 1;
  30.        ES = 0;
  31.        TR1 = 1;
  32. }
  33. //發(fā)送字符
  34. void send(u8 value)
  35. {
  36.        ES=0; //關閉串口中斷
  37.        TI=0; //清發(fā)送完畢中斷請求標志位
  38.        SBUF=value; //發(fā)送
  39.        while(!TI); //等待發(fā)送完畢
  40.        TI=0; //清發(fā)送完畢中斷請求標志位
  41.        ES=1; //允許串口中斷
  42. }
  43. //單片機向模塊發(fā)送AT指令
  44. void wifi_init()
  45. {
  46.        u8 j=0;
  47.    u8a[]="AT+CIPMUX=1\r\n";     //那兩條掉電要重新配置的指令
  48.    u8b[]="AT+CIPSERVER=1,6666\r\n";
  49.    while(a[j]!='\0')
  50.    {
  51.            send(a[j]);
  52.            j++;
  53.    }
  54.        j=0;                        //清零準備發(fā)第二條指令
  55.        delay1s();                    //延時一下
  56.        while(b[j]!='\0')
  57.    {
  58.            send(b[j]);
  59.            j++;
  60.    }
  61.        delay1s();
  62. }
  63. void wifi_data()
  64. {
  65.        if(receive[0]=='A')     LED1=0;    //亮
  66.        if(receive[0]=='B')    LED1=1;    //滅
  67. }   
  68. void main()
  69. {
  70.        Init();
  71.        wifi_init();
  72.        while(1)
  73.        {
  74.                 wifi_data();
  75.        }
  76. }
  77. //中斷程序,此程序只把+IPD,x,x:后的有用數(shù)據(jù)存進receive數(shù)組里
  78. void ZD() interrupt 4
  79. {
  80.        if(RI)
  81.        {
  82.                 RI=0;
  83.                 if(sign==1)
  84.                 {
  85.                         receive[0]=SBUF;
  86.                         sign=0;                    //保存receive[0]的數(shù)據(jù)
  87.                 }
  88.                 if(SBUF==':')       sign=1;
  89.        }
  90. }
復制代碼


上面提到的波特率問題,簡單地說,11.0592是最適合通信的,如果用12的話會有誤差,12的晶振在波特率為4800且加倍時(即SMOD為1),誤差會比較小,所以這也是我設置波特率為4800的原因,詳細可以看一下下面這張圖。



三、燒錄出廠AT固件
剛接觸8266模塊的時候,有些地方不是很懂,一頓亂操作之后啥也沒搞成,當時燒錄了一個我也不知道有什么用的固件,然后經(jīng)常傻傻的,有很多奇怪的情況,后來燒錄了出廠固件功能就正常了,在這也寫一下具體操作。

接線方面,如下圖,主要是綠色那條,GPIO0接低電平時為下載模式。



電腦打開燒寫軟件



選中文件夾里面bin后綴的固件



按下圖配置好,選擇對應串口,點擊START即可燒寫



瞎說一些:
•   本人小白一個,也有很多不懂的地方,說的可能不是很對
•   如想了解更多,鏈接: wiki.ai-thinker點com/esp8266
•   對于不會java和安卓開發(fā)之類的又想弄個小app來實現(xiàn)控制硬件的,可以去了解一下E4A,中文編程,軟件里面有很多例程,例如客戶端,服務器之類的例程,可以參考一下然后自己整一個app,這個比較容易上手,有興趣的可以去學習一下。


全部資料51hei下載地址:
所有資料.zip (14.59 MB, 下載次數(shù): 1196)

評分

參與人數(shù) 3黑幣 +72 收起 理由
lydsgy527 + 12 很給力!
西西弗 + 10 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏109 分享淘帖 頂8 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-5-10 05:00 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:302325 發(fā)表于 2019-5-10 08:52 | 只看該作者
感謝分享   CH_PD要給高電平模塊才工作  這條很 有用   以前一直不知道
回復

使用道具 舉報

地板
ID:158956 發(fā)表于 2019-5-10 16:55 來自手機 | 只看該作者
感謝分享,正好在研究這個
回復

使用道具 舉報

5#
ID:366617 發(fā)表于 2019-6-23 03:17 | 只看該作者
太棒了,真是了不起
回復

使用道具 舉報

6#
ID:499701 發(fā)表于 2019-7-5 12:42 | 只看該作者
樓主,CH_PD腳我是沒接的,也能正常工作,應該是默認上電高電平的
回復

使用道具 舉報

7#
ID:66302 發(fā)表于 2019-7-6 22:36 | 只看該作者
感謝分享~~~~~~~~~~~~~~~~~~~~~
回復

使用道具 舉報

8#
ID:282095 發(fā)表于 2019-7-7 10:33 | 只看該作者
wift模塊和6395串口進行通信
回復

使用道具 舉報

9#
ID:479008 發(fā)表于 2019-7-10 10:44 | 只看該作者
終極小饅頭啦 發(fā)表于 2019-7-5 12:42
樓主,CH_PD腳我是沒接的,也能正常工作,應該是默認上電高電平的

CH_PD沒接的話只能看到紅色燈亮,但是發(fā)AT指令是沒有反應的,wifi模塊應該沒有工作,CH_PD接高電平,插到電腦usb口時會看到藍色的燈閃爍,發(fā)AT指令正常。
回復

使用道具 舉報

10#
ID:584036 發(fā)表于 2019-7-16 11:25 | 只看該作者
我喜歡
回復

使用道具 舉報

11#
ID:471817 發(fā)表于 2019-7-16 13:48 來自手機 | 只看該作者
學習學習,感謝分享
回復

使用道具 舉報

12#
ID:574338 發(fā)表于 2019-7-30 20:09 來自手機 | 只看該作者
資料不錯,我已經(jīng)制作成功了
回復

使用道具 舉報

13#
ID:586578 發(fā)表于 2019-8-5 10:45 | 只看該作者
請問波特率更改不成功是怎么回事呢?手機也連接不上
回復

使用道具 舉報

14#
ID:479008 發(fā)表于 2019-8-5 14:48 | 只看該作者
zk_2019 發(fā)表于 2019-8-5 10:45
請問波特率更改不成功是怎么回事呢?手機也連接不上

你是指發(fā)更改波特率的AT指令返回的是error嗎?可以刷一下固件看看行不行
回復

使用道具 舉報

15#
ID:439613 發(fā)表于 2019-8-8 16:27 | 只看該作者
怎么讓單片機發(fā)給手機上
回復

使用道具 舉報

16#
ID:602358 發(fā)表于 2019-8-21 14:41 | 只看該作者
謝謝分享。!嘗試
回復

使用道具 舉報

17#
ID:577696 發(fā)表于 2019-8-22 18:53 | 只看該作者
我用的是8266MOD的板子,只需要連RX/TX和GND,已經(jīng)成功了
回復

使用道具 舉報

18#
ID:446113 發(fā)表于 2019-8-23 10:26 | 只看該作者
good 謝謝分享
回復

使用道具 舉報

19#
ID:581300 發(fā)表于 2019-8-24 15:56 | 只看該作者
為什么usb-ttl轉(zhuǎn)換器插到電腦上串口有警告?
回復

使用道具 舉報

20#
ID:164963 發(fā)表于 2019-8-24 21:32 | 只看該作者
收藏下…………………………
回復

使用道具 舉報

21#
ID:282095 發(fā)表于 2019-8-25 07:29 | 只看該作者
漲知識了 不錯不錯 感謝分享
回復

使用道具 舉報

22#
ID:479008 發(fā)表于 2019-8-25 07:54 | 只看該作者

RE: ESP8266 wifi模塊與51單片機通信入門教程,模塊出廠固件燒錄

Immortal盲點 發(fā)表于 2019-8-24 15:56
為什么usb-ttl轉(zhuǎn)換器插到電腦上串口有警告?

這個,,,你usb-ttl的驅(qū)動裝了嗎,如果裝了的話可能是電腦串口的某些問題吧,我也不太清楚。
回復

使用道具 舉報

23#
ID:581300 發(fā)表于 2019-8-25 16:20 來自手機 | 只看該作者
為什么連上單片機之后手機沒辦法連接8266而且下載不了程序到單片機上呢
回復

使用道具 舉報

24#
ID:427492 發(fā)表于 2019-8-25 20:22 | 只看該作者
感謝樓主分享,很不錯
回復

使用道具 舉報

25#
ID:198493 發(fā)表于 2019-10-15 17:09 | 只看該作者
幫大忙了,十分感謝
回復

使用道具 舉報

26#
ID:252935 發(fā)表于 2019-10-16 08:43 | 只看該作者
大學見人用串口,藍牙,ZIGBEE做過,
但是WIFI還是第一次
回復

使用道具 舉報

27#
ID:89591 發(fā)表于 2019-10-16 09:24 | 只看該作者
這個不錯啊
回復

使用道具 舉報

28#
ID:643340 發(fā)表于 2019-11-16 20:36 | 只看該作者
請問樓主,為啥要燒固件呀?
回復

使用道具 舉報

29#
ID:643340 發(fā)表于 2019-11-24 00:51 來自手機 | 只看該作者
q1914702038 發(fā)表于 2019-8-8 16:27
怎么讓單片機發(fā)給手機上

這得需要服務器,可以去用阿里云服務器,學生好像有優(yōu)惠
回復

使用道具 舉報

30#
ID:677072 發(fā)表于 2020-1-15 10:33 | 只看該作者
感謝樓主分享!特別是代碼方面的 對我的實現(xiàn)很有意義
回復

使用道具 舉報

31#
ID:686631 發(fā)表于 2020-1-16 13:41 | 只看該作者
感謝分享!再加一個手機APP就完美了
回復

使用道具 舉報

32#
ID:680501 發(fā)表于 2020-1-16 14:39 來自手機 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

33#
ID:434663 發(fā)表于 2020-3-6 10:15 | 只看該作者
用AT指令改過波特率,熱點名字,密碼,IP地址,工作模式 之后就永久有效了嗎? 還是用一次改一次?
回復

使用道具 舉報

34#
ID:94449 發(fā)表于 2020-3-9 12:06 | 只看該作者
好資料,已經(jīng)刷好原廠固件,可以改波特率了。
回復

使用道具 舉報

35#
ID:347467 發(fā)表于 2020-3-9 14:37 | 只看該作者
謝謝分享。
回復

使用道具 舉報

36#
ID:315554 發(fā)表于 2020-3-9 16:23 | 只看該作者
學習了,謝謝樓主,說明很詳細;
回復

使用道具 舉報

37#
ID:697407 發(fā)表于 2020-3-23 00:38 | 只看該作者
請問接usb轉(zhuǎn)ttl上的3.3v可以嗎,普中的板
回復

使用道具 舉報

38#
ID:686739 發(fā)表于 2020-3-23 11:33 來自手機 | 只看該作者
謝謝分享
回復

使用道具 舉報

39#
ID:69408 發(fā)表于 2020-4-16 15:40 | 只看該作者
非常詳細的資料,謝謝樓主分享!
回復

使用道具 舉報

40#
ID:608007 發(fā)表于 2020-4-17 09:21 | 只看該作者
值得學習 感謝樓主的分享
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表