【雙A計畫】藍牙模組(HC05、HC06)常見的指令使用教學

在教到藍牙之間的通訊的課時,常常會搞錯藍牙型號,想寫這篇文跟大家分享,市面上常用的HC-05和HC-06外觀幾乎一樣,不知道如何對藍牙鮑率做設定,想深入研究可以來看看喔。

 

雙A計畫文章總覽:

中文系列文章

English version

 

在按照本文中步驟操作時,請讀者一定要購買時請先與商家進行確認以下幾點:

  • 藍牙型號是HC-05還是HC-06
  • 若是已經確認藍牙型號後,請再與商家確認出廠預設鮑率是9600、38400…..等。

如果以上兩點都已確認過,在做藍牙相關設定時會比較快上手,但一切以商家給的文件為主。

接下來教大家如何快速辨別我們買的藍牙是型號是HC-05還是HC-06,還有藍牙指令設定,所以針對以下幾個部分,以Keyes藍牙的 HC-05和HC-06做範例(本文參考instructable藍牙文件、Retun的Blog)

本文大綱

  1. 藍牙HC-05和用Arduino UNO 板設定AT指令教學
  2. 【進階設定】HC-05主動模式和手機藍牙連線
  3. 藍牙HC-06和用Arduino UNO 板設定AT指令教學
  4. 藍牙HC-05 USB轉TTL模組設定AT指令教學
  5. 藍牙HC-06 USB轉TTL模組設定AT指令教學

 

作者/攝影   許鈺莨
時間   30分鐘
成本
  • 600~800
難度

★★★☆☆

材料表

【推薦套件】自學者的天堂|Arduino 入門到雲端基本套件包

1.藍牙HC-05和Arduino UNO 板設定AT指令教學(適合課堂上多人使用)

如果看見藍牙有六隻針腳時,就可能是型號HC-05的藍牙,但是還是要依照以下步驟實際接線測試或與商家確認藍牙型號。

設定HC-05的AT指令之前,先與Arduino UNO接線,請先將Arduino的RESET和Arduino的GND接在一起,使得Arduino成為重置模式再依照下方依序接線:

藍牙 Arduino UNO
KEY(or En) 3.3V
VCC 5V
GND GND
TXD TXD
RXD RXD
STATE 不用接

 

接完線後,將Arduino UNO 用USB連接到電腦,選擇該板子的COM Port,按下Serial Monitor,由於這是Keyes藍牙HC-05的鮑率出廠時預設為38400,所以Serial Monitor的鮑率要選38400,另外一個選項要選NL&CR,即可下AT指令,大小寫不拘。


用藍牙HC-05的好處就是如果設成別的鮑率,之後如果忘記了,在Serial Monitor還是可以固定選38400,再用「AT+UART?」指令查詢,或是設定成別的鮑率。

 

輸入AT指令第一次會出現ERROR:(0),第二次輸入AT出現OK,即可進入AT模式。

因為HC-05為主從一體(Slave & Master)藍牙,指令多達36種,所以接下來會告訴各位常用的指令。

 

如果你和我一樣是講師在課堂上教學的話,則一開始這裡有兩個步驟非常重要:

  1. 查詢HC-05 address
  2. 知道自己藍牙的address後改名字

因為在上藍牙通訊時,如果只有兩三位同學的話,還可以一個一個連address測試,但是10幾、20幾位同時在課堂上連線時會搞混,會不知道是不是會連到自己的藍牙,所以要先查出自己藍牙的address的指令,再改藍牙名字。

 

查詢HC-05 address: 「AT+ADDR?」

改名字為CAVEDU: 「AT+NAME=CAVEDU」

查名字 : 「AT+NAME?(確認是否改對)」

改鮑率為9600 : 「AT+UART=9600,0,0」

查鮑率: 「AT+UART? 」

如果改完鮑率請把藍牙電源拔掉再重新接上,再把KEY腳位接上3.3V,新的鮑率設定才會生效

 

設定配對密碼為1234: 「AT+ PSWD=1234」

 

HC-05還有設定主動模式(Master)的功能,指令如下:

設定被動模式: 「AT+ROLE=0」

查詢主/從模式:「AT+ROLE? 」

設定主動模式: 「AT+ROLE=1」

預設出廠模式: 「AT+ORGL」

如上圖所示,設成出廠模式時,可以用前面所知的AT指令可以查到所有的狀態,包括名字、鮑率、密碼皆已回復。如果之前設成主端(Master),後來也會回復設成從端(Slave)。

 

 

2. 【進階設定】HC-05主動模式和手機藍牙連線

既然已經知道如何手動下AT指令設定HC-05為主動模式的話,接下來試著跟手機藍牙連線吧!

既然要和手機連線的話,手機裡就必須先安裝有接收藍牙字串的APP,我是用Android系統的手機,Google paly商店可以搜尋名字為「Bluetooth Terminal」的APP,而在IPHONE的App store也可以搜尋得到一樣名稱的APP,這款APP可以和HC-05雙向溝通。

 

而如何知道手機的藍牙位址,可以由 :設定→關於手機→狀態,知道訊息。

再上一個段落已經知道如何設定HC-05的主動模式了,所以這節以主動連到手機藍牙位址為主。

下列敘述完整步驟,從設定主動模式開始:

 

Step1:切換至主動模式

輸入指令「AT+ROLE=1」,收到回應「OK」,表示藍牙模組已進入主動模式。

 

Step2確認藍牙模式

輸入指令「AT+ROLE?」,收到回應「+ROLE:1」、「OK」,表示當前藍牙為主動模式。

 

Step3:指定藍牙連線至手機連接模式

輸入指令「AT+CMODE=0」,收到回應「OK」,表示藍牙將連線至手機。

 

Step4:重啟藍牙

輸入指令「AT+RESET」,收到回應「OK」,表示藍牙重置。

 

Step5:初始化SPP 函式庫

輸入指令「AT+INIT」,收到回應「OK」,表示藍牙SPP函式庫已初始化。

 

Step6:設定詢問模式

輸入指令「AT+INQM=1,9,48」,收到回應「OK」

1:RSSI信號強度指示。

9:可以搜尋9個藍牙設備。

48:搜尋時間為48*1.28秒=61.44秒內。

 

Step7:開始詢問,將搜尋周遭藍牙裝置

輸入指令「AT+INQ」,收到回應「+INQ:12:34:567890:1F1F,7FFF」(該參數為藍牙Address,不同模組Address亦不同)、「OK」。

 

Step8:結束詢問

輸入指令「AT+INQC」,收到回應「OK」,需要再次輸入指令「AT+STATE?」確認藍牙狀態,若藍牙回應為「+STATE:INQUIRING」、「OK」,代表藍牙未結束詢問,必須回Step4重啟藍牙和Step5初始化SPP 函式庫後,輸入指令「AT+STATE?」,回應為「+STATE: INITIALIZED」,才能成功連線手機藍牙。

 

Step9:綁定連線手機藍牙Address

輸入指令「AT+BIND=1234,56,abcdef」(在此裝置Address以12:34:56:ab:cd:ef為例),收到回應「OK」。

 

Step10:和手機藍牙連線

輸入指令「AT+LINK=1234,56,abcdef」

連線後,手機會出現輸入配對密碼1234,表示配對成功,之後就都不需要配對。

當配對成功後,接下來開啟Bluetooth Terminal,先按下「send」後,會出現之前配對成功的裝置清單,選擇之後即可雙向溝通。

下列是配對成功,HC-05和手機雙向溝通的畫面:

3.藍牙HC-06和用Arduino UNO 板設定AT指令教學(適合個人使用)

目前的HC-06藍牙會有四條針腳居多,分別是VCC、GND、TX、RX,以下是HC-06的正反面:

HC-06正面                                                                                                          HC-06反面

在設AT指令前,也是先與Arduino UNO接線,只需要接四條線。

和前面HC-05方法一樣,要先將Arduino UNO 的RESET和自己的GND接線,再和HC-06接在一起。

藍牙 Arduino UNO
VCC 5V
GND GND
TXD TXD
RXD RXD

 

HC-06出廠後多半都已經設定為從端(Slave),而AT指令只有少數的指令如:密碼、鮑率、姓名….等,以下Arduino UNO Serial monitor示範AT指令,所有AT指令皆要大寫:

 

AT測試,回應OK

和HC-05不同的是,因為Keyes的HC-06出廠時預設為9600,所以Serial monitor的鮑率選項要選9600,選擇「沒有行結尾」或「No line ending」。

測試成功後,接下來就是設定其他的AT指令:

 

查詢版本: 「AT+VERSION」

設定名字為CAVEDU02: 「AT+NAMECAVEDU02」

設定密碼為1234: 「AT+PIN1234」

設定鮑率為9600: 「AT+BAUD4」

編號 鮑率 備註
1 1200 設定鮑率為1200
2 2400 設定鮑率為2400
3 4800 設定鮑率為4800
4 9600 設定鮑率為9600(原廠預設)
5 19200 設定鮑率為19200
6 38400 設定鮑率為38400
7 57600 設定鮑率為57600
8 115200 設定鮑率為115200

與前篇HC-05最大的不同點是,假設你鮑率已經設成9600,若想要改鮑率或改名時,則你的Serial monitor的鮑率選項要選9600才能成功下AT指令;如果你鮑率已經設成38400,則你的Serial monitor的鮑率選項要選38400才能成功。也就是說,當你設定好之後就要記住自己鮑率是設定多少,否則就要每個鮑率去試試看,不像HC-05有固定鮑率為38400可以容易設定,這也是HC-06最大的缺點。

 

那麼問題來了,大家有沒有發現HC-06的AT指令比較少,並沒有像HC-05一樣有查詢address指令,那上課時怎麼辦呢?

個人較好的做法是在上課前先一一設定藍牙名字,上課時學員們才不會連到別人的藍牙。

因此我的建議是,HC-05和HC-06價錢如果差不多的話,可以買HC-05有較多的AT指令設定,上課時學員既可以學習去查address指令,又可以不會搞混連線到別人的藍牙,重點是老師就不用在上課前花時間設定所有學員的藍牙名稱。

 

4.藍牙HC-05 USB轉TTL模組設定AT指令教學

如果沒有Arduino UNO板,則用USB 轉TTL模組也是可以設定AT指令,那麼要在哪裡設定AT指令呢?

其實只要能夠讀取COM Port,使用任何一種終端機軟體皆可,如Putty、RealTerm….等等,我是使用AI的 CH430G USB 轉TTL模組,和使用AccessPort這個終端機軟體。

USB 轉TTL模組

 

AcessPort終端機

在使用AcessPort終端機前,HC-05先與USB 轉TTL模組接線:

USB TO TTL HC-05
3.3V KEY(or En)
5V VCC
GND GND
RXD TXD
TXD RXD

 

接線時要注意是和USB 轉TTL模組連接,USB 轉TTL模組TXD和HC-05的RXD互接;

USB 轉TTL模組RXD和HC-05的TXD互接。

 

再將USB 轉TTL模組插入電腦USB時,會自動安裝驅動程式:

驅動安裝好了之後,需來到裝置管理員查COM Port,這也是和藍牙溝通的COM Port,所以在AcessPort終端機要選同一個 COM Port。

打開AcessPort終端機後按齒輪圖示 ,設定好鮑率9600和COM Port:

再按下電源圖示 ,就可以設定HC-05 AT指令,AT指令請參考「1.分辨藍牙HC-05和Arduino UNO 板設定AT指令教學」。

並在下方發送區輸入AT指令後要先按下鍵盤Enter後再按下「發送數據」即可,以下方圖示表示:

 

5.藍牙HC-06 USB轉TTL模組設定AT指令教學

USB 轉TTL模組和HC-06接線圖,如下:

