2022-02-20

Arduino 配合 HC05藍牙模組 無線控制

最近打算製作一些無線的工具,方便遙距控制一些裝置,通報訊息

HC05模組

外觀
見下文
HC05模組 的正面

見下文
CSR 的 BC417藍牙晶片

見下文
Spansion 的 記憶體晶片

見下文
HC05模組 的背面
部分 HC05模組 會提供連接到 BC417藍牙晶片 刷新用的SPI引腳,可以變更 BC417藍牙晶片 的功能

引腳
編號 引腳 方向 功能
1 EN 輸入 低電壓或不接電 為 資料模式;高電壓 為 指令模式
2 VCC 電源,接受 3.6V 至 6V
3 GND 接地
4 TXD 輸出 UART 發送訊號引腳
5 RXD 輸入 UART 接收訊號引腳
6 STATE 輸出 回應HC05狀態:
每100毫秒反覆輸出高低電壓時為資料模式
每2秒反覆輸出高低電壓時為指令模式

資料模式

藍牙裝置的 資料模式 是使用 UART通訊協定 傳送及接收訊號
線路原型
見下文
HC05模組 雖然有6支引腳,但如果執行資料模式,只需要使用4支引腳便可以與 HC05模組 通訊
VCC 及 GND 接通電路,及接駁 UART通訊協定 的 TXD 及 RXD 到微控制器

實際線路
見下文
閣下可能會發現在下將 Arduino Nano 連接 HC05模組,不是使用原生的 TX 及 RX 引腳
原因是 Arduino Nano 的 TX 及 RX 引腳只能在 從機狀態 才能使用
當 Arduino Nano 透過 USB 連接到 電腦 時,屬於 主機狀態,因此不能使用 TX 及 RX 引腳連接 從機 傳送及接收訊號

見下文
HC05模組啟動時,便會發射藍牙訊號,讓藍牙主機搜尋及連接
LED指示燈 會以 100毫秒 速度閃動

見下文
在下連接 七段顯示器 作簡單測試

使用 Android 測試
Android 裝置通常都內建藍牙功能,連接方法亦比較簡單,因此使用 Android 測試

見下文
HC05模組 使用 藍牙2.0 ,只要 Android 能夠搜尋到藍牙訊號,即可連接
在下使用 Serial Bluetooth Terminal ,讓 Android 向 HC05模組 傳送 序列訊號
但 iOS 只可以與具備 藍牙低功耗 (Bluetooth Low Energy (BLE)) 連接
然而 HC05模組沒有 BLE功能,因此暫時無法使用 iOS 測試

見下文
開啟 Android 的 藍牙工具,搜尋 HC模組 的名稱

見下文
見下文
選擇 HC-05 後,HC05模組 需要輸入密碼才能配對
預設的 HC05模組 使用 00001234 為配對密碼

見下文
開啟 Serial Bluetooth Terminal 到 選單Devices

見下文
選擇 HC-05

見下文
HC-05 連接後,會顯示綠色標示

見下文
回到 Serial Bluetooth Terminal 的 Terminal 會顯示
Connecting to HC-05 ...
Connected

見下文
Serial Bluetooth Terminal 可以自訂訊號按鈕,方便操作

見下文
透過 Android 向 HC05模組 傳送訊號,控制 七段顯示器 顯示十六進制數值

操作前,還要將 Sketch 上載到 Arduino Nano 才有效果
HC05模組 的資料模式預設以 9600鮑率運作,因此都要以 9600鮑率的速度 傳送及接收訊號
另外由於 Arduino Nano 原本的 UART引腳 只能作為 從機使用
因此使用 Arduino 預設的 SoftwareSerial.h 函式庫作為主機 傳送及接收 UART訊號
#include <SoftwareSerial.h>

SoftwareSerial myBlue = SoftwareSerial(3, 2);

const byte VCC_PIN = 12;
const byte GND_PINS[] = {8, 7, 6, 5, 4, 9, 10, 11};
const byte SEGMENTS[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x80};

