2014年5月12日 星期一

Arduino + HC-05 Bluetooth module setting ( AT Mode and Baud rate setting )

Arduino 有許多容易使用的模組與 Lib ,可以讓人快速的驗證流程與效果,但為了能讀取 Arduino 上的溫濕度、光敏電阻、電壓等數位、類比訊號,我們難道就只能用 USB Cable 讀取嗎?不不,我們還有 Wifi module 和 Bluetooth module 可以幫助 Arduino 添加無線傳輸功能,讓我們拋開 USB Cable ,把 Arduino 發揮更多可能。

市面上販售的藍牙模組、Wifi 模組有許多型號,各種型號版本各有些許差異,但在這篇筆記中,我們僅探討:HC-05 這個藍牙模組。

為什麼僅探討 HC-05 模組?

1. 筆者手邊僅有這個型號的藍牙模組

2  我買來好久一段時間,一直沒能搞定 AT Mode 和傳輸問題

3. 網路上將近八成的藍牙模組筆記,多是探討 HC-06,其底下留言中有許多跟著步驟操
    作仍無法成功的朋友(我亦是其一),且拍賣網頁上的模組介紹,有許多將 HC-06 與 
    HC-05 搞混

4. 幾乎找不到對 HC-05 的 AT Mode 設定文章與介紹

基於以上四點理由,我覺得我該寫一篇文章分享給同樣遇到藍牙模組設定有問題的朋友們。




首先讓我們先來看一下 HC-05 的外觀:


 正面

背面


由背面我們可以看到版本編號為 V1.05 ,但若依照 V1.05 進行搜尋筆記或拍賣時,有可能會得到誤導的資料與型號。筆者依照 V1.05 於露天拍賣、淘寶、Yahoo 拍賣上搜尋,V1.05 的版本名稱為 HC-06 ,但經由實驗過程中發現,這根本是 HC-05!難怪許多網頁上的操作步驟,怎麼測試就是無法進入 AT Mode 更改 Baud rate,原來一開始就搞錯了版本。

HC-05 與 HC-06 的 AT Mode 在操作中, HC-06 較簡單, HC-05 則需要透過 key pin 的設定才可以進入 AT Mode。





進入設定步驟說明前,介紹一下我的設備與 Arduino 版本,並依照下列步驟,逐一將 HC-05 與 Arudino 連接、設定:

  • Arduino UNO           x 1
  • HC-05 藍牙模組     x 1
  • 杜邦線(公母頭)x 4
  • Arduino  IDE  1.0.5 - r2





Step 1 : 以杜邦線將 HC-05 與 Arduion 連接

接線腳位對照表
  • HC-05 GND <---> Arduino GND Pin
  • HC-05 Vcc (5V) <---> Arduino 5V
  • HC-05 TX  <---> Arduino Pin 10 (soft RX)
  • HC-05 RX  <---> Arduino Pin11 (soft TX)
  • HC-05 Key <---> Arduino Pin 9


Step 2 : 上傳程式碼至 Arduino

/*

AUTHOR: Hazim Bitar (techbitar)
DATE: Aug 29, 2013
LICENSE: Public domain (use at your own risk)
CONTACT: techbitar at gmail dot com (techbitar.com)

*/


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
  pinMode(9, OUTPUT);// this pin will pull the HC-05 pin 34 (key pin)HIGH 
                     // to switch module to AT mode

  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
}

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());
}

將上面程式碼複製到 Arduino IDE 中編譯、上傳,並開啟 Serial Moniter。



Step 3 : 設定 HC-05 進入 AT Mode

* 注意 : 請先將 Arduino 電源拔除再進行以下步驟


1. 確認是否線路皆依照 Step 1 接線完成

2. 把 Arduino 接上電源前,請將 HC-05 連接至 Arudino 上的 Vcc 腳位拔除,其餘四支腳位皆維
    持連接狀態

3. 確認拔除 Vcc 腳位後,現在可將 Arduino 接上電源

4. 確認 HC-05 目前沒有與任何藍牙裝置配對中

5. 將 HC-05 的 Vcc 腳位插回 Arduino Vcc

6. 上述步驟都正確執行後, HC-05 的 LED 燈應該維持兩秒閃爍一次的頻率。若燈號狀態正
    常,此時已進入 AT Mode

7. 為了驗證是否正確登入 AT Mode ,請開啟 Serial Moniter ,並設定視窗右下角的 Baud rate 為
    9600,於 Serial Moniter 上方欄位中輸入大寫 " AT " ,將收到回應 " OK "

