不過,要開始玩 S4A 之前,因為這個改過的 Scratch 內定是用 38400 的 baud rate 來和 serial port 連線,而 HC-05 預設的 baud rate 卻是 9600,因此,新買的 HC-05 藍芽模組,第一關是要能進入 AT command mode 去修改它的設定值。
如果有 USB to TTL ,可以利用它直接和 HC-05 連接,除了 Vcc , GND, Key(接5V), 兩個裝置的 RXD → TXD, TXD→RXD。
下面介紹第二種方法,以 Arduino 的第 9, 10, 11 pins 和 5V, GND 五個腳位來達到相同的目的。
硬體的部份
HC-05 和 Arduino 接線的腳位對應如下:
HC-05 VCC → Arduino 5V
HC-05 GND → Arduino GND
HC-05 TXD → Arduino pin 10
HC-05 RXD → Arduino pin 11
HC-05 KEY → Arduino pin 9
靭體的部份
Arduino 靭體的部份主要是先讓 Arduino 的 pin 9 設定為高電位,這樣 HC-05 就會進入「AT mode」,可以輸入 AT 指令來查詢或是設定 HC-05;而接收我們輸入指令及顯示 HC-05 回應訊息的工作則是交由 Arduino USB to serial 的 port 處理,它可以接收我們輸入的內容,並將它透過 pin 11 寫入 HC-05,如果由 pin 10 收到 HC-05 的回應.則輸出訊息給我們看。
以下的靭體程式是 TechBitar 網站中這篇文章中的:
- Modify The HC-05 Bluetooth Module Defaults Using AT Commands
http://www.techbitar.com/modify-the-hc-05-bluetooth-module-defaults-using-at-commands.html
/*
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 以 USB 接上電腦,打開靭體程式編寫工具,將上面的程式碼貼上、儲存後,上載到 Arduino 中。
讓 HC-05 進入 AT command mode
如果 HC-05 和 Arduino 已按照前述的腳位接好線,並且將前述的靭體上載到 Arduino 中了。就可以依照下面的程序連線並讓 HC-05 進入 AT command mode:
- 先拔掉 Arduino 的 USB 線,也拔掉 HC-05 VCC 和 Arduino 5V 相連的這條線。
- 將 Arduino 的 USB 線插入電腦。
- 開啟終端機軟體(例如 Windows 的超級終端機或是 Putty ......),以
每秒傳輸位元: 9600
資料位元:8
同位檢查:無
停止位元:1
的設定來和 Arduino 的 serial port 連線,成功的話,應該可以在終端機軟體的畫面中看到「Enter AT commands:」的訊息。 - 將 HC-05 VCC 和 Arduino 5V 的線重新接上。
- 供電後的 HC-05 應該是以慢速(約兩秒一次)閃爍 LED,這表示它已進入 AT command mode,等候我們輸入 AT 指令。
啟動「超級終端機」新增連線 |
選取 Arduino 的 serial port |
傳輸速率設為 9600 |
成功和 Arduino 連線 |
HC-05 進入 AT command mode 以後,我們可以先輸入「AT」,按完 Enter 鍵後,應該可以看到畫面回應了「OK」,如果沒訊息,先檢查一下硬體的部份是否有按腳位接對了,再依前述的程序重新來一次。
如果畫面上的「OK」一直重覆的出現,停不下來(我被它給嚇壞了,以為買到了有問題的東西),只要每次按 Enter 鍵時快速的多按一下(也就是連按兩次 Enter 鍵),或是用鍵盤按「Ctrl C」,它就不會瘋狂的回應你了。這個問題應該是 HC-05 的 AT 指令最後要送出「\r\n」,而我們按下 Enter 鍵時,終端機的預設值並沒有送出「換行」字元所致。以 Windows 的「超級終端機」來說,我們可以多設定以下的內容來避免前述的情形:
如果用的是 Arduino 內建的終端機,就在下方多選個「Both NL & CR」,讓在在每道指令後頭都自動加上「\r\n」。
HC-05 的 AT 指令
除了「AT」這個指令外,接下來,我們先查詢一下 HC-05 目前的連線速率,在終端機中輸入底下的指令並按 Enter 鍵:
AT+UART?
如果都沒更改過,預設值的回應可能是:
+UART:9600,0,0
我們想將速率換成 S4A 的 36800 ,輸入以下的指令,並按 Enter 鍵:
AT+UART:38400,0,0
成功的話,HC-05 應該會回應「OK」。
除此之外,可能還有其它 AT command 可以執行的,基本的格式是:
- 查詢:以問號 (?) 結尾。
- 設定:將前述的問號換成冒號 (:) ,其後再接要設定的新內容。
例如:
- AT+VERSION?
- AT+NAME?
- AT+ADDR?
- AT+PSWD?
上面分別是查詢版本(VERSION)、藍芽裝置名稱(NAME)、藍芽裝置位址(ADDR)、配對時的密碼(PSWD)。
相對應的設定指令變成:
- AT+NAME:xxxxx
- AT+PSWD:xxxxx
xxxxx 為想自訂的內容。
還有其它的 AT 指令,有興趣可以找 HC-05 的手冊來研究吧!
參考文章
相關文章
之前只有設定過,還不知道有加?查詢方式,謝謝你的分享
回覆刪除我之前做的時候藍牙模組卡很久 ,有時會遇到問題,有時都要TX RX交換
才解決。
之前做的時候,有參考coopermaa大大的文章
Arduino as an USB to TTL adapter
http://coopermaa2nd.blogspot.tw/2012/07/arduino-as-usb-to-ttl-adapter.html
他的方式不用裝韌體就可以用arduino設定藍牙模組,我只用uno 試過
,在此也與你分享!
文宏老師您好:
刪除謝謝您的分享。
利用 Arduino 來設定的方法是用 SoftSerial ,所以需先安裝靭體,而 USB to TTL 的方式則是利用硬體,其實這一篇是給沒有 USB to TTL 的人參考用的,個人是用硬體直接接,這樣較快速,插了就能用。
TX RX 的問題的確是個關鍵,我被自己買的 USB to TTL 困惑了許久。
請問一下雄老師:
回覆刪除可不可以請你做個HC05(主)連HC05(從)的範例呢?
我試了好久連線都不成功
謝謝!!
抱歉!我只有一個 HC-05,要如何做呢?
刪除其實, 我並不是唸電子的,更不是專家,只是玩一玩而已。倒是給您一個建議,印象中 google 一下應該有您要的答案。
兩個 HC-05 藍牙模組透過SSCOM互連設定 HC-05
刪除※ 先下載SSCOM,電腦接上USB to TTL線,如果接不好,查詢命令下不了,就重覆多接接腳幾次,然後記得COM埠要選對,還有SendNew要打勾、BUAD要設定正確。
(1). 首先,以 AT command mode ,先設定一下兩片 HC-05,主要是讓它們扮演不同的角色:slave 和 master (出廠時,預設是 slave);除此之外, 通訊時,UART 的 baud rate 也要設為一樣。slave 和 master 出廠時,BAUD皆為9600,0,0(最好在當Master的那個Bluetooth板上做個記號,以色搞混了)。
(2). 按下藍牙模組上的按鍵不放,後送電;此時,藍牙模組上的LED每2秒閃1次,代表進入AT command mode,可設定或查詢藍牙模組的連線參數。
注意1:此「AT command Mode」 的BAUD為38400,0,0;全部設定完成後,要對傳資料時是「非AT command mode」的狀態,而這時就要把主、從的Default BAUD調為9600,0,0。
注意2:HC-05 藍牙模組要加上行結尾字元\r\n,即0D、0A;而,HC-06模組的AT指令不需要加上行結尾字元。
(3). 檢測HC-05 slave 端的連結,用AT command :at+uart? 或設定如下:AT+UART=9600,0,0
• AT+CMODE=0
• AT+ROLE=0
• AT+ADDR?
如果「AT+ADDR?」回應的內容是:
+ADDR:14:1:61757
要記下 +ADDR: 後面的那串數字「14:1:61757」(slave 的 address),在設定 master時會用到。
(4). 檢測HC-05 master 端的連結,用AT command :at+uart? 或設定如下:AT+UART=9600,0,0
在當 master 的 HC-05 必須執行的 AT command :at+uart? 或設定如下:
• AT+UART=960,0,0
• AT+CMODE=0
• AT+ROLE=1
• AT+BIND=14,1,61757
(注意:14,1,61757 請自行置換成您查到的 slave address)
特別注意:「AT+ADDR?」查到的 address 中是用冒號「:」當分隔符號,而在 BIND 指令中用的卻是用逗號「,」當分隔符號哦!即,AT+BIND=14,1,61757
依上面的 AT commands 來看,slave 和 master 不同的地方在後兩道指令:
• 「AT+ROLE=」用來設定模組的角色是 slave ( 0 ) ,還是 master ( 1 )。
• 「AT+ADDR?」用來查詢 client 的 address。
• 「AT+BIND=」用來指定要主動連哪一個 address 的 slave。
(5). 當設好藍牙模組的連線參數後,設定藍牙模組為非AT command mode;先將藍牙模組斷電後,再上電即可;此時,藍牙模組上的LED每0.5秒閃1次(也就是快閃2下)。
(6). 接著用SSCOM以9600,0,0連起來即可互傳資料了。
雄老師你好:
回覆刪除我買的hc05 比較特別 他沒有 KEY 腳位而是 EN 腳位 其他腳接腳都一樣
我google了一下發現網路上好像都沒有類似的資料
請問老師知道解決方法嗎?
HC-05 VCC → Arduino 5V
HC-05 GND → Arduino GND
HC-05 TXD → Arduino pin 10
HC-05 RXD → Arduino pin 11
HC-05 EN → ?
Jacky 您好:
刪除您的問題如果能找到廠商給的 datasheet 才有解。幫您 google 到底下的文:
http://www.instructables.com/id/AT-command-mode-of-HC-05-Bluetooth-module/step3/If-key-pin-is-not-present-or-not-connected/
您參考看看。
請問如果改過 但不記得藍芽模組目前的鮑率
回覆刪除可以去哪看嗎?
您好:
刪除如果您用的是 HC-05 的話,不用擔心這一點,因為進入 AT Mode 後一定是用 9600 和 HC-05 通訊,會被改掉的是藍芽的鮑率,忘了,將它重新設定。但如果是 HC-06 的話,只好一個個 baud rate 去猜囉!
如果要從HC-05傳訊息給另一個HC-05,程式要怎麼打?(RXD:6,TXD:7,EN:9)
回覆刪除Jimmy 您好:
刪除很多人在問這個問題, 不過, 抱歉, 我只有一個 HC-05 , 完全沒有試過。
請問超級終端機顯示Enter AT commands:之後
回覆刪除然後無法在超級終端機介面輸入文字,該怎麼解決?
請下載SSCOM,這個比超級終端機好用。
刪除不好意思想請教老師,為何HC-05只能接TX只能接Arduino的pin10而RX只能接Arduino的pin11,有試著把程式SoftwareSerial BTSerial;改為其他腳位,但皆無法有作用
回覆刪除您好:
刪除Arduino SoftwareSerial 其實是有腳位限制的,您可到他們的網站中找到資料。
不好意思我輸入"AT" 顯示出 AT 不是 OK
回覆刪除不管輸入甚麼 輸出就會顯示輸入的東西
請問這是什麼問題呢?
請問要怎麼判斷藍芽模組是否燒掉
回覆刪除您好:
刪除我只會用最笨的方法,看 LED 燈是否亮,試試能不能進入 AT mode,看能不能和電腦通訊,看看能不能和其它藍牙裝置連線 XD
我的HC-05可以進入AT mode,但是無法被手機和電腦的藍牙搜尋到,請問這個要怎麼解決?
回覆刪除您好:
刪除建議您先檢查 HC-05 的 role 目前是 master 還是 slave , 如果是設定成 slave 才能被搜尋。不然, 之前同事的 HC-06 發生這種情形時, 是 HC-06 燒壞了。
請問有辦法透過HC_05來連接電腦去跑Arduino的CODE嗎
回覆刪除(Arduino版接行動電源不接電腦)?
您好:
刪除HC-05 的角色是透過藍牙來接收或傳送資料, 而資料是什麼就看設計者, 您有什麼想法, 去試了便可以知道結果了。
相關文章中有利用 S4A (電腦端) 和遠端不接電腦的 Arduino 通訊的記錄, 應該類似您提的吧! 網路上有很多別的方式, 您可以找找別人如何應用 HC-05 的實例。
請問一下,
回覆刪除我使用的是 WIN10,在管理藍芽裝置,已經有看到 HC-05已配對,
但是 使用 AccessPort137 跟 CoolTermWin 都無法傳送指令給 Arduino
Arduino 互動設計入門@動手做 14-1 使用軟體序列埠程式連結 Arduino 與藍芽模組
無法試驗成功
感恩
Johnson 您好:
刪除完成配對, 如果 baud rate 沒設對, 資料無法正確的解碼;建議您先確認是不有在傳資料, 如果有, 但為亂碼, 就有可能是兩邊的 baud rate 不同; 另外 tx / rx 也得確認腳位接對了。
至於您提到的那本書, 我沒看過, 建議您寫信問作者比較快。
試了好多種方式,終於成功!!感謝大大!!
回覆刪除很受用,感謝您!
回覆刪除我想用手機連到Arduino藍芽模組HC-05,卻顯示can’t connect to device這串英文,請問該如何解決?
回覆刪除