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