void setup() {
	myBlue.begin(9600);
	pinMode(VCC_PIN, OUTPUT);
	digitalWrite(VCC_PIN, HIGH);
	for (byte i = 0; i < sizeof(GND_PINS) / sizeof(byte); i++) {
		pinMode(GND_PINS[i], OUTPUT);
		digitalWrite(GND_PINS[i], HIGH);
	}
}

void loop() {
	while (myBlue.available()) {
		byte b = myBlue.read();
		if ('0' <= b && b <= '9') {
			for (byte i = 0; i < sizeof(GND_PINS) / sizeof(byte); i++) {
				digitalWrite(GND_PINS[i], ((SEGMENTS[b - '0'] ^ 0xFF) & (1 << i)) > 0);
			}
		} else if ('A' <= b && b <= 'F') {
			for (byte i = 0; i < sizeof(GND_PINS) / sizeof(byte); i++) {
				digitalWrite(GND_PINS[i], ((SEGMENTS[b - 'A' + 10] ^ 0xFF) & (1 << i)) > 0);
			}
		} else if ('a' <= b && b <= 'f') {
			for (byte i = 0; i < sizeof(GND_PINS) / sizeof(byte); i++) {
				digitalWrite(GND_PINS[i], ((SEGMENTS[b - 'a' + 10] ^ 0xFF) & (1 << i)) > 0);
			}
		} else if (b == ' ') {
			for (byte i = 0; i < sizeof(GND_PINS) / sizeof(byte); i++) {
				digitalWrite(GND_PINS[i], ((SEGMENTS[16] ^ 0xFF) & (1 << i)) > 0);
			}
		}
	}
}
使用 Minicom 測試
Minicom 是一個數據機通訊軟件,可以向序列裝置傳送訊號
由於普遍 Linux發行版 沒有預裝 Minicom ,需要在 Terminal 輸入
sudo apt install minicom

在此下載及安裝 Minicom

見下文
由於 藍牙裝置 有 類別 區分,但 HC05模組 屬於 未分類 (Uncategory)
因此,即使已經與 HC05模組 配對,但控制版面會顯示開關按鈕無法按動

見下文
雖然 HC05模組 屬於未分類,但仍然可以使用 射頻通訊 (Radio frequency communication (RFCOMM)) 的方法傳送序列訊
由於系統預設未必會包含 射頻通訊裝置,因此需要使用 rfcomm指令 建立 射頻通訊裝置 的 裝置檔案
在 Terminal 輸入
sudo rfcomm bind hci0 <Bluetooth-MAC-Address>

<Bluetooth-MAC-Address> 為 藍牙裝置的地址
由於需要在 /dev 目錄建立 RFCOMM裝置檔案,因此必須使用 sudo 或 root帳戶 才能執行操作

見下文
輸入
minicom -con -b 9600 -D /dev/rfcomm0

-con 使用分類顏色顯示資料,可以不使用
-b 9600 設定 9600鮑率 連接藍牙裝置,預設 115200
-D /dev/rfcomm0 設定 射頻裝置 的位置 為 /dev/rfcomm0 ,預設 /dev/modem

見下文
連接後,控制版面會發現 HC05模組 原本在控制版面無法按動開關 顯示已連接
但仍然無法按動開關

見下文
見下文
雖然 Minicom 還有更新,但 Minicom 仍然使用相對比較舊的操作方法,而且操作不太直觀
執行 Minicom 後,會發現所有按鍵都沒有反應,需要先按 Ctrl+A 後再按 Z 開啟說明選單才了解操作方法
執行基本訊號傳送,需要先啟用 local Echo (Ctrl+A 後按 E) ,才能夠在 Minicom 中直接傳送訊號

見下文
在電腦經 藍牙序列通訊 傳送訊號

測試時會發現,HC05模組 接收的速度時快時慢
主要因為 HC05模組 的 工作週期 相比現今的藍牙裝置太慢,顯得有明顯的延遲
不過作為學習或測試用途,並沒有太大問題

指令模式

指令模式 可以向藍牙模組 傳送設定指令,更改藍牙模組部分設定值
閣下可能會發現 Minicom 的示範中, HC05模組 的名稱是 MyBlue 而不是 HC-05
是因為使用 AT指令 來設定藍牙裝置的資料
由於 HC05 並不支援所有 AT指令,亦並非所有指令都需要使用
因此在下只列出部分常用的指令,閣下有興趣可以自行尋找 AT指令 的清單

AT指令
指令 回應 功能
AT
OK
測試指令
AT+RESET
OK
重新啟動
AT+ORGL
OK
OK
OK
回復原始設定
AT+VERSION?
+VERSION:<data>
OK
顯示版本
<data> 為版本
  • 格式為 VER-YYYYMMDD
AT+ADDR?
+ADDR:<data>
OK
顯示地址
<data> 為 Mac地址
  • 但接收到 AT 的格式為 NNNN:NN:NNNNNN
AT+NAME?
+NAME:<data>
OK
顯示名稱
<data> 為名稱
AT+NAME=<data>
OK
設定名稱
<data> 為名稱,最長22個位元組字元
  • Unicode字元會以3位元組計算
AT+PSWD?
+PSWD:<data>
OK
顯示密碼
<data> 為密碼
AT+PSWD=<data>
OK
設定密碼
<data> 為密碼,必須4個位元組字元
  • Unicode字元會以3位元組計算
AT+CMODE?
+CMODE: <data>
OK
顯示連接模式
<data> 為連接模式的類型
AT+CMODE=<data>
OK
設定連接模式
<data> 為連接模式的類型
  • 0 為 指定模式,只能讓指定地址連接
  • 1 為 任意模式,可以讓任意裝置連接
  • 2 為 回環模式,只傳回訊號
AT+ROLE?
+ROLE:<data>
OK
顯示角色模式
<data> 為角色模式的類型
AT+ROLE=<data>
OK 
設定角色模式
<data> 為角色模式的類型
  • 0 為 被動模式,裝置接收訊號
  • 1 為 主動模式,裝置傳送訊號
  • 2 為 回環模式,只傳回訊號
AT+UART?
+UART:<data1>,<data2>,<data3>
OK
顯示資料模式的UART
<data1> 為 鮑率
<data2> 為 停止位元
<data3> 為 校驗位元
AT+UART=<data1>,<data2>,<data3>
OK 
設定資料模式的UART
<data1> 為 鮑率
  • 4800
  • 9600
  • 19200
  • 38400
  • 57600
  • 115200
  • 230400
  • 460800
  • 921600
  • 1382400
<data2> 為 停止位元
  • 0 為 1位元
  • 1 為 2位元
<data3> 為 校驗位元
  • 0 為 不校驗
  • 1 為 單數校驗
  • 2 為 雙數校驗
AT+STATE?
+STATE:<data>
OK
顯示狀態
<data> 為顯示狀態
  • INITIALIZED 為 初始化狀態
  • READY 為 準備連接狀態
  • PAIRABLE 為 可配對狀態
  • PAIRED 為 已配對狀態
  • INQUIRING 為 查詢狀態
  • CONNECTING 為 正在連接狀態
  • CONNECTED 為 已連接狀態
  • DISCONNECTED 為 中斷連接狀態
  • NUKNOW 為 未知狀態
當中
  • AT+NAME
  • AT+PSWD
  • AT+ROLE
  • AT+CMODE

會比較常用
接駁線路
見下文
見下文
基本上與資料模式相同,只是將 EN引腳 連接到高電壓

使用序列監視器傳送 AT指令
現今的電腦已經絕少具備 D-Sub 9 介面
Arduino IDE 的 序列監視器 (Serial Monitor) 可以透過 Arduino 顯示裝置的序列訊號,還能夠將序列訊號傳送到裝置
不需要特殊裝置,而且 Arduino IDE 是跨平台軟件,可以非常簡單地在任何平台監視序列訊號

見下文
進入指令模式時,LED 會每 2秒 閃動

將 Sketch 上載到 Arduino Nano HC05模組 的指令模式以 38400鮑率運作
#include <SoftwareSerial.h>

const byte RX_PIN = 3;
const byte TX_PIN = 2;

SoftwareSerial myBlue = SoftwareSerial(RX_PIN, TX_PIN);

void setup() {
	myBlue.begin(38400);
	Serial.begin(9600);
}

void loop() {
	while (Serial.available()) {
		char c = Serial.read();
		Serial.print(c);
		myBlue.write(c);
	}
	while (myBlue.available()) {
		char c = myBlue.read();
		Serial.write(c);
	}
}

見下文
上載 Sketch 後,開啟 Arduino IDE 的 序列監視器 (Serial Monitor)

見下文
由於 AT指令 是以 回車 (Carriage Return (CR))換行 (Line Feed (LF))
如果需要透過 序列監視器 傳送訊號,先將 結束字符 設定為 Both NL & CR

見下文
序列監視器 可以在文字爛位輸入 AT指令 後按 ENTER鍵 或按 Send按鈕 向 HC05模組 傳送訊號

見下文
在 序列監視器 輸入
AT 

測試
如果 HC05模組 正常運作,會傳回
OK 

給微控調器

見下文
輸入
AT+NAME?

傳回
+NAME:<藍牙名稱>
OK

表示藍牙名稱
及輸入
AT+PSWD?

傳回
+PSWD:<配對密碼>
OK

表示配對密碼

見下文
輸入
AT+NAME=<藍牙名稱>

傳回
OK 

表示藍牙名稱設定成功
及輸入
AT+PSWD=<配對密碼>

傳回
OK 

表示配對密碼設定成功

見下文
搜尋藍牙裝置 時會發現 更新藍牙名稱 後的 HC05模組
但主機未必會即時顯示新名稱,有時需要連接後才會更新

見下文
見下文
輸入 更新後的配對密碼
(雖然配對密碼已經更新,但提示內容仍然顯示 0000 及 1234)

補充資料

復原後的設定
見下文
閣下可能會發現網上有些教學會使用 按鈕 啟動 HC05模組 的指令模式,但在下卻沒有提及 HC05模組 上的按鈕
原來 HC05模組 的 指令模式,還區分 簡化指令模式 (Mini AT Mode)完整指令模式 (Full AT Mode)
簡化指令模式 只能執行很少 AT指令 ,但在下無法啟動 HC05模組 的 簡化指令模式
因此沒有考慮使用 簡化指令模式

HC05模組 的指令模式是以 38400鮑率運作,而示範指 序列監視器 要設定為 38400鮑率
但 序列監視器 設定為 38400鮑率,與 SoftwareSerial.h 的 38400鮑率 沒有關係
因此在下並沒有 序列監視器設定為 38400鮑率

另外,在下測試 HC05模組 回復原始設定 指令,發現回復後無法搜尋 HC05模組
網上資料指要將 AT+CLASS 設定為 1 ,但在下的 HC05模組 無法修改 CLASS ,仍然顯示 0x1F00
可能是在下的 HC05模組 與 網上說明的 HC05模組 不完全相同導致
在下查詢 藍牙的 裝置類別 (Class of Device (CoD))

主類別位元 次類別位元 十六進制 主類別 次類別
12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0x0000 雜項 沒有
0 0 0 0 1 0 0 0 0 0 0 0 0 0x0100 電腦 未分類電腦
0 0 0 0 1 0 0 0 0 0 1 0 0 0x0104 電腦 桌上電腦
0 0 0 0 1 0 0 0 0 1 0 0 0 0x0108 電腦 伺服器電腦
0 0 0 0 1 0 0 0 0 1 1 0 0 0x010C 電腦 手提電腦
0 0 0 0 1 0 0 0 1 0 0 0 0 0x0110 電腦 迷你電腦
0 0 0 0 1 0 0 0 1 0 1 0 0 0x0114 電腦 掌上電腦
0 0 0 0 1 0 0 0 1 1 0 0 0 0x0118 電腦 穿戴電腦
0 0 0 0 1 0 0 0 1 1 1 0 0 0x011C 電腦 平板電腦
0 0 0 1 0 0 0 0 0 0 0 0 0 0x0200 電話 未分類電話
0 0 0 1 0 0 0 0 0 0 1 0 0 0x0204 電話 蜂巢式電話
0 0 0 1 0 0 0 0 0 1 0 0 0 0x0208 電話 無線電話
0 0 0 1 0 0 0 0 0 1 1 0 0 0x020C 電話 智能電話
0 0 0 1 0 0 0 0 1 0 0 0 0 0x0210 電話 數據機
0 0 0 1 0 0 0 0 1 0 1 0 0 0x0214 電話 綜合服務數碼網絡
0 0 0 1 1 0 0 0 0 0 0 0 0 0x0300 網絡裝置 完全使用
0 0 0 1 1 0 0 1 0 0 0 0 0 0x0320 網絡裝置 1%~17%使用
0 0 0 1 1 0 1 0 0 0 0 0 0 0x0340 網絡裝置 17%~33%使用
0 0 0 1 1 0 1 1 0 0 0 0 0 0x0360 網絡裝置 33%~50%使用
0 0 0 1 1 1 0 0 0 0 0 0 0 0x0380 網絡裝置 50%~67%使用
0 0 0 1 1 1 0 1 0 0 0 0 0 0x03A0 網絡裝置 67%~83%使用
0 0 0 1 1 1 1 0 0 0 0 0 0 0x03C0 網絡裝置 83%~99%使用
0 0 0 1 1 1 1 1 0 0 0 0 0 0x03E0 網絡裝置 完全不使用
0 0 1 0 0 0 0 0 0 0 0 0 0 0x0400 影音裝置 未分類影音裝置
0 0 1 0 0 0 0 0 0 0 1 0 0 0x0404 影音裝置 穿戴式耳筒
0 0 1 0 0 0 0 0 0 1 0 0 0 0x0408 影音裝置 免手持式裝置
0 0 1 0 0 0 0 0 0 1 1 0 0 0x040C 影音裝置 <保留>
0 0 1 0 0 0 0 0 1 0 0 0 0 0x0410 影音裝置 麥克風
0 0 1 0 0 0 0 0 1 0 1 0 0 0x0414 影音裝置 擴音機
0 0 1 0 0 0 0 0 1 1 0 0 0 0x0418 影音裝置 耳筒
0 0 1 0 0 0 0 0 1 1 1 0 0 0x041C 影音裝置 攜帶式音響
0 0 1 0 0 0 0 1 0 0 0 0 0 0x0420 影音裝置 汽車音響
0 0 1 0 0 0 0 1 0 0 1 0 0 0x0424 影音裝置 數碼視訊轉換器
0 0 1 0 0 0 0 1 0 1 0 0 0 0x0428 影音裝置 高品質音響
0 0 1 0 0 0 0 1 0 1 1 0 0 0x042C 影音裝置 錄影機
0 0 1 0 0 0 0 1 1 0 0 0 0 0x0430 影音裝置 影像鏡頭
0 0 1 0 0 0 0 1 1 0 1 0 0 0x0434 影音裝置 攝影機
0 0 1 0 0 0 0 1 1 1 0 0 0 0x0438 影音裝置 影像監視器
0 0 1 0 0 0 0 1 1 1 1 0 0 0x043C 影音裝置 影像顯示器及擴音機
0 0 1 0 0 0 1 0 0 0 0 0 0 0x0440 影音裝置 影像會議
0 0 1 0 0 0 1 0 0 0 1 0 0 0x0444 影音裝置 <保留>
0 0 1 0 0 0 1 0 0 1 0 0 0 0x0448 影音裝置 遊戲及玩具
0 0 1 0 1 0 0 0 0 0 0 0 0 0x0500 周邊裝置 未分類周邊裝置
0 0 1 0 1 0 0 0 0 0 1 0 0 0x0504 周邊裝置 遊戲控制桿
0 0 1 0 1 0 0 0 0 1 0 0 0 0x0508 周邊裝置 遊戲控制器
0 0 1 0 1 0 0 0 0 1 1 0 0 0x050C 周邊裝置 遙控器
0 0 1 0 1 0 0 0 1 0 0 0 0 0x0510 周邊裝置 感應裝置
0 0 1 0 1 0 0 0 1 0 1 0 0 0x0514 周邊裝置 繪圖板
0 0 1 0 1 0 0 0 1 1 0 0 0 0x0518 周邊裝置 讀卡器
0 0 1 0 1 0 0 0 1 1 1 0 0 0x051C 周邊裝置 數碼筆
0 0 1 0 1 0 0 1 0 0 0 0 0 0x0520 周邊裝置 手持式掃描器
0 0 1 0 1 0 0 1 0 0 1 0 0 0x0524 周邊裝置 手勢輸入裝置
0 0 1 0 1 0 1 0 0 0 0 0 0 0x0540 周邊裝置 鍵盤
0 0 1 0 1 1 0 0 0 0 0 0 0 0x0580 周邊裝置 浮點裝置
0 0 1 0 1 1 1 0 0 0 0 0 0 0x05C0 周邊裝置 複合鍵盤及浮點裝置
0 0 1 1 0 0 0 0 1 0 0 0 0 0x0610 成像裝置 顯示器
0 0 1 1 0 0 0 1 0 0 0 0 0 0x0620 成像裝置 相機
0 0 1 1 0 0 1 0 0 0 0 0 0 0x0640 成像裝置 掃描器
0 0 1 1 0 1 0 0 0 0 0 0 0 0x0680 成像裝置 印表機
0 0 1 1 1 0 0 0 0 0 1 0 0 0x0704 穿戴裝置 手錶
0 0 1 1 1 0 0 0 0 1 0 0 0 0x0708 穿戴裝置 傳呼機
0 0 1 1 1 0 0 0 0 1 1 0 0 0x070C 穿戴裝置 外套
0 0 1 1 1 0 0 0 1 0 0 0 0 0x0710 穿戴裝置 頭盔
0 0 1 1 1 0 0 0 1 0 1 0 0 0x0714 穿戴裝置 眼鏡
0 1 0 0 0 0 0 0 0 0 1 0 0 0x0804 玩具 機械人
0 1 0 0 0 0 0 0 0 1 0 0 0 0x0808 玩具 汽車
0 1 0 0 0 0 0 0 0 1 1 0 0 0x080C 玩具 公仔
0 1 0 0 0 0 0 0 1 0 0 0 0 0x0810 玩具 控制器
0 1 0 0 0 0 0 0 1 0 1 0 0 0x0814 玩具 遊戲
0 1 0 0 1 0 0 0 0 0 0 0 0 0x0900 健康裝置 未定義健康裝置
0 1 0 0 1 0 0 0 0 0 1 0 0 0x0904 健康裝置 血壓監測器
0 1 0 0 1 0 0 0 0 1 0 0 0 0x0908 健康裝置 溫度計
0 1 0 0 1 0 0 0 0 1 1 0 0 0x090C 健康裝置 重量計
0 1 0 0 1 0 0 0 1 0 0 0 0 0x0910 健康裝置 血糖計
0 1 0 0 1 0 0 0 1 0 1 0 0 0x0914 健康裝置 血氧飽和儀
0 1 0 0 1 0 0 0 1 1 0 0 0 0x0918 健康裝置 脈搏監測器
0 1 0 0 1 0 0 0 1 1 1 0 0 0x091C 健康裝置 健康資料顯示器
0 1 0 0 1 0 0 1 0 0 0 0 0 0x0920 健康裝置 計步器
0 1 0 0 1 0 0 1 0 0 1 0 0 0x0924 健康裝置 身體成份分析儀
0 1 0 0 1 0 0 1 0 1 0 0 0 0x0928 健康裝置 峰值呼氣監測器
0 1 0 0 1 0 0 1 0 1 1 0 0 0x092C 健康裝置 藥物監測器
0 1 0 0 1 0 0 1 1 0 0 0 0 0x0930 健康裝置 膝關節置換器
0 1 0 0 1 0 0 1 1 0 1 0 0 0x0934 健康裝置 腳踝置換器
0 1 0 0 1 0 0 1 1 1 0 0 0 0x0938 健康裝置 通用健康管理器
0 1 0 0 1 0 0 1 1 1 1 0 0 0x093C 健康裝置 個人行動裝置
1 1 1 1 1 0 0 0 0 0 0 0 0 0x1F00 未分類 沒有

根據現存的 裝置類別 顯示,暫時不存在 1 的類別
因此在下繼續閱讀 AT指令表 嘗試自行解決問題,最後在下將 AT+CMODE 設定為 1
AT+CMODE=1

才能讓 Android 搜尋到 HC05模組

除了解裝置類別,還有 裝置服務 (Service of Device (SoD))
SoD位元 CoD位元(共13位元) 服務名稱
23 22 21 20 19 18 17 16 15 14 13 第12至0位元
0 0 0 0 0 0 0 0 0 0 1 * 可見度
0 0 0 0 0 0 0 1 0 0 0 * 定位服務
0 0 0 0 0 0 1 0 0 0 0 * 網絡服務
0 0 0 0 0 1 0 0 0 0 0 * 渲染服務
0 0 0 0 1 0 0 0 0 0 0 * 擷取服務
0 0 0 1 0 0 0 0 0 0 0 * 傳輸服務
0 0 1 0 0 0 0 0 0 0 0 * 音訊服務
0 1 0 0 0 0 0 0 0 0 0 * 通話服務
1 0 0 0 0 0 0 0 0 0 0 * 資訊服務

修改名稱問題
見下文
還有,當 HC05模組 回復原始設定 後,藍牙裝置的名稱,並非 HC-05 而是 H-C-2010-06-01OK
但其實最後的 OK 是 HC05模組 傳送正確的訊息,因此實際的預設名稱是 H-C-2010-06-01

