2012年7月1日 星期日

Config bluetooth baud rate w/ Arduino

image_thumb3 image_thumb6
▲ HC-0x 藍芽模組 (圖左:正面圖,圖右:背面圖)

HC-0x 藍芽模組的 baud rate 預設是 9600 bps,有些時候你可能會需要改它的 baud rate,要改 baud rate,用 USB to TTL 是最簡單的,這部份可以參考這篇,不過如果手邊沒有 USB to TTL,用 Arduino 也是可以的,底下教你怎麼做。

首先,你得知道怎麼把 Arduino 跟藍芽模組連接起來,參考下圖:

image

連接的時候有兩點要注意:第一是電源千萬不可接錯,不然可能會燒錄藍芽模組,第二是 Arduino 的 RXD 要接藍芽模組的 TXD,而 Arduino 的 TXD 要接藍芽模組的 RXD。可參考下表:

Arduino 藍芽模組 備註
5V VCC 注意電源不可接錯
GND GND 注意電源不可接錯
RXD (pin 0) TXD  
TXD (pin 1) RXD  

通電之後,藍芽模組上的 LED 會一直閃爍:

image_thumb[13]

改 Baud rate 的步驟

底下示範如何把藍芽模組 baud rate 改成 57600 bps:

1) 把底下的 sketch 上傳到 Arduino 板子上(注意!在上傳程式的時候,切記不要插著藍芽模組):

2) 打開 Serial Monitor,過 6 秒鐘之後,你應該會看到 AT+BAUD7 的訊息:

 2012-05-06 18h44_12

3) 關閉 Serial Monitor

4) 拔掉 Arduino 的電源

5) 插上藍芽模組

6) 給 Arduino 上電,請在上電後 6 秒鐘之內打開 Serial Monitor,過 6 秒後應該就會看到 AT+BAUD7OK57600 的訊息,代表你已經正確把藍芽模組 baud rate 修改成 57600 bps 了,如下圖所示:

image  

由於藍芽模組 baud rate 已經改成 57600 bps,如果想改回 9600 bps,可以照底下的步驟做。

如何把 baud rate 改回 9600?

1) 把 Sketch 的 setup() 改成如下:

void setup()
{
   Serial.begin(57600);         // Baud rate of HC-0x bluetooth module
   delay(6000);
   Serial.write("AT+BAUD4");   // Set baud rate as 9600
}

2) 把 Sketch 上傳到 Arduino 板子上(注意!在上傳程式的時候,切記不要插著藍芽模組):

3) 打開 Serial Monitor,將下方的 baud rate 設定改成 57600 bps:

image

接著等 6 秒後,應該會看到 AT+BAUD4 的訊息:

2012-05-06 18h57_41

4) 關閉 Serial Monitor

5) 拔掉 Arduino 的電源

6) 插上藍芽模組

7) 給 Arduino 上電,請在上電後 6 秒鐘之內打開 Serial Monitor,過 6 秒後應該就會看到 AT+BAUD4OK9600 的訊息,代表已經正確把藍芽模組 baud rate 改回預設值 9600 bps 了,如下圖所示:

2012-05-06 19h00_02

以上的方法,希望對你有幫助。

參考資料

13 則留言:

  1. 您好:
    看了一下說明,如果忘了參數相關設定,應該是以下處理是嗎?(HC-06 就是26 脚置高电平,或底板KEY 与电源短路一会)

    回覆刪除
  2. Hi, Reset Pin 是 Pin 11,低電平有效

    Pin 26 好像是跟 paring 有關的,用來清除 paring 記憶

    回覆刪除
  3. 大大你好...
    在拜讀了你的這篇文章後...
    跟著試了一下...
    可是發現小弟我的LEONARDO的Serial.write不支援" <-雙引號的符號...
    可是改成'<-單引號的符號好像又只會取最後一個字母
    試了用Serial.print是可以送一整個字串了...
    可是serialMonitor在上了BT後也不會回傳正確的回傳值...
    只回傳了AT+BAUD7...而不是應有的OK57600

    BT燈號正常...也有用Loop back test試過接收發送正常...
    不知大大這有沒有其它的方式可以解答...

    回覆刪除
  4. 大大你好...
    在拜讀了你的這篇文章後...
    跟著試了一下...
    可是發現小弟我的LEONARDO的Serial.write不支援" <-雙引號的符號...
    可是改成'<-單引號的符號好像又只會取最後一個字母
    試了用Serial.print是可以送一整個字串了...
    可是serialMonitor在上了BT後也不會回傳正確的回傳值...
    只回傳了AT+BAUD7...而不是應有的OK57600

    BT燈號正常...也有用Loop back test試過接收發送正常...
    不知大大這有沒有其它的方式可以解答...

    回覆刪除
  5. 看網路上的資料,Leonardo 的 Serial.write() 的行為跟 UNO 不一樣,確實只能送一個字元 (UNO 的 Serial.write() 可以送多個字元)

    我這篇是用 UNO 測試的, leonardo 我沒試過
    leonardo 的 serial 跟 UNO 是不一樣的,我不確定這篇的方法 leonardo 能不能用

    我把程式改了一下,你把它傳到 leonardo 上,試試看能不能用:

    // A simple sketch to set baud rate of HC-0x bluetooth module
    // If successful configured, a response like "OK75600" will be shown on serial monitor
    //
    // Command: AT+BAUDx, where x can be:
    // 1: 1200, 2:2400, 3:4800, 4:9600, 5:19200,
    // 6:38400, 7:57600, 8:115200, 9:230400

    void setup()
    {
    Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }
    Serial1.begin(9600); // Baud rate of HC-0x bluetooth module
    delay(6000);
    Serial1.write("AT+BAUD7"); // Set baud rate as 57600
    }

    void loop()
    {
    if (Serial1.available())
    Serial.write(Serial.read());
    }

    回覆刪除
  6. 感謝coopermaa大哥撥空指導...
    新的程式碼在leonardo上是可以run的...只是serialMonitor會回傳亂碼(小寫y上再再加兩個小點)
    然後進入無窮迴圈致arduino當機...
    但拔電再用amarino抓BT是確定BT的名稱有改了...鮑率也有改了....

    再次感謝coopermaa大大...

    另想請教...
    小弟有試用amarino確定BT連接了...但BT就是無法跟leonardo通信...所以這也是因為serial的關係嗎
    (我有上官網看了一下leonardo RX/TX TTL通信用serial1...CDC用serial)
    那amarino是走TTL還是USB CDC??又或跟這兩個沒關係??

    小弟是新手...英文資料又太難啃...是是大哥可以介紹其他的BT TO 安卓的軟體...

    回覆刪除
  7. amarino 是走 TTL,因為 bluetooth 是接在 pin 0 和 pin 1 上

    leonardo 的 Serial 是 USB CDC, Serial1 是 RX/TX TTL 通信
    要在 lenoardo 上跑的話,amarino 得改用 Serial1 才行
    所以,你可能要改 MeetAndroid library,把程式裏用到 Serial 的地方全都改成 Serial1,也許還得把 CDC.h 給 include 進來

    回覆刪除
  8. 有了...感謝coopermaa大大的指點...
    方法如同coopermaa大哥所說的...將MeetAndroid.cpp內所有的serial改成serial1...
    另將TEST的sketch裡加入Serial1.begin(XXXX);


    我的LED總算會閃了...感動到快哭了...QQ

    (另小插曲...本來在改 MeetAndroid library將裡面的檔案先用複製的並貼在同資料夾...結果編譯錯誤...後來將那些帶中文的檔案移到該資料夾外就OK了...)

    回覆刪除
  9. 哇塞!恭禧你啊!
    說不定你是全球第一位在 arduino leonardo 上成功執行 Amarino 的人!

    回覆刪除
  10. 大大你太誇張了...

    應該有很多人可以使用...

    只是沒幾個人會想像大大一樣替人解答而已...又或是小弟英文太爛漏看了...畢竟這方便的資訊太少了...

    另小弟有在ROBOFUN論壇發了相同的問題...既然現在有解了...所以想在該論壇將解答引用到你這裡...如有不妥再跟小弟說一下...

    回覆刪除
  11. 是真的,不誇張
    如果用 "arduino leonardo + amarino" 當關鍵字搜尋,可能現在還找不到資料咧!

    BTW, 我在想 MeetAndroid 應該可以寫成兼容 Leonardo,方法是檢查 MCU 晶片有沒有 USB,像 Leonardo 有 USB 介面,就可以利用底下的方法判斷出來:

    #if defined(USBCON)
    Serial1.print(n); // for Leonardo
    #else
    Serial.print(n);
    #endif

    我沒試過,不過估計是辦得到的
    如果你試成功,也許可以發個信給 amarino 作者,把 source code 提交上去,haha~~

    回覆刪除
  12. 您好,請問我的藍芽模組是CSR BC-4 照你上面的做法,確認有AT+BAUD7立刻拔掉接上藍芽,在開啟Sseial monitor看,也是顯示AT+BAUD7。請問這個問題是在藍芽模組嗎?

    回覆刪除
  13. Hi, 我後來發現用底下這個方法最簡單,建議你試試:

    Arduino as an USB to TTL adapter


    你買的是這個模組嗎?
    http://goods.ruten.com.tw/item/show?21209019709583

    我沒用過這個模組,不過看拍賣網站的介紹,它好像有附一個設定軟體,也許你可以跟賣家索取設定軟體來用應該會比較容易。

    BTW, 這個模組韌體功能看起比較豐富一些

    回覆刪除

注意:只有此網誌的成員可以留言。