前段時(shí)間在某寶買了個(gè)ESP8266模塊,用來實(shí)現(xiàn)和51單片機(jī)的通信,現(xiàn)在將大致過程分享一下,希望能幫助到那些想學(xué)習(xí)的小白 三部分內(nèi)容:配置模塊、模塊與51單片機(jī)簡單通信、出廠固件的燒錄 附件里有pdf教程,跟帖子內(nèi)容一樣的,瀏覽體驗(yàn)可能會更好一點(diǎn)
我買的是8266-01,引腳圖如下
引腳說明: • VCC接3.3v,接5v時(shí)間長了可能會燒 • UTXD,URXD和其它的TXD,RXD接時(shí)注意交叉接就行了 • CH_PD要給高電平模塊才工作 • GPIO0一般不用管,燒錄固件時(shí)要接地 • RST低電平復(fù)位,高電平工作(默認(rèn)高) • GPIO2必須為高電平,內(nèi)部默認(rèn)已拉高,不用管
一、配置模塊: 一般接線如下,圖為模塊與usb轉(zhuǎn)ttl模塊的接線,與單片機(jī)的接線也類似
下圖為我的連接圖,我這個(gè)usb轉(zhuǎn)ttl模塊的VCC引腳是輸出3.3v的
接到電腦usb口,打開串口調(diào)試助手,wifi模塊買回來的時(shí)候波特率應(yīng)該都是115200,所以要把串口助手的波特率設(shè)置為115200,然后點(diǎn)擊打開串口。
用到的AT指令如下: • AT(返回ok表示通信成功) • AT+CIOBAUD=X(改模塊的波特率,X為要改成的波特率,因單片機(jī)達(dá)不到太高的波特率所以要更改一下波特率,因?yàn)槲覍W(xué)習(xí)板上的晶振是12MHZ的,所以我這里改成4800,原因后面會說到,一般改9600就行,改完之后記得把串口助手的波特率也設(shè)置成新波特率,再發(fā)AT,有ok表明通信成功)
• AT+CWMODE=X(設(shè)置工作模式指令,X可以是1、2、3,具體如下: 1:Station模式 2:AP模式 3:Station+AP模式 Station可理解為讓wifi模塊去連接路由器或熱點(diǎn),此時(shí)模塊作為客戶端 AP模式可理解為模塊本身是一個(gè)熱點(diǎn),手機(jī)或電腦可以連接這個(gè)熱點(diǎn),此時(shí)模塊作為服務(wù)器。 這里講的是AP模式,Station模式不講,可以自己去了解。 • AT+RST(重啟指令,設(shè)置新的工作模式后需重啟才能生效。發(fā)送完這條指令后再發(fā)送其它指令可能會顯示串口無效,需要退出串口調(diào)試助手再重新進(jìn)入。)
• AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>(設(shè)置AP模式下的參數(shù),簡單點(diǎn)說就是設(shè)置熱點(diǎn)的名字,密碼之類的,例如AT+CWSAP=”8266”,“66666666”,0,3)
這里我不設(shè)置,用默認(rèn)的 • AT+CWSAP?(可以查看當(dāng)前AP模式下模塊熱點(diǎn)的具體信息) • AT+CIFSR(查看IP地址,好像都是192.168.4.1) • AT+CIPMUX=1(開啟多連接,貌似最多可以有5臺設(shè)備連接這個(gè)模塊,設(shè)備id分別分配為0到4) • AT+CIPSERVER=1,X(1表示開啟服務(wù)器,X為自己設(shè)置的端口號,一般設(shè)3或4位。也可以只開啟服務(wù)器而不設(shè)置端口號,默認(rèn)端口是333好像) 注:倒數(shù)的這兩條指令在模塊掉電后需要重新配置,其它那幾條配置過一次不用再重新配置了。
到這里拿出手機(jī),打開wifi并連接上模塊的熱點(diǎn),如果搜不到熱點(diǎn)可以試一下拔了重插,再重新發(fā)那兩條指令。
連接熱點(diǎn)成功后打開網(wǎng)絡(luò)調(diào)試助手這個(gè)軟件,右滑進(jìn)入設(shè)置,協(xié)議設(shè)置為TCP Client,即客戶端模式,IP地址為192.168.4.1,端口為剛才設(shè)置的,然后點(diǎn)連接,連接成功后就能通信了。
這里發(fā)送了hello和hello66666666,可以看到電腦上的串口調(diào)試助手顯示到手機(jī)發(fā)送過去的信息,這里注意到信息前還附帶了+IPD,0,X:這里的0表示設(shè)備id號,表示第0臺設(shè)備發(fā)送過來的信息,然后X表示信息包含的字符數(shù)量。
二、模塊與51單片機(jī)通信 程序比較簡單,實(shí)現(xiàn)的功能:手機(jī)發(fā)一個(gè)A,學(xué)習(xí)板上的燈亮,發(fā)B滅燈,簡單地測試一下。下圖是我的連線,很亂,主要注意接對就行了,學(xué)習(xí)板沒有3.3v,接了一個(gè)降壓模塊給模塊供電。
程序: - #include <reg52.h>
- #include "intrins.h"
- sbit LED1=P2^0;
- typedef unsigned int u16;
- typedef unsigned char u8;
- u8 receive[2];
- u8 sign=0;
- void delay1s(void) //誤差 0us
- {
- u8 a,b,c;
- for(c=46;c>0;c--)
- for(b=152;b>0;b--)
- for(a=70;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- }
- //初始化串口
- void Init()
- {
- SCON = 0x50; //串口模式1,允許接收
- TMOD = 0x20; //T1工作模式2,自動(dòng)重裝
- PCON = 0x80; //波特率倍增
- REN = 1;
- //根據(jù)實(shí)際選擇
- // TH1 = 0xfa; //波特率9600(11.0592)
- TH1 = 0xf3; //波特率4800(12.0000)
- // TH1 = 0xf4; //波特率4800(11.0592)
- TL1 = TH1;
- RI=0;
- EA = 1;
- ES = 0;
- TR1 = 1;
- }
- //發(fā)送字符
- void send(u8 value)
- {
- ES=0; //關(guān)閉串口中斷
- TI=0; //清發(fā)送完畢中斷請求標(biāo)志位
- SBUF=value; //發(fā)送
- while(!TI); //等待發(fā)送完畢
- TI=0; //清發(fā)送完畢中斷請求標(biāo)志位
- ES=1; //允許串口中斷
- }
- //單片機(jī)向模塊發(fā)送AT指令
- void wifi_init()
- {
- u8 j=0;
- u8a[]="AT+CIPMUX=1\r\n"; //那兩條掉電要重新配置的指令
- u8b[]="AT+CIPSERVER=1,6666\r\n";
- while(a[j]!='\0')
- {
- send(a[j]);
- j++;
- }
- j=0; //清零準(zhǔn)備發(fā)第二條指令
- delay1s(); //延時(shí)一下
- while(b[j]!='\0')
- {
- send(b[j]);
- j++;
- }
- delay1s();
- }
- void wifi_data()
- {
- if(receive[0]=='A') LED1=0; //亮
- if(receive[0]=='B') LED1=1; //滅
- }
- void main()
- {
- Init();
- wifi_init();
- while(1)
- {
- wifi_data();
- }
- }
- //中斷程序,此程序只把+IPD,x,x:后的有用數(shù)據(jù)存進(jìn)receive數(shù)組里
- void ZD() interrupt 4
- {
- if(RI)
- {
- RI=0;
- if(sign==1)
- {
- receive[0]=SBUF;
- sign=0; //保存receive[0]的數(shù)據(jù)
- }
- if(SBUF==':') sign=1;
- }
- }
復(fù)制代碼
上面提到的波特率問題,簡單地說,11.0592是最適合通信的,如果用12的話會有誤差,12的晶振在波特率為4800且加倍時(shí)(即SMOD為1),誤差會比較小,所以這也是我設(shè)置波特率為4800的原因,詳細(xì)可以看一下下面這張圖。
三、燒錄出廠AT固件 剛接觸8266模塊的時(shí)候,有些地方不是很懂,一頓亂操作之后啥也沒搞成,當(dāng)時(shí)燒錄了一個(gè)我也不知道有什么用的固件,然后經(jīng)常傻傻的,有很多奇怪的情況,后來燒錄了出廠固件功能就正常了,在這也寫一下具體操作。
接線方面,如下圖,主要是綠色那條,GPIO0接低電平時(shí)為下載模式。
電腦打開燒寫軟件
選中文件夾里面bin后綴的固件
按下圖配置好,選擇對應(yīng)串口,點(diǎn)擊START即可燒寫
瞎說一些: • 本人小白一個(gè),也有很多不懂的地方,說的可能不是很對 • 如想了解更多,鏈接: wiki.ai-thinker點(diǎn)com/esp8266 • 對于不會java和安卓開發(fā)之類的又想弄個(gè)小app來實(shí)現(xiàn)控制硬件的,可以去了解一下E4A,中文編程,軟件里面有很多例程,例如客戶端,服務(wù)器之類的例程,可以參考一下然后自己整一個(gè)app,這個(gè)比較容易上手,有興趣的可以去學(xué)習(xí)一下。
全部資料51hei下載地址:
所有資料.zip
(14.59 MB, 下載次數(shù): 1196)
2019-5-9 23:28 上傳
點(diǎn)擊文件名下載附件
|