HC-05與HC-06藍牙模組補充說明(三):使用Arduino設定AT命令

延續上一篇貼文,本文將補充藍牙模組的AT命令模式與設定方法。

藍牙模組的兩種操作模式

  • 自動連線(automatic connection),又稱為透通模式( transparent communication)
  • 命令回應(order-response),又稱為AT模式(AT mode)

平時使用的「自動連線」模式只是把RxD腳傳入的資料,轉成藍牙無線訊號傳遞出去;或者將接收到的無線資料,從TxD腳傳給Arduino,模組本身不會解讀資料,也不接受控制。

操控藍牙模組的指令統稱AT命令(AT-command)。AT命令並非透過藍牙無線傳輸,而是模組的TxD和RxD接腳。藍牙模組只有在AT模式,才能接收AT命令。

HC-05與HC-06藍牙模組進入AT模式的方法

HC-06模組在與其他裝置連線之前,都處於AT模式狀態;換句話說,只要一通電,HC-06模組就進入AT模式。HC-06的AT命令,採用9600bps的速率傳送。

一通電,HC-06模組就進入AT模式。

通電後,在尚未與裝置連線之前,HC-06板子上的LED將不停地閃爍;一旦與其他藍牙裝置連線(如:手機或電腦),LED將維持點亮狀態。

讓HC-05模組進入AT模式,需要在通電之前,先把KEY腳位(藍牙模組本身的34腳)接在高電位(通常指3.3V,但是接5V也行)。如此,一通電,它就進入AT模式。

先把HC-05的KEY腳位(藍牙模組本身的34腳)接在高電位,進入AT模式。

在尚未與裝置連線之前,HC-05板子上的LED將快速閃爍;若進入AT模式,LED將慢速閃爍(兩秒閃爍一次)。HC-05的AT命令,採用38400bps的速率傳送。

筆者購買的HC-05板子上面有一個按鍵,根據廠商提供的電路,這個按鍵接在藍牙模組的34腳:

HC-05模組按鍵的電路

所以先按著板子上的開關,再通電,即可讓此藍牙模組進入AT模式(通電之後,即可放開開關)。

HC-06模組的AT命令

根據廠商提供的AT命令說明書,筆者購買的HC-06藍牙模組支援下列AT指令(這個模組規定,AT命令一定要大寫,有些模組不區分大小寫):

HC-06模組的AT命令

常用的AT指令有兩個:

  • AT+NAME:設定模組的識別名稱。
  • AT+PIN:更改配對密碼。假如你不想讓其他人輕易地連接到你的藍牙裝置,可以透過這個AT命令修改配對密碼。

HC-06模組的預設名稱就是“HC-06”,於多人、多組藍牙一起實驗的場合,在電腦或手機上探索藍牙裝置時,將會發現許多叫做“HC-06”的裝置。

為了方便實驗者連接到自己的藍牙設備,可以事先用AT命令替每一個模組設定不同的名字,例如,bt01, bt02, bt03,…(註:一般最多允許32個英∕數字)。

透過Arduino的序列埠設定藍牙模組的AT命令

除了使用現成的USB轉TTL序列模組來設定AT命令(請參閱「執行AT命令(AT-command)修改藍牙模組的資料傳輸速率」),也能使用Arduino板來操作。

本節將撰寫一個簡易程式,把我們在電腦上敲入的AT命令,轉發給接在Arduino上的藍牙模組。

透過Arduino的序列埠設定藍牙模組的AT命令

同樣地,藍牙模組的回應訊息也會轉發到電腦的序列埠。請編譯底下的程式並上傳到Arduino板:

在HC-05與HC-06藍牙模組上執行AT命令

程式上傳完畢後,開啟Arduino的「序列埠監控視窗」,HC-06模組的AT指令不需要加上行結尾字元,下圖是執行“AT+VERSION”命令,查看韌體版本的結果:

查看HC-06模組的韌體版本

下圖是執行“AT+NAMEsix”,將模組的識別名稱改成“six”的結果:

更改HC-06模組的識別名稱

HC-05模組的AT指令需要加上\n\r行結尾,下圖是執行“AT+VERSION”命令,查看韌體版本的結果:

查看HC-05模組的韌體版本

根據廠商的AT命令參考手冊,此HC-05模組有個查閱識別名稱的命令:“AT+NAME?”,然而,我手上這個模組對此命令沒有反應。但是從Windows 7的藍牙「新增裝置」畫面看得出,此藍牙模組的預設名稱是“HC-05”:

