執行AT命令(AT-command)修改藍芽模組的資料傳輸速率

執行AT命令(AT-command)修改藍芽模組的資料傳輸速率
文∕趙英傑

藍芽序列埠模組(對岸稱為「藍牙串口模塊」),是一種能將TTL序列資料改以藍芽無線方式收發的介面裝置,可以取代RS-232串列線。由於網拍上的藍芽模組大多是對岸製造的,賣家將對岸的產品名稱和說明,原封不動地張貼出來,因此無論是在本地的拍賣網站或者對岸的淘寶網,商品關鍵字搜尋建議採用「藍牙串口」。

底下是筆者購買的藍芽序列埠模組外觀,印刷電路板周圍像郵票般的齒孔是模組的接腳,需要自行焊接;有些廠商販售的模組已經焊接好必要的接線。

藍芽序列埠模組,藍牙串口模塊

藍芽模組可能有很多接腳,但主要的連結線只有四條(接收、傳送、正電源和接地),外加一個連線狀態指示LED燈(註:不同廠商製造的藍芽模組的接腳定義可能不一樣)。

大多數藍芽模組採3.3v供電,而外部電源通常是5v,因此我將它和一個3.3v直流電壓調節IC(LD33)焊接在一起;市售的Arduino微電腦板大多內建3.3v電壓輸出,因此不需要直流降壓元件。

組裝好的藍芽序列埠模組

電路板底部的四個接腳就是接收、傳送、正電源和接地,方便和自製的Arduino板銜接:

加上藍芽模組的自製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的畫面:

使用AccessPort修改藍芽模組的傳輸速率

修改成功後,藍芽模組將回應“+UART9600,0,0”和“OK”。

使用AccessPort修改藍芽模組的傳輸速率

延伸閱讀

Posts created 483

109 thoughts on “執行AT命令(AT-command)修改藍芽模組的資料傳輸速率

  1. 老師你好, 本人使用HC-06藍牙模組,現在的設定已經能使用手機程式與藍牙模組溝通, 但當加入了藍牙模組的程式後,會與現有的程式互相衝突,令原有的程式不能正常運作,請教有什麼方法能避免以上情況,感謝!

    1. 「與現有的程式互相衝突」的描述有點籠統,我猜想是序列通訊程式部份需要修改,例如序列埠的接腳或通訊速率。

      thanks,
      jeffrey

  2. 我正在使用 Arduino Uno 將串行數據發送到另一個設備,該設備要求數據位於serial parity space and mark,但我找不到serial parity space and mark的替代方法,我需要一個“mark”是一個 1 位(或邏輯 1),一個“space”是一個 0 位(或邏輯 0)。
    對於mark奇偶校驗,奇偶校驗位總是1。對於space奇偶校驗,
    它總是一個0。

    1. 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

  3. 請教一下老師,可能更改藍芽為不編碼、不解碼的作業方式讓傳送端至接收端的latency降到5 ms以下嗎?

    1. 典型(classic)藍牙的延遲約100ms,BLE約6ms,我覺得能降到50ms就很厲害了…我的標準太低了,拍謝~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top