8. 如果依舊沒有辦法收到 " OK " 回覆,請再次檢查您的線路與步驟是否正確


進入 AT 模式後,若設定皆正常,於畫面應顯示 " Enter AT commands ",而非亂碼,若呈現亂碼請注意右下角 Baud rate 速率與格式設定。輸入 " AT ",可得到回應 " OK " 。

改變 HC-05 Baud rate , 請輸入 " AT+UART=115200,1,0 ",改變成功可得到回覆 " OK ",其中 115200 為最高 Baud rate 值,1 則是停止位元,0 為檢查位元,調整 Baud rate 時,僅需調整前面的 Baud rate 值即可。


請注意程式碼中的 Serial.begin(9600) 與 BTSerial.begin(38400),這兩者的數值請勿調整

Step 4 : 設定 HC-05 各項 AT 指令

以下為常用指令,若需參考其他 HC-05 指令,可點選以下連結:
http://www.electronicaestudio.com/docs/istd016A.pdf

返回初始預設值 : AT+ORGL

查詢版本 : AT+VERSION?

更改藍牙名稱 : AT+NAME=XXXX  (其中 XXXX 為欲設定的名稱 )

更改 Baud rate : AT+UART=XXXX,1,0  (其中 XXXX 為欲設定的 baud rate 值 )

更改密碼 : AT+PSWD= XXXX ( 其中 XXXX 為新密碼 )




障礙排除

如果 HC-05 與 Arduino 的接線皆正常,程式也沒有錯誤,打開 Serial Moniter 設定與 Baud rate 也正常,但無論怎麼輸入 " AT " 都無法得到 " OK " ,請參考以下解決方案

燈號狀態


  • 若燈號為兩秒閃爍一次,請重新確認 BTSerial.begin(38400) 是否正確,並請重新操作上述步驟


  • 若燈號為快速閃爍,請依照以下步驟設定


1. 拔除 USB 線,使 Arduino 處於斷電狀態

2. 將 Pin 9 的腳位拔除後,插入 Vcc 3.3V 腳位

3. 插上 USB 後,檢查 HC-05 燈號,若燈號為兩秒閃爍一次,此時已正確進入 AT Mode,若燈
    號為快速閃爍,請重新操作一次接線步驟



以上為進入 HC-05  AT Mode 設定,若你在其他 Blog 或 論壇上找到的操作方法無法正常設定,或許你手上的藍牙模組有可能與我的相同是『掛羊頭賣狗肉』的 HC-05 ! 