見下文
嘗試在電腦連接 HC05模組 ,發現顯示連接藍牙裝置時的名稱出現斷行

見下文
在下被預設名字提示,發現 HC05模組 修改的名稱後的 OK 會在新行顯示,在下估計是因為行尾的 CR 及 LF 導致
因此將 結束字符 更改為 No line ending 後,再傳送 AT+NAME=MyBlue

見下文
發現 AT+NAME=MyBlue 是能夠正確傳送指令

見下文
連接藍牙裝置時的名稱沒有斷行,亦即是設定 藍牙裝置的名稱是不需要使用 CF 及 LF 為結束字元
減去 CF 及 LF ,即是藍牙裝置名稱最長是24個位元組字元

總結

見下文
HC05模組 是一種常見的 藍牙模組,網絡上有很多示範資料,但在下發現很多示範都是搬字過紙
官方的文件都沒有說明清楚修改名藍牙裝置名稱的正確方式
普遍網上的資料都是使用 Android 為示範效果,而在 Android 中,藍牙裝置的名稱不會顯示 CR 及 LF (或轉換成 空格字元 顯示)
大部分資料都是將內容複製、貼上或將只是轉載內容,根本沒有正式地查證及親自研究
包括恢復原始設定後,要使用 AT+CMODE=1 來解決的方法,在下在網上找不到相關資料(亦可能是在下無法正確搜尋關鍵內容)
更加不要期望會提供經由電腦的序列裝置與藍牙裝置通訊的示範

參考資料

沒有留言 :

張貼留言