Windows 7的藍牙「新增裝置」畫面

HC-05模組修改識別名稱的AT命令是:”AT+NAME=識別名稱”,設定成功後,它將傳回“OK”,將模組識別名稱改成“five”的操作畫面如下:

更改HC-05模組的識別名稱

再次於Windows 7系統執行藍牙「新增裝置」,可看到模組的名稱已經改變了:

Windows 7的藍牙「新增裝置」畫面

延伸閱讀

151 thoughts on “HC-05與HC-06藍牙模組補充說明(三):使用Arduino設定AT命令

  1. 老師您好..
    我幾乎照著你的程式寫著,利用手機藍芽與電腦talk,都正常,但為何下任何AT COMMAND都無回覆結果出來,指是一樣畫葫蘆顯示我鍵入AT…,我確定我藍芽時模組是HC-05,5,終端機行結尾也設CRLF,就是得不到AT COMMAND回覆結果.我順便秀出程式碼如下:
    //////////////////////////////////////////////////////////////////////////////////////////////////
    //本程式 主要測試 HC-05 設備傳輸與接收
    #include

    // 定義連接藍牙模組的序列埠
    SoftwareSerial BT(9, 10); // 接收腳, 傳送腳
    void setup() {
    Serial.begin(56700); // 與電腦序列埠連線
    Serial.println(“BT is ready!”);

    // 設定藍牙模組的連線速率
    // 如果是HC-05,請改成38400 <=好像寫錯了.應該還是9600
    BT.begin(9600);
    }

    void loop() {
    // 若收到「序列埠監控視窗」的資料,則送到藍牙模組
    char c; String s;
    if (Serial.available()) {
    /*s = Serial.readString(); BT.print(s);*/ //ok
    /**/c = Serial.read();BT.print(c); //ok
    }

    // 若收到藍牙模組的資料,則送到「序列埠監控視窗」
    if (BT.available()) {
    /*s = BT.readString(); Serial.print(s);*/ //ok
    /**/c = BT.read();Serial.print(c); //ok
    }
    }

    1. 抱歉,我找到問題了.原來我HC-05板上的按鈕是有作用的(設計好像太麻煩了).
      在此也說明:
      HC-05進入TA COMMAND.若遇有按鈕,則步驟如下
      1:先拔掉 Arduino 的 USB 線,也拔掉 HC-05 VCC 和 Arduino 5V 相連的這條線。並將HC-05的KEY引腳接至Arduino 板上的3.3或5V電位.
      2:將 Arduino 的 USB 線插入電腦。
      3:先按下HC-05板上的按鈕不放.然行將HC-05 VCC 和 Arduino 5V 相連,
      約1秒左右放掉HC-05板上的按鈕,此時HC-05板上的燈約2秒鐘閃一次.就代表進入TA COMMAND模式了.

  2. 老師你好:
    我想做一個藍牙控制小車,當藍牙連接斷線的時候自動連接,請問大致應該怎麼編程?
    配置是MEGA 2560,HC05模塊

    1. 藍牙小車屬於被控制的「客戶端」,偵測藍牙連線是否中斷以及重新發起連線的工作在手機App上。假設你採用PhoneGap/Cordova編程,Cordova的BluetoothSerial插件的connect(連接)方法最後一個參數是「連接失敗回調函數」,亦即,該函數被調用時,就代表連線中斷了,你可以在該函數裡面做相應的處置。

      thanks,
      jeffrey

  3. 老師你好 ,我照著你的程式範例操作 我的HC-05模組也進入AT模式,打開序列埠監控視窗後 輸入AT+NAME? 卻都沒反應。 為何用手機也無法搜尋到此藍芽模組

    1. 手機端我有去下載 Bluetooth SPP 用此程式搜尋 也都搜尋不到 請老師替我解答 謝謝

    2. 正常情況下,藍牙模組只要一通電,就能讓手機或電腦搜尋到。你方便跟同學或朋友借用另一個模組測試比對嗎?

      thanks,
      jeffrey

  4. 老師你好,看過您撰寫的書後,我們希望能夠改變藍芽模組聯結APP之間的傳輸距離,向老師您請教一下,我們該從手機程式著手還是藍芽模組著手呢?

    1. 藍牙主要是為了「個人區域網路」而被發明出來,原本的設計就是應用在短距離通訊,如果要長距離的話,藍牙5.0的理論通訊距離達300公尺,但多數裝置都不支援藍牙5.0。

      若是為了長距離傳輸,你可以考慮Wi-Fi, 3G或其他無線通訊方案,像NRF24L01(通訊距離可達100公尺)或者LoRa(距離可達數公里)。

      thanks,
      jeffrey

  5. 我買副廠的HC 05的AT指令是這樣:

    AT+NAME? 查看名字
    AT+NAME=** 設名字
    AT+PSWD? 查看密碼
    AT+PSWD=**** 設密碼 ****

    我試了一下才發現的~

  6. 老師你好我有看過你寫的書
    所以我想做一個藍芽模組與手機app
    結合的防盜裝置可是藍芽模組的連線範圍都超過3米
    可是我們只需要1米的連線範圍
    所以請問我們要怎麼把連線範圍超過3米的藍芽模組設定成我們需要的範圍呢?還是說要從手機app程式來設定?

    1. 藍牙電波訊號強弱跟無線電訊號放大電路和天線設計有關,藍牙模組本身應該沒有調整訊號強弱的指令。不過,削弱訊號總比增強訊號容易多了…用銼刀把藍牙板子上的天線磨掉一半看看…磨壞了不要怪我喔~

      thanks,
      jeffrey

  7. 老師您好^^
    我是使用 arduino uno 接hc-05藍芽模組
    uno以usb接到電腦
    照著老師的方式 我能讓我的電腦搜尋到hc05並且能輸入密碼新增此裝置
    新增完後 我用matlab 連接藍芽
    我輸入 instrhwinfo(‘Bluetooth’) 到matlab裡
    結果都是:
    RemoteNames: {8×1 cell}
    RemoteIDs: {8×1 cell}
    BluecoveVersion: ‘BlueCove-2.1.1-SNAPSHOT’
    JarFileVersion: ‘Version 3.9’

    Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

    我也去support package 找有沒有適合的藍芽模組package,安裝了幾個試試看,結果還是一樣,所以我就在想是不是因為電腦和藍芽根本沒有連接
    所以我去查一下 我這組藍芽 可以新增裝置 但電腦跟此藍芽模組都會一直連不上
    請問連不上是正常的嗎? 是可以新增裝置就好 還是還要連上呢?
    不好意思打擾老師了 再麻煩老師了~~ 謝謝您~

    小尹謹致

    1. 拍謝,我沒用過matlab,你可以先用序列通訊軟體測試藍牙模組是否能正常通訊。

      thanks,
      jeffrey

  8. 老師您好,我在嘗試對 HC-05 使用 AT 命令時遇到奇怪的問題。
    首先我是 Arduino Pro Mini (5V) 连接 HC-05,定义 PIN 3 为 RX 连接 HC-05 的 TX,PIN 4 为 TX 连接 HC-05 的 RX,中间使用了一个 3.3V – 5V 的电平转换。我长按 EN 的按钮后给 HC-05 通电,让其进入 AT 模式,此时 LED 两秒一闪。
    然后我用 Arduino IDE 开了个终端能看到 BT is ready! 的输出,输入 AT\r\n 能得到 OK 的返回,但是输入 AT+VERSION?\r\n 却得到了 ERROR:(0) 的返回。我又尝试了其他命令比如 AT+ROLE?\r\nAT+NAME?\r\n 都得到了相同的报错。但是在 PuTTY 中却可以通过输入 AT+VERSION? 而获得 +VERSION:2.0-20100601
    OK
    的结果,但结果会不停重复,只能手动停止。

    代码如下:
    #include

    SoftwareSerial BT(3, 4);
    char val;

    void setup() {
    Serial.begin(115200);
    Serial.println(\”BT is ready!\”);
    BT.begin(38400);
    }

    void loop() {
    if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
    }

    if (BT.available()) {
    val = BT.read();
    Serial.print(val);
    }
    }

    望指教

    1. 如果输入AT,蓝牙模快有回应OK,AT+NAME没有反应的话,你可以向商家索取模块的文档,查阅它的AT命令集。

      thanks,
      jeffrey

  9. 老師您好
    我是使用 arduino MEGA 2560 接hc-06藍芽模組
    有配對可是沒有連線
    手機是HTC A9
    請問要怎麼解決

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *