ESP8266使用總結(jié)(一)
首先,該模塊使用了AT指令進(jìn)行操作,我們要做的,就是將需要的AT指令,以字符串的形式發(fā)給模塊,即可實(shí)現(xiàn)相應(yīng)的功能。
1. wifi模塊ESP8266的默認(rèn)波特率是115200,但是單片機(jī)不能達(dá)到那么快的傳輸速率,只能使用4800bps,那么設(shè)置的時(shí)候,必不可少的要先用轉(zhuǎn)串口調(diào)試下載器(速度比較快,而且wifi模塊默認(rèn)115200bps,用單片機(jī)不能正確更改波特率,轉(zhuǎn)串口工具可以),設(shè)置指令,AT+UART=4800,8,1,0,0,詳細(xì)見(jiàn)手冊(cè),可以靈活設(shè)置。
2. 設(shè)置完成以后,wifi模塊在掉電以后還是會(huì)保持4800bps,下次使用,不再需要修改。
3. 在使用單片機(jī)對(duì)wifi模塊進(jìn)行操作的時(shí)候,首先串口的波特率要設(shè)為4800,也就是TH1的初值必須是0xfa,這樣再晶振為11.0592MHz的時(shí)候,可以準(zhǔn)確的得到4800bps。
4. 然后,先不插wifi模塊的TX,DX到單片機(jī)的P30和P31口,因?yàn)橄螺d程序的時(shí)候需要使用到這兩個(gè)口,不能被干擾。下載程序完成以后,先斷電,再把wifi模塊的兩個(gè)引腳接上,注意,模塊和單片機(jī)上的TX,DX是交叉接的,這樣才能正確工作,不像最小系統(tǒng)板下載程序的時(shí)候是對(duì)應(yīng)接的。
5. 最后再把單片機(jī)上電。還有一個(gè)注意的地方,就是,因?yàn)?800bps的話(huà),傳輸速率比較慢,所以,在程序中每發(fā)送一條AT指令,必須要加以一定的延時(shí),起碼500ms我認(rèn)為,這樣保證模塊的初始化時(shí)正確的。
6. 打開(kāi)手機(jī),連上對(duì)應(yīng)的wifi,再輸入對(duì)應(yīng)的IP地址和端口號(hào),以及密碼,就可以傳輸數(shù)據(jù)了,但是讓wifi模塊把單片機(jī)上的數(shù)據(jù)傳輸?shù)绞謾C(jī)上還沒(méi)有完成,有待增加此方法。
7. 經(jīng)過(guò)一下午的調(diào)試,找到如何解決問(wèn)題了,原來(lái)問(wèn)題在于我的操作問(wèn)題。每次創(chuàng)建了wifi,要先連上wifi才能夠讓wifi傳數(shù)據(jù)給手機(jī),手機(jī)沒(méi)自動(dòng)連接!
ESP8266使用總結(jié)(二)
1. 注意:ESP8266作為T(mén)CP Server時(shí),存在超時(shí)機(jī)制,一段時(shí)間沒(méi)有數(shù)據(jù)往來(lái),就把client踢掉,所以程序中要有保持連接的操作,或者可以通過(guò)設(shè)置AT指令,設(shè)置不能踢掉客戶(hù)端模式,但是不建議這樣做。
2. 在設(shè)置模式等都完成以后,用手機(jī)可以連上wifi模塊,可以向wifi模塊發(fā)送數(shù)據(jù)。但是想要把wifi模塊上的數(shù)據(jù)回過(guò)來(lái),需要通過(guò)客戶(hù)的連接號(hào)才能辨清是哪一個(gè)client發(fā)送過(guò)來(lái)請(qǐng)求,例如:0,CONNECT,然后再把數(shù)據(jù)根據(jù)連接號(hào)把數(shù)據(jù)發(fā)送給該client,這樣保證傳輸數(shù)據(jù)的正確性。接收到數(shù)據(jù)的格式:+IPD,0,3:ddf;+IPD,0,7:gfsghhf,這樣的話(huà),需要通過(guò)字符串的辨析,才能知道哪個(gè)客戶(hù)端連接號(hào)發(fā)來(lái)數(shù)據(jù)了,例如上面舉例,是客戶(hù)端連接號(hào)為0,發(fā)送過(guò)來(lái)數(shù)據(jù)了。
3. 使用AT指令時(shí),必須是以字符串的形式傳輸?shù)絯ifi模塊中,所以,需要用到uart_sendstr,但是,有的指令是字符串中包含了字符串,編譯的時(shí)候不能正確識(shí)別,所以需要字符串轉(zhuǎn)UTF-8工具(ESP8266使用的是UTF-8標(biāo)準(zhǔn)),注意不能刪掉字符串中的空,逗號(hào),句號(hào)換行符什么的,如圖
4. 今天發(fā)現(xiàn),第3條可以有更好的解決方法,而且很簡(jiǎn)單,只是用的比較少,我也沒(méi)想到,字符串中的字符串使用\”…。\”表示即可!(需要好好補(bǔ)補(bǔ)C語(yǔ)言了)
5. 51單片機(jī)程序中,需要對(duì)字符串進(jìn)行很多操作,例如:AT指令和參數(shù)的拼接(這樣比較靈活,參數(shù)最好也是字符串形式,減少工作量),截取wifi模塊發(fā)送給單片機(jī)的字符串提示信息等等,所以我們需要做的是對(duì)字符串進(jìn)行正確操作,每一個(gè)字符串函數(shù)都要測(cè)試功能,確保正確才能加入使用。
6. 剛剛新買(mǎi)的wifi模塊,要想在51單片機(jī)上使用,就要將波特率設(shè)的比較低,那么在使用AT+UART=4800,8,1,0,0命令的時(shí)候,一旦將最后第二個(gè)數(shù)據(jù)改了,那么串口調(diào)試軟件上也要相應(yīng)的更改校驗(yàn)方式,不然,下面的命令全部無(wú)用。
7. 關(guān)于wifi模塊的IP地址:wifi模塊的IP也是可以設(shè)置的,如AT+CIPAP=“192.168.5.1” ,所以還是要對(duì)wifi模塊進(jìn)行讀取IP的操作,以防被篡改IP地址。在顯示能夠連接時(shí),必須要顯示正確的IP地址,所以我們需要在程序一開(kāi)始獲取IP地址。
8. 關(guān)于多連接問(wèn)題:將先后連接的客戶(hù)端,根據(jù)連接的先后順序,手動(dòng)給它們排出優(yōu)先級(jí)序列,和客戶(hù)連接號(hào)無(wú)關(guān)的序列,這樣就能保持一個(gè)多連接的有優(yōu)先級(jí)的隊(duì)列,控制小車(chē)。當(dāng)然,在使用相應(yīng)優(yōu)先級(jí)的時(shí)候,必須同時(shí)采用該優(yōu)先級(jí)對(duì)應(yīng)的客戶(hù)連接號(hào),才能準(zhǔn)確的與某一個(gè)客戶(hù)端收發(fā)信息。(有待編寫(xiě)程序時(shí)完善)
9. 關(guān)于wifi模塊回顯字符串截取問(wèn)題:由于回顯的字符串是很不穩(wěn)定的,就是有時(shí)候某一句后面帶有\(zhòng)r\n,有時(shí)候又沒(méi)有,而且串口也不會(huì)發(fā)送\0到SBUF中,那么,字符串的截取就比較困難了,或者說(shuō)是笨方法。只能將\n作為字符串的讀取辨析的開(kāi)始,也就是一旦讀取到了\n,設(shè)置標(biāo)志位,表示下一個(gè)字符開(kāi)始,就要接收,拼接并且辨析。命令的話(huà),只讀取回顯中的某一位比較特別的位作為命令。
電子發(fā)燒友App
















評(píng)論