.
此篇主要為實作 兩個藍(lán)芽模組間的通訊
首先需要有兩個藍(lán)芽模組,其中一個一定要為 HC05 (MASTER)
被動端(passive) 則可為 HC05 或 HC06 (Slave)
HC05一買到預(yù)設(shè)為 Slave,因此需要進入 AT Mode來更改模式
HC05在硬體上有兩種型態(tài),進入 AT MODE 的方式有些微差異
一種為藍(lán)芽模組正面無按鍵;但背面的腳位有 KEY 或 WAKEUP
此種類型的HC05進入AT MODE的方式為
將 KEY 或 WAKEUP 腳位接到高電位 5 V 或 3.3 V
接上之後再將藍(lán)芽模組送電,如果此時藍(lán)芽模組LED的閃爍頻率為慢速閃爍
大約每兩秒閃一次,則表示成功進入 AT MODE
如果HC05為帶按鍵的
此種HC05進入AT MODE 更簡單
在藍(lán)芽上電前先按住該按鈕,然後再按住按鈕的情況下送電
送電後放開該按鈕,則進入AT MODE, LED燈會為慢閃模式
HC06通電後未被連線時的MODE即為AT MODE 不需做任何外部觸發(fā)
HC06 只能為SLAVE 因此如果SLAVE端是 HC06,不用做任何設(shè)定
在進入 AT MODE 後開始對 HC05進行設(shè)定,目的是要將該模組設(shè)為MASTER
主動連線至配對SLAVE端的藍(lán)芽模組
接著將下列程式碼上傳至ARDUINO端
(NOTICE: 藍(lán)芽baud一定要為38400才可以將指定傳輸至HC05
- #include <SoftwareSerial.h>
- SoftwareSerial BTSerial(10, 11); // RX | TX
- int i = 0;
- void setup()
- {
- Serial.begin(9600);
- Serial.println("Enter AT commands:");
- BTSerial.begin(38400); // HC-05 default speed in AT command more
- }
- void loop()
- {
- // Keep reading from HC-05 and send to Arduino Serial Monitor
- if (BTSerial.available())
- {
- Serial.write(BTSerial.read());
- }
- // Keep reading from Arduino Serial Monitor and send to HC-05
- if (Serial.available())
- {
- BTSerial.write(Serial.read());
- }
- }
之後開始以序列傳輸測試是否以正確進入AT MODE 並下修改指令
首先開啟序列視窗
將下方顯示改成如下圖,因為HC05的回應(yīng)都會加上換行字元
如果不改則會顯示不出回應(yīng)內(nèi)容
接著輸入指令 AT 如果 HC05回應(yīng) OK 則表示已經(jīng)進入 AT MODE
然後依序輸入下列AT COMMAND
需要指定MAC做連線
AT+CMODE=0
設(shè)定模組為MASTER
AT+ROLE=1
綁定SLAVE MAC (以逗號做區(qū)隔)
AT+BIND=2011,5,112236
以上指令送出後 HC05回應(yīng) OK 即設(shè)定成功
完成上述步驟即將MASTER設(shè)定完畢
不過此時一定會有一個疑問 SLAVE的 MAC如何知道
其實很簡單,如果是 HC05 一樣進入 AT MODE
然後輸入指令 AT+ADDR? ,則 HC05會回應(yīng) MAC
如果SLAVE是 HC06,則要比較麻煩一點
因為HC06的AT COMMAND並沒有可以直接取得 MAC的
所以要藉由其他外部裝置,手機或筆電都可以
將手機/筆電 開啟藍(lán)芽後連線至HC06,然後 MAC就會出現(xiàn)在手機端
以下為取得的格式範(fàn)例
可能為 20:15:86:01:24
這邊呈現(xiàn)出是以冒號區(qū)隔,但是在綁定時MAC的區(qū)隔為逗號
此部分要特別注意
SLAVE端將下列程式上傳至ARDUINO進行傳輸測試
- #include <SoftwareSerial.h>
- SoftwareSerial BTSerial(10, 11); // RX | TX
- int i = 0;
- void setup()
- {
- Serial.begin(9600);
- BTSerial.begin(9600); // HC-05 default speed in AT command more
- }
- void loop()
- {
-
- BTSerial.println(i++);
- delay(1000);
- }
MASTER端將下列程式碼上傳後測試接收
- #include <SoftwareSerial.h>
- SoftwareSerial BTSerial(10, 11); // RX | TX
- int i = 0;
- void setup()
- {
- Serial.begin(9600);
- BTSerial.begin(9600); // HC-05 default speed in AT command more
- }
- void loop()
- {
- if (BTSerial.available()) {
-
- char rev = BTSerial.read();
- Serial.print( rev );
- }
- }
測試結(jié)果
MASTER端每秒收到從 SLAVE端傳來的資料