要注意的是,USB 轉TTL模組的TX要接HC-06的RX;USB 轉TTL模組的RX要接HC-06的TX。

USB TO TTL HC-06
5.0V VCC
GND GND
RXD TXD
TXD RXD

 

AT指令和前面一致,請參考「2.分辨藍牙HC-06和用Arduino UNO 板設定AT指令教學」

並在下方發送區輸入AT指令後按下「發送數據」即可,以下方圖示表示:

 

46 thoughts on “【雙A計畫】藍牙模組(HC05、HC06)常見的指令使用教學

  1. 小慣 says:

    請問為何使用BLUETOOTHTERMINAL的時候,那個Select a device to connect不能點選,過一段時間後就顯示can’t connect to device,我是用hc05,然後前面步驟全都一樣
    Step1:切換至主動模式。
    Step2:確認藍牙模式。
    Step3 到 Step10 都一樣,但是到下一步就不行了

  2. 羅子軒 says:

    可以請問一下,最後一步AT+LINK=
    但監控視窗卻跑出FAIL是為甚麼嗎,我的hc 05一直無法與手機連線。

    • 許 鈺莨 says:

      你好:
      如果HC05一直無法與手機連線,請試試從Step3、Step4、Step5看看,重新啟動藍牙連接模式。

  3. wasabi says:

    請問一下,我輸入”AT+NAME?” 結果Serial Monitor 只跳出空白,並無法顯示我的BT名稱。
    但是我其他指令都可以用。

    • 許 鈺莨 says:

      wasabi你好:
      你可以下”AT+NAME=【你自己設定的名稱】”,重新改名,再下”AT+NAME?”來查查是否有改名成功

  4. LEE says:

    請問一下 我在打入at+init的時候他會顯示 error(17)
    打at+inq則會顯示error(1f) 請問有解決方法嗎?

  5. Feng says:

    請問藍芽與手機已連線
    但從手機發訊號ㄧ直無法在序列監控視窗中看到結果
    也就是說一直無法通訊成功
    可能是什麼原因
    謝謝

    • 鈺莨 says:

      你好,Feng:
      有幾個問題需要釐清
      1.因為你說”藍牙與手機已連線”代表之前應該有設定過,藍牙一接上電源就可以和手機連線了,所以手機藍牙連線應該沒問題。
      2.而”無法在序列監控視窗中看到結果”,請問你是用HC-05還是HC-06?設定上有差異,例如:鮑率設定、藍牙TX和RX與arduino的TXRX接線問題、或是杜邦線可能有斷線問題、亦或者是在用序列監控視窗時未調成NL&CR等….

  6. 邱凱雋 says:

    不好意思,我按照上述做法做完,手機也成功顯示已連線 HC-05 ,但是使用BLUETOOTH TERMINAL時,卻顯示 NO DEVICE FOUND。我已經是過關手機或 reset arduino,但是都沒用。
    p.s. 我是用IPHONE。

  7. 吳先生 says:

    版主您好,我是初學者
    想跟您請教,我依照您的步驟接線後,打開序列阜監控視窗輸入指令,都沒有得到任何回應?
    有需要先撰寫程式於UNO版上嗎?
    再麻煩您回覆問題,感謝你的指教

    • 鈺莨 says:

      吳先生你好:
      不需要事先寫程式碼在arduino裡,首先
      1.確認藍牙是HC-05 還是 HC-06(需問購買商家)
      2.是否藍牙的TX接arduino的TX,藍牙的RX接arduino的RX
      3.HC-05和HC-06的序列阜監控視窗Baudrate是不同的。HC-05的Baudrate為38400;HC-06的Baudrate需要記得前一個Baudrate才能做設定,不然需要一個個找。

  8. 文生 says:

    版主您好,我是初學者
    想跟您請教,我前後試了两款Hc-5,我依照您的步驟接線後,打開序列阜監控視窗輸入指令,但搜索不了多款手機(蓝芽4.0和4.2)是否手機問題?

    也改用jdy-18 蓝牙4.2模块,
    不知AT設定和連接是不同, 在序列窗無顯示.

    再麻煩您回覆問題,感謝你的指教

    • 鈺莨 says:

      你好,文生:
      HC-05為傳統藍牙,4.0和4.2為低功耗藍牙,是不同協定的設定,目前我還沒試過,可能請你再多試試。

  9. 楊生 says:

    你好,我是初學者,我在輸入AT+RESET後HC-05就一直閃,沒辦法輸入後面的指令(沒回應),請問是什麼原因呢?

  10. 許先生 says:

    版主您好,請問為什麼是TX接arduino的TX,藍牙的RX接arduino的RX?
    不是應該傳送接接收,接收接傳送嗎?

    • 鈺莨 says:

      你好,許先生:
      我是透過Arduino的重置模式來設定藍牙模組的。其中有一個步驟是Arduino的RESET腳位和GND腳位接在一起才能使Arduino設重置。
      但還有另一種做法,就像許先生說的藍牙TX接arduino Rx、藍牙RX接arduino Tx,不過這是事先透過程式上傳到Arduino所做的。

      • 冠仁 says:

        版本您好,請問Auduino的RESET腳位和GND腳位接在一起這一步驟,是從頭到尾在用HC-05抓手機時都一直接著嗎?

        • 鈺莨 says:

          冠仁你好:
          這個步驟是單純的透過Auduino去設定藍牙而已,和手機無關,設定好後就可以拔除。

  11. 白先生 says:

    您好,我是用藍牙HC-06與Arduino UNO 板連接,但是不知道為什麼輸入任何指令都沒反應。還有HC-06的燈一直在閃是正常的嗎?

  12. 謝其瑋 says:

    你好 我設定完HC05之後線全部拔掉 序列阜出現反向的問號 這算是設定好嗎
    如果AT設定好後 要怎麼離開AT模式

    • 鈺莨 says:

      謝其瑋你好:
      基本上Arduino和藍牙接線設定,例如我要設定藍牙名字為CAVEDU時,則
      1.下指令”AT+NAME=CAVEDU”,監控視窗會顯示”OK”
      2.如果還不放心的話,則可以下指令”AT+NAME?”,則監控視窗會顯示”CAVEDU”
      這個步驟就是設定好了,以此類推

      至於拔掉之後會出現問號,這應該是亂碼

  13. says:

    你好,上述步驟做了後,當要連藍芽時打完密碼後就跑出FAIL 然後跑出+INQ:D40B:1A:1CF221,5A020C,7FFF
    之後又重新試了STEP4.5還是一樣
    試了好幾次都無法成功連上
    只有第一次成功接下來就都失敗了請問要怎麼解決~~~感恩~~~
    (PS.我是用mega2560)

  14. says:

    老師您好,在HC05中連接手機的那一部份,輸入AT+INIT系統跑出來的是ERROR(0),這要怎麼解決,謝謝老師

  15. hong says:

    老師您好,想請問一下,若輸入指令「AT+INIT」,收到的回應是Error(0),這個情況要怎麼解?如果直接跳過這個步驟,打開手機藍芽還是可以搜到,但卻連接不上,是因為沒有這個初始化SPP步驟嗎?
    (P.S. 使用的藍芽模組為HC-05,手機使用Android版本9)

    • 鈺莨 says:

      hong你好:
      如果輸入「AT+INIT」,回應不是OK以外的訊息,就要從Step4:重啟藍牙開始做,必要時需預設出廠模式: 「AT+ORGL」。

  16. alan says:

    老師您好,在學習您所寫的一連串教程後,自行做出一台藍芽遙控小車,但在同時按兩個按鍵幾秒後就會斷線需要重新連線,非常不穩定,一直找不到問題所在,故來請教您,
    謝謝

  17. Ting says:

    老師不好意思想請教您,我在Step5 : 初始化SPP 函式庫,一直出現ERROR : [0],想請教您要怎麼解決?目前手機是使用iphone13

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *