市面上比較常見的藍牙模組,目前應以HC-06(僅從機功能)及HC-05(主從機功能)為大宗,很多人買HC-06作為從機連接Arduino,與Android App連線(Android手機做主機),透過藍牙來遙控Arduino。Google許多文章,多半是講如何以Arduino Uno來代替USB to TTL連接線連接HC-06,透過AT指令來設定設備名稱、連線密碼跟Baudrate(HC-06也只能設定這三樣參數)。關於如何判斷是HC-05還是HC-06,這篇寫的很清楚。總之每個人買到的藍牙模組可能會不太一樣,像我的HC-05是焊上6隻pin腳,晶片上有打個金色勾勾,上片還有個像reset的按鈕;而HC-06則只有焊4隻pin腳。如下圖:
從左至右:HC-05、HC-06、USB to TTL
反面:針腳從左至右是EN、VCC、GND、TXD、RXD、STATE
接法很簡單(兩片一樣),左至右
RXD接TX、TXD接RX、VCC接5V、GND接GND
在Arduino IDE上選擇USB to TTL的序列埠,新增一個視窗並打開Serial Console,並將換行指令改為「Both NL & CR」;HC-06可直接開始打入AT指令按Enter,例如打入AT,HC-06會回應OK。但HC-05需要在「通電後」按一下右下的按鈕,方可進入AT模式,如果已在連線狀態,則需要「長按住」按鈕以輸入AT指令,意思是說如果沒按按鈕,輸入AT指令則不會有回應。至於詳細的AT指令,每片模組多少有些不同,所以請跟你購買的商家索取手冊參考。
設定小提醒:
- 藍牙模組有好多種,每個人買到的不一定一樣(就算都叫HC-05)
- 記得索取手冊,才能確定AT指令跟預設的設定值
- 用USB to TTL連線來設定藍牙模組會比較簡單(不用輸入程式)
- HC-06可更改設備名稱,配對密碼(在Mac上用0000會比較簡單),連線率9600可先不更改
- HC-05在從機模式時要「通完電」按一下按鈕,才能進AT模式輸入指令
- HC-05在連線中(或主機模式AT+ROLE=1時),需要按著按鈕才能輸入AT指令
連線步驟:
- 先將HC-06設定好,確定與電腦連線正常,可先從電腦上抄下他的Address備用
- 將HC-05的配對密碼以及Baudrate設成跟HC-06的一樣,比如說0000以及9600
- 參考HC-05手冊,將角色設為Master(AT+ROLE=1)
- 設定連接模式為指定藍牙連接地址(AT+CMODE=0)
- 初始化SPP profilelib(AT+INIT)
- 查詢藍牙設備(AT+INQ)
如果沒有自動連上,再嘗試指定藍牙位址配對(AT+PAIR=1234,56,abcdef, 20)試試看。總之一旦連線成功之後,無論主從機哪邊斷電,只要兩邊都開機時就會自動連接上,這樣你的HC-06與HC-05就連線成功啦。
另外我發現有一點往往讓剛試藍牙的人搞不太清楚,就是到底藍牙模組跟Arduino是要怎麼連接,答案很簡單,就RXD連上pin1(TX),TXD連上pin0(RX)再加上5V/GND這樣即可,無需匯入程式庫,此時Arduino的Serial Console就連在藍牙上,傳送字元給藍牙,就如同在Serial Console上鍵入該字元按Enter一樣,在程式裡使用 Serial.read() 就可以接收字元。
還有就是pin0/1原本就是Arduino的序列埠,所以上傳程式前要記得把藍牙接線暫時拔開,否則它占住Serial Port就無法上傳程式了。Mega有三個硬體Serial Port還可以錯開,UNO的話,可以用SoftwareSerial程式庫(比如說SoftwareSerial BT(10, 11); // RX, TX)在「特定」幾個腳位模擬序列埠,這樣上傳程式時就不用一直去拔藍牙連接線了。或者直接使用藍牙序列埠上傳程式。
至於兩個藍牙設備連線後可以做出什麼東西,就靠大家的想像力跟創意啦!
P.S. 關於SoftwareSerial,在有些Bard rate下工作錯誤率好像還蠻高的,至少在我的Nano板子上57600與38400都無法正常工作,但9600就OK。所以要求正確率的話,還是接Hardware Serial Port吧(也就是pin 0與1)。
P.S. 關於SoftwareSerial,在有些Bard rate下工作錯誤率好像還蠻高的,至少在我的Nano板子上57600與38400都無法正常工作,但9600就OK。所以要求正確率的話,還是接Hardware Serial Port吧(也就是pin 0與1)。
沒有留言:
張貼留言