執行AT命令(AT-command)修改藍芽模組的資料傳輸速率
文∕趙英傑
藍芽序列埠模組(對岸稱為「藍牙串口模塊」),是一種能將TTL序列資料改以藍芽無線方式收發的介面裝置,可以取代RS-232串列線。由於網拍上的藍芽模組大多是對岸製造的,賣家將對岸的產品名稱和說明,原封不動地張貼出來,因此無論是在本地的拍賣網站或者對岸的淘寶網,商品關鍵字搜尋建議採用「藍牙串口」。
底下是筆者購買的藍芽序列埠模組外觀,印刷電路板周圍像郵票般的齒孔是模組的接腳,需要自行焊接;有些廠商販售的模組已經焊接好必要的接線。
藍芽模組可能有很多接腳,但主要的連結線只有四條(接收、傳送、正電源和接地),外加一個連線狀態指示LED燈(註:不同廠商製造的藍芽模組的接腳定義可能不一樣)。
大多數藍芽模組採3.3v供電,而外部電源通常是5v,因此我將它和一個3.3v直流電壓調節IC(LD33)焊接在一起;市售的Arduino微電腦板大多內建3.3v電壓輸出,因此不需要直流降壓元件。
電路板底部的四個接腳就是接收、傳送、正電源和接地,方便和自製的Arduino板銜接:
改變藍芽序列埠(藍芽串口)的工作模式
多數的藍芽序列埠模組都能讓用戶自行調整參數,常見的參數如下:
- 名稱:一般最多允許32個英∕數字
- 配對密碼:通常預設為1234
- 操作模式:主(master)、從(slave)或回應測試(loopback),通常預設為slave。
- 傳輸鮑率(baud rate):可調整4800bps~1382400bps。如果不特別指定,廠商都會給定一個預設值,例如9600bps或115200bps。
藍芽序列埠模組有兩種工作模式:
- 自動連線(automatic connection)
- 命令回應(order-response)
平時使用的「自動連線」模式只是負責將接收或者要發送的資料傳遞出去,模組本身不會解讀資料,也不接受控制。若要調整模組的參數,必須讓它進入「命令回應」模式。筆者購買的模組進入命令回應模式的方式為:將左上角的接腳連接高電位(3.3v)。
執行AT命令(AT-command)修改藍芽的資料傳輸速率
操控藍芽模組的指令統稱AT命令(AT-command)。AT命令並非透過藍芽無線傳輸,而是模組的TxD和RxD接腳。因此,我們還需要一個USB轉TTL的介面才能連接電腦來設定它。
「命令回應」模式的資料傳輸速率也有規定,有些是38400bps,有些是9600bps或其他鮑率。
AT命令的名稱和語法沒有統一的規範,即使模組採用相同的晶片,內部韌體版本不同,AT命令可能就不一樣,因此購買模組時,需要跟廠商索取AT命令規格書。以調整鮑率的語法為例,筆者購買的藍芽模組的語法格式如下:
AT+UART=鮑率,停止位元,同位(parity)位元
有些藍芽模組則是採用底下的語法,鮑率用一個數字編號代表,例如:
AT+BAUD<鮑率值編號>
底下是採用對岸開發的AccessPort免費序列埠監測軟體,將藍芽模組的鮑率改成9600bps的畫面:
修改成功後,藍芽模組將回應“+UART9600,0,0”和“OK”。
老師你好, 本人使用HC-06藍牙模組,現在的設定已經能使用手機程式與藍牙模組溝通, 但當加入了藍牙模組的程式後,會與現有的程式互相衝突,令原有的程式不能正常運作,請教有什麼方法能避免以上情況,感謝!
「與現有的程式互相衝突」的描述有點籠統,我猜想是序列通訊程式部份需要修改,例如序列埠的接腳或通訊速率。
thanks,
jeffrey
我正在使用 Arduino Uno 將串行數據發送到另一個設備,該設備要求數據位於serial parity space and mark,但我找不到serial parity space and mark的替代方法,我需要一個“mark”是一個 1 位(或邏輯 1),一個“space”是一個 0 位(或邏輯 0)。
對於mark奇偶校驗,奇偶校驗位總是1。對於space奇偶校驗,
它總是一個0。
Arduino的Serial.begin()可以設置通訊格式,例如:SERIAL_8N1(預設值)代表8資料位元、無同位檢查(None)、1個停止位元。
Serial.begin(115200, SERIAL_8N1);
你可以依照需求自行調整設置,例如:
SERIAL_8E1:代表8個資料位元、偶數同位檢查、1個停止位元
SERIAL_8O1:代表8個資料位元、奇數同位檢查、1個停止位元
SERIAL_5E2:代表5個資料位元、偶數同位檢查、2個停止位元
thanks,
jeffrey
請教一下老師,可能更改藍芽為不編碼、不解碼的作業方式讓傳送端至接收端的latency降到5 ms以下嗎?
典型(classic)藍牙的延遲約100ms,BLE約6ms,我覺得能降到50ms就很厲害了…我的標準太低了,拍謝~