Arduino專題製作 part 2

2020-06-18
Project

!!這裡只講HC05,如果是HC06請按Backspace離開。

這是我遇過目前最難的部分了。首先使用主從連線的話,需要進入”AT模式”,而新手明顯的不懂到底怎麼進入,尤其是HC05有兩種版本,只有KEY腳位的與只有EN腳位的。
兩種進入AT模式的方法又不一樣,容易把新手搞瘋。

而在處理完AT設定後,Serial視窗上的傳送結尾必須調成NL&CR,還要設定傳送Baud Rate為38400(HC05預設值),有很多細節需要注意,完全一個新手殺手。


首先 配線: RX -> 11, TX -> 10, EN不須接(如果有KEY位,且,如果需要進入AT mode,請在通電前接上3.3V腳位)

接著進入AT mode,如果是只有EN的,在通電前按住HC05上面的小按鈕(通電後可以放開),他的作用可以讓HC05的34腳位通電進入AT mode;而如果是只有KEY,請在通電前接上3.3V腳位。

打開Serial視窗,設定好 Baud Rate 38400 跟結尾符號 NL&CR
“正常來說”,沒錯,”正常來說”,當你打出”AT”後,應該會出現”ERROR:(0)”,再打一次,”理論上”,HC05會回你”OK”。(如果都無法,應該檢查一下配線、型號、線路的穩定)。

如果你是想用手機連藍牙的話,不需要進入AT mode(可能需要載特別的bluetooth app),但是如果要兩隻HC05互連,需要設定主從關係(主為輸出訊息,從為接收):

在從的那端,輸入”AT+ADDR?”得到從端的MAC值(不知道這可不可以稱作MAC值?),請記好。
接著在主的那端,輸入”AT+ROLE=1”,接著”AT+BIND=(剛剛從端的MAC值)”。

接下來”應該”可以讓他們自動互連了,如何判斷呢,在初始狀態下,兩塊模組應該會連閃紅燈,接著一陣死寂,然後兩個紅燈同頻率閃著。

code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <Wire.h>
#include <SoftwareSerial.h>

SoftwareSerial BTS(10, 11); //rx, tx,配線跟程式設定上是相反的,至於為什麼: "嘴巴講的話,要用耳朵聽"

void setup()
{
pinMode(9, OUTPUT); //如果有KEY位的話。
digitalWrite(9, HIGH);

Serial.begin(9600);
Serial.println("Enter AT commands:");

BTS.begin(38400); //設定Baud rate
}

void loop()
{
if(BTS.available())
Serial.write(BTS.read());

if(Serial.available())
BTS.write(Serial.read());
}

在測試時有些有趣的事情,兩塊模組的MAC值是相同的,原本以為會有問題,後來發現一點問題都沒有。
還有Baud rate的問題,弄了很久才搞懂,但是HC05 AT mode設定的Baud Rate到底是設定對於電腦的還是藍牙的,我仍不懂。

就這樣吧(。ŏ_ŏ) 下次把藍牙移植到Nano板上,再加個加速度模組把資料回傳。

這種模組化的測試方式很有用,單個模組看不出優點,但在多個模組在合併時,就會展現出極大的優勢。
這是物件導向程式設計裡的一種思維方式,算是啟發我的重要思想(?)。