24 則留言:

  1. 請問 我已經進入了AT Mode裡了(燈兩秒閃一次) 但我打AT 卻沒出現東西 請問這是哪方面出了問題?

    回覆刪除
  2. 您好,如果已經進入 AT Mode ,但是輸入 AT 沒有出現東西,您需要檢查線路是否安裝正確,再來程式中的 Baud rate 是否有按照文章所述操作?

    因為您的問題我之前也遇過,後來重新確認接線與 Baud rate 就成功了,再試試看!

    回覆刪除
  3. 不好意思
    我想在追問一個問題:主從的差別

    網頁的clien和server的差別以我個人認知是在與前端顯示後端運算的部分(MCV架構)
    可是在於通訊方面,如果是支援雙向資料傳輸我就搞不清楚主從的差別
    請您指點迷津
    謝謝

    回覆刪除
    回覆
    1. 藍芽聯網由一個主(master)裝置與一到七個活躍的從屬(slave)裝置所組成。
      主裝置(master device)者決定頻道(跳頻序列,FH sequence)與相位(phase) (時序偏差調整, timing
      offset,亦即何時傳輸);其他的從屬裝置(slave devices)必須調整到相同的頻道與相位。 

      從屬裝置只能與主裝置通訊,且只能在主裝置允許時通訊。

      刪除
  4. 請問一下 如果已經進入AT mode
    也成功跑出 Enter AT commands:
    但輸入AT後 卻跑出亂碼 是什麼問題?
    也確認接線和Baud rate 都沒錯了

    回覆刪除
    回覆
    1. 您好,如果正確進入 AT mode ,但是輸入 AT 卻出現亂碼,代表您的 baud rate 應該不匹配(電腦端與 HC-05 的 baud rate 不同),建議您在檢查一次

      刪除
    2. 有確認過baud rate 沒錯
      serial.begin 是9600
      BTSerial.begin是38400

      刪除
    3. 不好意思,這麼遲才看到您的留言。您的問題先前在學生課堂上也有發現過,有一部份的原因是 baud rate 匹配錯誤,也有另一方面可能是您 Arduino 上的腳位已有接觸不良的損害狀況。建議您換個板子試試看,希望對您有幫助。

      刪除
  5. 請問已設為主機的HC-05要如何與從機(HC-05)配對呢?
    HC-05主機端是Arduino Pro mini 控制,
    在主機端這邊要如何去認哪一個藍牙從機是該要配對的對象呢?

    回覆刪除
    回覆
    1. HC-05 的設定若已確定了主機端,那麼從屬端要與主機端配對時,亦須讓雙方皆進入閃燈的 AT-Mode ,當主機端進入配對狀態後,會閃燈十秒,若沒有任何配對成功,燈號會自動恢復恆亮狀態。

      因此從屬端應當在主機端進入配對模式過程中與主機進行配對連接,詳細的配對流程,還請您參閱 HC-05 的官方手冊會更清楚,謝謝。

      刪除
  6. 您好, 想請教兩個問題 :

    1. 我跟 Jacky Arduino 遇到的狀況一樣, 有進入 AT mode (LED 兩秒閃一次),
    Serial Monitor 也出現 "Enter AT commands :", 但是輸入 AT , 在 Serial Monitor 得到的回應卻是亂碼.
    因為 Serial Monitor 可以正常顯示 "Enter AT commands :", 表示 PC 和 Arduino 間的 baudrate 沒有問題.
    這個亂碼會不會是 HC-05 和 Arduino 之間的傳輸參數不匹配所致呢 ?
    我確定已設成 38400, 但不知還有甚麼參數該調整 ? stop bit 嗎 ? 還是 parity bit ?

    2. 如果我下了 AT+UART=115200,1,0 的命令修改 HC-05 的 buadrate 之後,
    下一次執行 Arduino 程式, 是否需要把 BTSerial.begin(38400); 這一行改成 BTSerial.begin(115200);
    並重新燒進 Arduino ? 以因應 HC-05 baudrate 修改 ?

    謝謝您.

    回覆刪除
    回覆
    1. 我改用 USB -> TTL 轉接線直接接上 HC-05 藍芽模組, 並使用 Tera Term 設定 Terminal 的 New-line 為 Transmit: CR+LF, 在進入 AT command 模式後可以得到 AT command 的正常回應. 推測是 Arduino 的 SoftwareSerial.write 函式或許會 trim 掉 CR 或 LF 字元, 導致雖然我從 PC 或 Serial Monitor 下 AT command 時有加上 CR+LF, 但是在 Arduino 程式裡將 Serial 讀到的字元寫到 SoftwareSerial (也就是 BT 用的介面) 時, 少了 CR 或 LF 其中一個. 等一下會回頭去驗證這個想法.

      也謝謝您這個部落格提供的資訊.

      刪除
    2. 感謝您的驗證與回覆,這部份我最近比較少研究了,如果您有更進一步的消息,還請您分享指教,感謝!

      刪除
  7. 請問如果要將兩台已連結的HC 05互相傳訊息並顯示在serial上,那程式該怎麼打?

    回覆刪除
    回覆
    1. 其實程式與一般的 serial port 傳輸沒有兩樣,您可以設定傳輸的延遲時間,讓兩台 HC-05 的訊息得以交互傳輸,不至於造成封包碰撞或封包遺失。

      刪除
  8. 您好,我想要使用HC-05去接收另一個藍芽的訊號
    但不太清楚到底應該怎麼做,目前設定都已經調好,但是看燈號一直閃爍應該是沒有配對上,想請問如何解決這個問題?

    回覆刪除
    回覆
    1. 您好,我必須坦承的說,這部分似乎是 HC-05 的小毛病。需要正確配對成功,燈號也沒有閃爍才是真正的配對完成。

      當初設定時,我也是重複嘗試了很多次設定才配對完成,可能要麻煩您再試試看了。

      刪除
  9. 您好,我想請問如何將手機和HC-05配對的詳細步驟。我的HC-05已經成功進入AT mode,但手機的藍牙搜尋不到HC-05。

    回覆刪除
    回覆
    1. 將HC-05設定成從的腳色就可以找到了

      刪除
  10. 您好,我想請問..我剛買到hc-05的時候輸入AT,它會回傳OK;自從我改變了他的uart之後不管改多少次,他回傳的OK都會少O或是少K,這樣使用上還能夠正常運作嗎?該怎麼作能讓hc-05的OK正常顯示

    回覆刪除
    回覆
    1. 照理說你改變他的uart時不會改變AT command mode的braud rate。

      刪除
  11. 作者已經移除這則留言。

    回覆刪除