波特率的概念
模擬線路信號的速率,以波形每秒的振蕩數(shù)來衡量。如果數(shù)據(jù)不壓縮,波特率等于每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù),如果數(shù)據(jù)進(jìn)行了壓縮,那么每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù)通常大于調(diào)制速率,使得交換使用波特和比特/秒偶爾會產(chǎn)生錯誤。
在信息傳輸通道中,攜帶數(shù)據(jù)信息的信號單元叫碼元,每秒鐘通過信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡稱波特率。波特率是指數(shù)據(jù)信號對載波的調(diào)制速率,它用單位時間內(nèi)載波調(diào)制狀態(tài)改變的次數(shù)來表示(也就是每秒調(diào)制的符號數(shù)),其單位是波特(Baud,symbol/s)。波特率是傳輸通道頻寬的指標(biāo)。
每秒鐘通過信道傳輸?shù)男畔⒘糠Q為位傳輸速率,也就是每秒鐘傳送的二進(jìn)制位數(shù),簡稱比特率。比特率表示有效數(shù)據(jù)的傳輸速率,用b/s 、bit/s、比特/秒,讀作:比特每秒。
波特率與比特率的關(guān)系也可換算成:比特率=波特率*單個調(diào)制狀態(tài)對應(yīng)的二進(jìn)制位數(shù)
例如假設(shè)數(shù)據(jù)傳送速率為120符號/秒(symbol/s)(也就是波特率為120Baud),又假設(shè)每一個符號為8位(bit)即八相調(diào)制(單個調(diào)制狀態(tài)對應(yīng)3個二進(jìn)制位),則其傳送的比特率為(120symbol/s) * (3bit/symbol)=360bps.
esp8266如何用at指令設(shè)置波特率
VCC接3.3V,GND連電源地,UTXD連接MAX232芯片RXD,URXD連接MAX232芯片TXD,CH_PD連接VCC上拉
注意2個問題:串口波特率為9600(有時是115200),發(fā)送每串字符要以回車符或換行符作為結(jié)尾
ESP8266可以配置成station 、AP、station+AP三種模式,就是說模塊可以當(dāng)成一個設(shè)備(client)連接局域網(wǎng)內(nèi)的路由,也可以設(shè)置成是一個路由(sever),也可以既作為局域網(wǎng)里面的client同時又是其它client的sever!
如若串口調(diào)試助手中不能發(fā)送AT指令,但是波特率默認(rèn)為115200,想改成9600
AT+UART=9600,8,1,0,0
可以修改的
ESP8266使用總結(jié)(一)
首先,該模塊使用了AT指令進(jìn)行操作,我們要做的,就是將需要的AT指令,以字符串的形式發(fā)給模塊,即可實現(xiàn)相應(yīng)的功能。
1. wifi模塊ESP8266的默認(rèn)波特率是115200,但是單片機不能達(dá)到那么快的傳輸速率,只能使用4800bps,那么設(shè)置的時候,必不可少的要先用轉(zhuǎn)串口調(diào)試下載器(速度比較快,而且wifi模塊默認(rèn)115200bps,用單片機不能正確更改波特率,轉(zhuǎn)串口工具可以),設(shè)置指令,AT+UART=4800,8,1,0,0,詳細(xì)見手冊,可以靈活設(shè)置。
2. 設(shè)置完成以后,wifi模塊在掉電以后還是會保持4800bps,下次使用,不再需要修改。
3. 在使用單片機對wifi模塊進(jìn)行操作的時候,首先串口的波特率要設(shè)為4800,也就是TH1的初值必須是0xfa,這樣再晶振為11.0592MHz的時候,可以準(zhǔn)確的得到4800bps。
4. 然后,先不插wifi模塊的TX,DX到單片機的P30和P31口,因為下載程序的時候需要使用到這兩個口,不能被干擾。下載程序完成以后,先斷電,再把wifi模塊的兩個引腳接上,注意,模塊和單片機上的TX,DX是交叉接的,這樣才能正確工作,不像最小系統(tǒng)板下載程序的時候是對應(yīng)接的。
5. 最后再把單片機上電。還有一個注意的地方,就是,因為4800bps的話,傳輸速率比較慢,所以,在程序中每發(fā)送一條AT指令,必須要加以一定的延時,起碼500ms我認(rèn)為,這樣保證模塊的初始化時正確的。
6. 打開手機,連上對應(yīng)的wifi,再輸入對應(yīng)的IP地址和端口號,以及密碼,就可以傳輸數(shù)據(jù)了,但是讓wifi模塊把單片機上的數(shù)據(jù)傳輸?shù)绞謾C上還沒有完成,有待增加此方法。
7. 經(jīng)過一下午的調(diào)試,找到如何解決問題了,原來問題在于我的操作問題。每次創(chuàng)建了wifi,要先連上wifi才能夠讓wifi傳數(shù)據(jù)給手機,手機沒自動連接!
ESP8266使用總結(jié)(二)
1. 注意:ESP8266作為TCP Server時,存在超時機制,一段時間沒有數(shù)據(jù)往來,就把client踢掉,所以程序中要有保持連接的操作,或者可以通過設(shè)置AT指令,設(shè)置不能踢掉客戶端模式,但是不建議這樣做。
2. 在設(shè)置模式等都完成以后,用手機可以連上wifi模塊,可以向wifi模塊發(fā)送數(shù)據(jù)。但是想要把wifi模塊上的數(shù)據(jù)回過來,需要通過客戶的連接號才能辨清是哪一個client發(fā)送過來請求,例如:0,CONNECT,然后再把數(shù)據(jù)根據(jù)連接號把數(shù)據(jù)發(fā)送給該client,這樣保證傳輸數(shù)據(jù)的正確性。接收到數(shù)據(jù)的格式:+IPD,0,3:ddf;+IPD,0,7:gfsghhf,這樣的話,需要通過字符串的辨析,才能知道哪個客戶端連接號發(fā)來數(shù)據(jù)了,例如上面舉例,是客戶端連接號為0,發(fā)送過來數(shù)據(jù)了。
3. 使用AT指令時,必須是以字符串的形式傳輸?shù)絯ifi模塊中,所以,需要用到uart_sendstr,但是,有的指令是字符串中包含了字符串,編譯的時候不能正確識別,所以需要字符串轉(zhuǎn)UTF-8工具(ESP8266使用的是UTF-8標(biāo)準(zhǔn)),注意不能刪掉字符串中的空,逗號,句號換行符什么的,如圖
4. 今天發(fā)現(xiàn),第3條可以有更好的解決方法,而且很簡單,只是用的比較少,我也沒想到,字符串中的字符串使用\”…。\”表示即可?。ㄐ枰煤醚a補C語言了)
5. 51單片機程序中,需要對字符串進(jìn)行很多操作,例如:AT指令和參數(shù)的拼接(這樣比較靈活,參數(shù)最好也是字符串形式,減少工作量),截取wifi模塊發(fā)送給單片機的字符串提示信息等等,所以我們需要做的是對字符串進(jìn)行正確操作,每一個字符串函數(shù)都要測試功能,確保正確才能加入使用。
6. 剛剛新買的wifi模塊,要想在51單片機上使用,就要將波特率設(shè)的比較低,那么在使用AT+UART=4800,8,1,0,0命令的時候,一旦將最后第二個數(shù)據(jù)改了,那么串口調(diào)試軟件上也要相應(yīng)的更改校驗方式,不然,下面的命令全部無用。
7. 關(guān)于wifi模塊的IP地址:wifi模塊的IP也是可以設(shè)置的,如AT+CIPAP=“192.168.5.1” ,所以還是要對wifi模塊進(jìn)行讀取IP的操作,以防被篡改IP地址。在顯示能夠連接時,必須要顯示正確的IP地址,所以我們需要在程序一開始獲取IP地址。
8. 關(guān)于多連接問題:將先后連接的客戶端,根據(jù)連接的先后順序,手動給它們排出優(yōu)先級序列,和客戶連接號無關(guān)的序列,這樣就能保持一個多連接的有優(yōu)先級的隊列,控制小車。當(dāng)然,在使用相應(yīng)優(yōu)先級的時候,必須同時采用該優(yōu)先級對應(yīng)的客戶連接號,才能準(zhǔn)確的與某一個客戶端收發(fā)信息。(有待編寫程序時完善)
9. 關(guān)于wifi模塊回顯字符串截取問題:由于回顯的字符串是很不穩(wěn)定的,就是有時候某一句后面帶有\(zhòng)r\n,有時候又沒有,而且串口也不會發(fā)送\0到SBUF中,那么,字符串的截取就比較困難了,或者說是笨方法。只能將\n作為字符串的讀取辨析的開始,也就是一旦讀取到了\n,設(shè)置標(biāo)志位,表示下一個字符開始,就要接收,拼接并且辨析。命令的話,只讀取回顯中的某一位比較特別的位作為命令。
評論
查看更多