HC-06 的 firmware 沒有 HC-05 完整,少了很多的 AT 指令可以使用,最重要的是,在沒有進行藍芽配對時就是 AT command mode,不用像 HC-05 必須將 key 設為高電位才能進入 AT command mode,這一關卡最久。不過,這也有一個缺點,HC-05 的 AT command mode 使用固定的 baud rate 38400,而 HC-06 如果已經改過 baud rate ,想利用 AT command mode 來改 baud rate,如果忘了原來的設定值,還得先猜一下原來設的速率是多少,不然根本無法溝通(不知是否有辦法讓它恢復成預設值?)。下面就來看看如何設定 HC-06 的連線速率。
以 USB to TTL 與 HC-06 連線
如果有 USB to TTL ,就按底下的對應該關係將腳位接好:
HC-06 VCC → USB/TTL 5V
HC-06 GND → USB/TTL GND
HC-06 TXD → USB/TTL RXD
HC-06 RXD → USB/TTL TXD
像我的 USB to TTL 直接用 4 pins 的杜邦端子插上就搞定了。不過,接過好幾個不同的裝置後,終於搞懂我的 USB to TTL 上的標示 TXD & RXD 是另一端的,每次我照著腦中的記憶,將 TXD & RXD 對調,反而是錯的。結論是:手冊很重要,不過,我買的這個沒手冊 XD。
接好線後,將 USB/TTL 插入電腦並以終端機軟體(例如:Windows 的「超級終端機」、putty .....)連上 USB/TTL 的序列埠即可輸入 AT commands。
以 Arduino 與 HC-06 連線
第二種方式是利用 Arduino 的 SoftwareSerial 來和 HC-06 通訊,顯示訊息及輸入指令的工作交給 Arduino 的序列埠,再由 Arduino 幫我將指令透過我們自訂的腳位寫入 HC-06 並由 HC-06 擷取回應的訊息。
HC-06 和 Arduino 的腳位對應如下:
HC-06 VCC → Arduino 5V
HC-06 GND → Arduino GND
HC-06 TXD → Arduino pin 10
HC-06 RXD → Arduino pin 11
接好硬體後,將下面改自 Hazim Bitar (techbitar) 給 HC-05 的 firmware 程式碼 upload 到 Arduino:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX | TX
void setup()
{
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(9600); // HC-06 current bound rate (default 9600)
}
void loop()
{
// Keep reading from HC-06 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Keep reading from Arduino Serial Monitor and send to HC-06
if (Serial.available())
BTSerial.write(Serial.read());
}
上面紅色的 9600 是 HC-06 出廠後的預設 baud rate,如果已經改過了,必須自己置換掉,不然,可能無法正常連線。
Arduino firmware upload 完畢,關掉 Arduino IDE 程式後,我們就可以用終端機軟體連 Arduino 的序列埠(以 9600 來連線)。成功和 Arduino 連上線,畫面上應該會出現Enter AT commands:」的訊息,如果輸入「AT」,HC-06 應該會回應「OK」,如果沒有回應,就要檢查一下接腳是否正確,或是將「BTSerial.begin(9600)」中的 9600 要換成別的連線速率試試。
HC-06 的 AT command
HC-06 的 AT command 只有簡單的幾項,而且不像 HC-05 必須按 Enter 鍵送出「\r\n」才會執行並回應。所以,我們一按完「AT」兩個按鍵,它馬上就回應「OK」了。試了一下,它的指定一定要用大寫字母,也沒有什麼查詢的 AT 指令,底下就列出在玩 S4A 可能會用到的 AT commands。
- AT:測試,回應「OK」
- AT+VERSION:回應靭體的版本。
- AT+NAMExyz:將裝置名稱改為「xyz」。n
- AT+PIN1234:將連線密碼換為「1234」。
- AT+BAUD4:將 baud rate 換為 9600。
- AT+BAUD5:將 baud rate 換為 19200
- AT+BAUD6:將 baud rate 換為 38400
- AT+BAUD7:將 baud rate 換為 57600
更換 baud rate 的指定可以由 BAUD1~BAUDC ,有需要再自行上網找說明。
因為 HC-06 一輸入完「AT」就馬上會回應了,建議上面的指令用複製貼上的方法,不然,很難跟晶片比快啦!
相關文章
雄老師您好:我想問一下在S4A 藍芽無線遙控科學魔法車那篇,若改使用HC-06的藍牙,改自 Hazim Bitar (techbitar) 給 HC-05 的 firmware 程式碼要如何加入或變更??
回覆刪除非常感謝喔
您好:
刪除Hazim Bitar (techbitar) 的 firmware 只是用來更改 HC-06 / HC-05 的 baud rate ,改完以後,Arduino 的 frimware 就應該再換成 S4A 的 firmware ,這樣才能使用 S4A 來寫程式控制 Arduino。無論用 HC-05 或 HC-06 來傳輸資料,兩者的車子應該都相同,無需做變更的。
雄老師您好:
回覆刪除我依照您的方法成功的在Arduino上的Serial Monitor顯示出「Enter AT commands:」,也可以接收指令顯示「OK」,但是將我把Arduino版子以及HC06從電腦上拔除,另外接上電源之後,終端機可以成功與HC06藍芽連結,不過沒有辦法讀出指令,就連「Enter AT commands:」也沒有顯示出來,請問這是哪裡有問題呢?
柏諭您好:
刪除如果您執行過「AT+BAUD6」,HC-06 的速度就會被換成 38400, 和電腦連線時也得配合著改為以 38400 連線,不知您是是換過連線速率的參數?
兩個裝置的 baud 不同時,資料就無法傳輸,因此,您可能要再檢查一下連線速率。
老師您好:
回覆刪除我使用MEGA 2560
HC-06 TXD → Arduino pin 10
HC-06 RXD → Arduino pin 11
可以成功設定HC06
但如果我把
HC-06 TXD → Arduino pin 0
HC-06 RXD → Arduino pin 1
就不行,這是為什麼呢?
Arduino pin 0 , 1 是預設的 RX, TX ,接上 USB 後的 Console 就是用這兩個腳位,這樣一來,您的「Serial」 就會和「BTSerial」打架,無法顯示藍芽的狀態或取得鍵盤的輸入給藍芽,自然就無法使用囉!
刪除這也是我們不用 pin 0/1 ,而用 pin 10/11 的原因。
在請問老師:
刪除我把
HC-06 TXD → Arduino pin 8
HC-06 RXD → Arduino pin 9
SoftwareSerial BTSerial(8, 9); // RX | TX
也不行耶!
是我對於這塊板子的概念還沒很清楚,還是我哪裡改錯
請老師指教
謝謝~
不行的時候,將 TXD 和 RXD 交換一下試試看。
刪除抱歉,查了一下, SoftwareSerial 其實是有限制的, 您可以參考底下的文章:
刪除Arduino SoftwareSerial Library
裡面最重要的一段引述如下:
Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
真的有限制,謝謝老師指導!!!
刪除雄老師您好:
回覆刪除不好意思,可以請問一下嗎
我的藍芽模組是HC-06的
他可以連接到手機,但是手機端的軟體一直無法送出資料(按send一直送不出去
這樣可以知道是神麼問題嗎?
還是模組壞掉了?
謝謝
您好:
刪除由您目前所提供的資訊, 實在很難判斷問題在哪裡。像我的電腦有藍芽, 也玩 S4A, 我會先將 HC-06 速率設為 38400, 再利用電腦和 HC-06 連線看看是否能連線並有數據在跑, 至少先確認 HC-06 有沒有問題, 才來測試手機中的 App 。至於您呢? 您會想用什麼程序來測試 HC-06 ?
以 S4A 來說, Arduino 的 firmware 中已寫死, 藍芽必須用 38400 來連線, 至於其它的 firmware 則得看程式怎麼寫, HC-06 的 BAUD 沒設對, 無論傳送或接收, 都可能變成無法解碼的資料。
雄老師您好:
刪除不好意思因為是新手第一次接觸,可能有些地方不懂
HC-06 baud rate一開始是9600,我沒更改過
另外我是用下面這兩個測試程式及接線圖附在下面的網址
1.車01(直接用arduino上的txd,rxd)
2.藍芽lef測試(有修改接腳)
https://mega.co.nz/#F!0ZQ0jaqI!yH28uPiYUrDdR7GF4jTBVw
藍芽模組可以接到手機(藍芽模組的燈由閃爍到不閃爍)
卻不能傳送和接收資料
不好意思麻煩老師了,謝謝
您好:
刪除看了您的照片, HC-06 是接在 sensor shield 上, 它使用的是 Arduino 的 d0(RX), d1(TX), 照您的「藍芽led測試.txt」的程式看來, 卻是用 SoftwareSerial , 所以「藍芽led測試.txt」應該有問題吧?
而「車01.txt」如果也無反應, 建議將 TX, RX 兩個腳位交換試看看, 我第一次玩時, 為了 TX, RX 接反, 也查了好久。
抱歉, 我沒用過 sensor shield , 只能這樣猜囉!!
您好:
回覆刪除程式的問題, 如果看不到程式碼, 實在無從 debug 起。
不好意思~
回覆刪除程式碼在這網址:http://my.stust.edu.tw/blog/webhd_read_file.php?id=124956&verifyCode=e5c082d04bbb9c97d77d2f345bb026c4
我不是使用Arduino寫的,我是用8051
謝謝你!
張嘉翔您好:
回覆刪除您真可愛, 8051 我沒用過, 這篇文章討論的是 Arduino 哦!
抱歉, 幫不上忙。
想說都是用C語言寫的,語法應該差不多
回覆刪除不過還是謝謝你~
雄老師您好:
回覆刪除請問我剛剛用FT232RL 模組連接HC-06想改速率,無法成功。後還用Arduino就可以了,可是後來發現那FT232RL好像壞了,請問有可能這種情形嗎? 還有不知道如何測試FT232RL是否已經故障,目前是要燒錄PRO時候,已經無法正常通訊。
Jack 您好:
刪除抱歉,您提到的 FT232RL 我沒用過吔!
雄老師您好:
回覆刪除請問老師你有試過兩組Arduino透過兩塊HC-06藍芽模組進行,一模組設為Master 另一模組設為Slave,進行資料傳輸嗎?
我的兩組藍芽 baud rate 是設定9600 但無法兩方傳遞資料只能看著藍芽燈閃爍
但無法傳遞兩邊Arduino資料
因為自學找蠻多資料也不太行請老師指點一下 謝謝你
您好:
刪除我只有一片 HC-05, 沒玩過您提到的架構。
跟據資料,如果冇睇錯。HC-06只能當「大陸人」─奴隸。所以呢,兩塊hc-06注定是搭不上的。
刪除雄老師您好:
回覆刪除請問從手機已配對過的HC-06藍芽模組斷線之後它可以直接連線嗎?
還是需要在一步確認的步驟呢?
謝謝
您好:
刪除配對成功後, 有需使用時會自動連線。
老師您好:
回覆刪除我是用hc-05來傳送資料給電腦,但要用什麼方法接收我要傳給電腦的資料呢?
電腦端插上藍芽 dongle , 與 HC-05 配對連線後, 應該會多一個序列埠, 接著就和一般由序列埠接收資料的方法一樣了, 此部份可以用這些資訊去網路搜尋解法。
刪除抱歉, 刪了一篇留網拍網址的留言。個人喜歡自己動手玩, 故有此篇筆記, 現成套裝的東西一定有, 也一定方便, 但對不是以電子為正職的人來說, 樂趣正是在研究的過程中。
回覆刪除雄老師您好:
回覆刪除目前我使用HC-05
請問如何實現ARDUINO所感測的SENSER值傳到PC上顯示出來呢?
謝謝
HC-05 如果電腦的藍牙傳輸器連線成功,電腦應該會建立一個序列埠,您可透過這個通道,接收 Arduino 傳來的資料。
刪除雄老師您好:
回覆刪除我想請教
如何讓兩個裝備了CH-06的arduino
能以主從的方式控制arduino上的腳位輸出I/O訊號
樓上兩位朋友在發問前,可能都忘了先看別人的提問,其實您問的,我之前都回覆過了 XD
回覆刪除雄老師你好:
回覆刪除請問沒有usb to ttl就不能進入AT嗎?
您好:
刪除我在猜, 您在本篇留言, 這篇的文章應該沒有看完哦~~
本文中, 除了 USB to TTL 外, 還有一小節是「以 Arduino 與 HC-06 連線」, 您可以參考看看。
老師你好
回覆刪除我想問一下
我們通常執行的都是手機傳訊息給arduino
我現在要由arduino傳訊息給手機 使用HC-05可以辦到嗎?
在 Arduino 上來看, 我們用 read 讀取手機傳來的資料, 如果用 write 會發生什麼事呢?
刪除老師您好
回覆刪除近期才開始接觸Arduino 想請教您一些問題
若想要讓兩塊Arduino 透過藍芽模組HC-05 傳遞訊息 有辦法做到嗎?
是否是需要綁死藍芽的MAC 才能自動配對呢?
另外我有在網路上查了些相關資訊 如下
http://choyihsu.blogspot.tw/2012/12/arduino.html
他的方法有提到
利用
Serial3.println("SM,1");
Serial3.println("C,00066648548F");
來設定開發板的主從端 與藍芽MAC
但是它不是只是把它印出來顯示而已嗎? 為何說是設定呢?
我沒用過 "P-BSMi Silver 藍牙模組" ,您是不是是問該文的作者才對呢?
刪除老師
回覆刪除如果我想用2個ARDUINO去作溝通
ARDUINO 1 我用HC-05傳送信息去ARDUINO 2,
但是ARDUINO2 用什麼方法可以接收到1經HC-05所發出的信息呢?
我也有同樣的問題 想請教老師~ ((昨天留言不知為何消失 似乎被刪掉了
刪除所謂的 "留言消失" 是被 blogger 自動放到 "圾垃" 中了 XD
刪除我針對 HC-05 (我只有 HC-05)測試後,整理了一點筆記在下面這一篇中,您參考看看:
雄:Arduino : 兩個 HC-05 藍牙模組互連
您好
回覆刪除我想請問 是否可以直接在Arduino的程式碼中
讓HC-05進入命令模式
並直接利用程式碼下答ATcommand的相關指令 ?
(就不用接線讓它進入命令模式 然後又需要透過Serial Monitor下AT指令)
您好:
刪除照HC-05進入 AT command mode 的方式, 必須要 KEY 的腳位高電位後, 再讓 VCC 通電, 不接線, 要如何進入命令模式?
如果您的 HC-05 有引出 KEY 腳位, 倒是我們可以利用這樣的程序, 將 VCC 和 KEY 各接到 Arduino 的 D2~D13 中的腳位, ex. VCC→D2, KEY→D3 , 一開始讓 VCC(D2) 及 KEY(D3) 都設為 LOW, 接著 KEY(D3) 設為 HIGH ,最後才讓 VCC(D2)設為 HIGH,這樣一來, HC-05 即進入 AT command mode, 就可以利用接在 Software Serail 的 TXD/RXD 來傳送 AT command 囉! 先這樣, 有空我再整理單獨一篇詳細解說。
老師你好
回覆刪除我照這上面的步驟去接HC-06
arduino程式碼也是直接複製上面
依照您的方法成功的在Arduino上的Serial Monitor顯示出「Enter AT commands:」
可是打AT一直得不到回應
HC-06沒有調過傳送速率所以應該是原本的9600
接腳也都是照這上面接
HC-06的燈一直閃爍,大概每秒兩次
請問這個狀況該如何處理,謝謝老師
如果沒回應, 可以先試著將 RXD/TXD 交換接,
刪除抱歉! 那塊 HC-06 是別人的, 手上並沒有東西可以觀察, 忘了原來的 LED 是如何閃爍的。 但是一個原則, 想進入 AT command mode, 不可以讓其它裝置和 HC-06 連線, 不然, 一定進不了 AT command mode。
可以請問一下老師
回覆刪除如果使用HC-08的模組 也可以利用以上的方法操作嗎
您好:
刪除抱歉,我沒有操作 HC-08 的經驗,網路查一下手冊,應該有說明才對。
謝謝回復
刪除老師您好
回覆刪除我前面的步驟都是一樣的
可以順利的更改名字
但是在更改密碼的時候
輸入AT+PINXXXX都沒有回應
也無法改變密碼,都是預設的1234
可以請問是什麼問題嗎?!
抱歉,我並不是專家啦,會的內容都在本文內容中了。
刪除建議您可能還是要找手冊研究一下。
我只有 HC-05,而 HC-06 是別人的,只玩過一個晚上。
老師您好!!
回覆刪除請問HM-10低功率藍芽連結到arduino該怎麼做?
您好:
刪除抱歉, 沒用過 HM-10, 哈~應該說孤陋寡聞, 剛剛 Google 過才知道它什麼 XDDD
老師您好!
回覆刪除我在上傳您的程式碼時出現以下字樣
avrdude: ser_open(): can't set com-state for "\\.\COM3"
請問這是什麼意思?(我用HC06)
老師您好!
回覆刪除我打開Serial Monitor並輸入AT(確定大寫)
結果下方一樣是一片空白
能告訴我是什麼問題嗎?
您好:
刪除可能要先確定腳位都接對了, 最常見的是 RXD 和 TXD 接反了, 兩個腳位交換看看。
再來是要確定連線的 baud rate 設對了沒, 如果不知道您的模組是用多少, 就只好一個個去試。
HC06 可以RESET嗎?
回覆刪除之前有設定AT+BAUDC的樣子,但中間還有改BAUD RATE
現在輸入甚麼AT指令都沒反應,請問該怎麼辦?
您好:
刪除個人只買過HC-05 , 如同文中所寫的,我也不知道如何 reset HC-06, 抱歉,幫不上忙。
老師你好:
回覆刪除請問我手上有HC-05,透過手機藍牙直接控制8051的LED是否可行?
目前狀況,藍牙可以配對上,但是無法做控制,8051那端的程式我只寫進baud init宣告,手機端程式則是回傳字符給8051,不知道老師是否對這個有研究呢?
您好:
刪除個人沒有用過 8051 ,建議您用兩個關鍵字 Google 一下就有答案了。
謝謝老師
刪除老師您好
回覆刪除請問手機找不到HC-06的名稱,但電腦可以連線,不知是否是手機的問題,我手機是iphone, thanks.
您好:
刪除iPhone 應該無法和 HC-06 連線, 如果您有內建藍牙的 Android 手機或平板, 應該就可以了。
老師 好,請問iphone改如何與Arduino連線?
刪除您好:
刪除據我所知,用藍牙4.x 的模組好像容易一些。
抱歉, 我只有接觸一點點而已,用過幾個 iPad 上現成的 Apps 略玩了一下(沒有 Android 上方便), 還沒自己寫程式和 Arduino 連線。
老師不好意思我想請問一下
回覆刪除我也是複製上面的整個流程
我用的是HC-06
再來我想要讓他接收到指令然後讓馬達轉動
在這中間我要再打甚麼指令才可以讓他執行馬達轉動的程式?
馬達程式我這便已經有了只是我要中間的指令
您好:
刪除如果您是以 Arduino 來控制馬達, 只要讓 Arduino 去接收並處理藍牙模組收到的「指令」, 這「指令」是你自定的通訊方式(或者說是文字)。以 Arduino 來說, 會使用到「Serial」一系列相關的指令, google 一下會有很多範例。
您好:
回覆刪除HC-06 做的工作是幫您發出或接收資料, AI2 能做的是當 Android 收到由藍牙傳來的資料後, 在 Android 畫面上做輸出或是透過藍牙回送想做的程序給另一端。
無論做什麼, 就是處理 input/output , 想收發什麼資料只有您自己知道, 如何運用資料, 處理的程序還是得問您自己。
老師您好 我是用藍芽適配器跟ARDUINO上的HC-06做配對,終端機軟體是用
回覆刪除SSCOM32,接上去以後可以直接連線傳輸,就是收不到來自setup{}的資料,
但看您好像是可以的?除非我在Serial.print前面幾行寫先輸入一個字元
才可往下繼續的while迴圈,就可以看到serial.print的內容。
(我並沒有使用serialsoftware的library)
void setup() {
刪除Serial.begin(9600);
while (Serial.available() && Serial.read()); // empty buffer
while (!Serial.available()); // wait for data
while (Serial.available() && Serial.read()); // empty buffer again
Serial.println(F("\nSend any character to begin : "));
}
您好:
刪除我想,「void setup()」顧名思義是做一些前置的簡單設定就好,後續要反覆執行的指令就放在「void loop()」中,建議先查一下程序的基本架構,後面會更順利。
但是 我只是要知道藍芽跟電腦連線了沒,連線了就傳CONNECTED READY,故放在SETUP,並不要反覆執行。
刪除雄老師 您好:
回覆刪除我想請問是否藍芽模組(HC-06)連結到arduino板上接電之後,還沒有將任何程式燒到arduino裡,這樣是否藍芽模組上的led燈會亮?還是一定要寫程式進去後藍芽板才會有反應?
另一個問題是,如果只是單純接收電腦指令控制馬達,這樣需要進入AT模式嗎?
還請您幫忙指導,謝謝!
您好:
刪除HC-06的燈號有它自己的定義, 您可能要參考使用手冊, 一般是以閃爍的頻率來判斷目前的狀態。因為手上只有 HC-05, 無法有更進一步的說明, 建議您查查看自己那塊的手冊。
我都只有要改模組的組態時才會進入 AT command mode。
雄老師 您好:
回覆刪除請問藍芽模組(HC-06)連結到arduino板上接電之後,確定可以執行AT command,但無法與手機(安卓)連結,它顯示拒絕配對要求,請問這是哪裡出了問題,再請您幫忙指導,謝謝!
您好:
刪除如果操作都沒問題,卻無法連線,HC-06 有 master 和 slave 兩種,有沒有可能買錯了?
老師您好
回覆刪除我依照你的方式接線
也直接複製你的程式在Arduino上
Serial上也有顯示"Enter AT commands:"
可是我打AT並沒有回應
我是用MEGA2560的板子
我有改過各種鮑率試試
但還是沒有回應
想問問有甚麼狀況會這樣??
老師您好我想寫一個藍芽程式碼,可以寫個藍芽程時讓我參考嗎,我只要藍芽程式碼,不要和LED有關,謝
回覆刪除你好 我用hc-06將程式貼在Arduino上
回覆刪除AT有顯示ok但是改AT+BAUD7速率它顯示error(0)
是步驟有哪個地方有錯誤嗎
您好:
刪除建議您看一下板子上的型號,用它當關鍵字,查一下它的AT指令的手冊。個人的經驗,一樣叫 HC-06 / HC05,AT 指令可能有差異的。所以一切都要查手冊才能確定。
我有看過了 是一樣的
刪除打了AT有顯示ok應該就有進入模式了
只是無法改速率
老師你好 tx rx接2和3可以嗎
回覆刪除