藍芽控制LED燈
# Smart之藍芽控制LED燈
# 1. 說明
範例採用藍芽通訊協議,通過HC-06藍芽模組控制駁接在Arduino上的LED燈。HC-06採用BC417143晶片,支援藍芽2.1+EDR標準,HC-06的主控端或者從端模式是在出廠前就設定好的不能更改,通常能夠買到的HC-06均為從端模式。
藍芽裝置HC-06通過杜邦線,將VCC介面連線至Arduino 5V針腳,GND介面連線Arduino的GND,藍芽TXD介面連線Arduino 10號針腳,藍芽RXD連線Arduino 11號針腳。LED燈的正極(長腳)連線電阻再連線到Arduino的8號針腳,LED的負極連線到Arduino的GND針腳。
在硬體連線完成後,將Arduino連線電源,需要先將PC端與HC-06的藍芽配對,需使用支援藍芽功能的計算機(如不支援藍芽的計算機也可以使用USB藍芽適配器等外接拓展設備使之支援藍芽功能),打開藍芽選項,可搜索到HC-06
字樣的藍芽設備,預設的配對PIN碼為1234。範例使用的Arduino程式使用到的藍芽設備庫的地址:http://drho.club/2018/06/arduino-bluetooth-mobile-phone01/ (opens new window),下載該庫檔案並將其新增至Arduino程式庫。
通過範例學習,可以掌握藍芽的基本通訊原理,並結合arduino開發板進行LED燈的控制功能。
# 2. 零件連線圖
# 3. 使用零件
序 | 零件名稱 | 數量 |
---|---|---|
1 | Arduino UNO R3 開發板 | 1 |
2 | HC-06藍芽模組或HC-05藍芽模組 | 1 |
3 | USB數據線 | 1 |
4 | 麵包板 | 1 |
5 | 杜邦線 | 6 |
6 | LED燈 | 1 |
7 | 220歐姆電阻 | 1 |
# 4. Arduino流程圖
# 5. Arduino程式
使用Arduino IDE 編譯並上傳以下Arduino程式。
#include <SoftwareSerial.h>
#include <Wire.h>
//http://drho.club/2018/06/arduino-bluetooth-mobile-phone01/
int LED = 8;//定義LED的引腳
SoftwareSerial BT(10,11); //定義藍芽模組 TXD、RXD 對應 arduino 的引腳
void setup() {
BT.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
byte cmd[20];
int strsize;
while(true){
if ((strsize=(BT.available()))>0){
for (int i=0; i<strsize; i++){
cmd[i]=char(BT.read());
}
}
if (cmd[0]=='1') {
digitalWrite(LED, HIGH);//亮燈
} else {
digitalWrite(LED, LOW);//滅燈
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 6. 設計明細
開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]-[打開專案]
選擇範例專案檔案來打開該範例。
①:TImage元件,控制元件名稱為Image1
。
②:TImage元件,控制元件名稱為Image2
。
③:TImage元件,控制元件名稱為Image3
。
④:TBluetooth元件,控制元件名稱為Bluetooth1
。
⑤:TImage元件,控制元件名稱為ImageDevices
。
⑥:TLabel元件,控制元件名稱為Label1
。
⑦:TComboBox元件,控制元件名稱為ComboBoxPaired
。
⑧:TImage元件,控制元件名稱為ImageServices
。
⑨:TComboBox元件,控制元件名稱為ComboBoxServices
。
⑩:TImage元件,控制元件名稱為Image4
。
(11):TImage元件,控制元件名稱為Image5
。
Main窗體屬性設定
Caption
:主窗體標題,設定為藍芽控制LED燈
。ClientHeight
:窗體客戶區高度=411
。ClientWidth
:窗體客戶區寬度=720
。
①Image1屬性設定
Height
:設定圖片高度=411
。Width
:設定圖片寬度=720
。Picture
:設定圖片(背景圖片) 點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
②Image2屬性設定
Height
:設定圖片高度=50
。Width
:設定圖片寬度=50
。Visible
:設定圖片可見=True
。Picture
:設定圖片(滅燈)。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
③Image3屬性設定
Height
:設定圖片高度=50
。Width
:設定圖片寬度=50
。Picture
:設定圖片(亮燈)。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
④Bluetooth1屬性設定
Bluetooth1
無屬性設定。
⑤ImageDevices屬性設定
Height
:設定圖片高度=31
。Width
:設定圖片寬度=31
。Name
:控制元件名稱=ImageDevices
。Stretch
:設定圖片拉伸=True
。Picture
:設定圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
⑥Label1屬性設定
AutoSize
:控制元件大小適應于內容,設定為True
。Caption
:設定標籤內容=藍芽選項
。Font
:設定字型,點選右側的[...]
按鈕,打開字型設定界面。
⑦ComboBoxPaired屬性設定
Height
:設定控制元件高度=31
。Width
:設定控制元件寬度=31
。Name
:設定控制元件名稱=ComboBoxPaired
。Font
:設定字型,點選右側的[...]
按鈕,打開字型設定界面。
⑧ImageServices屬性設定
Height
:設定圖片高度=31
。Width
:設定圖片寬度=31
。Name
:控制元件名稱=ImageServices
。Stretch
:設定圖片拉伸=True
。Picture
:設定圖片。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
⑨ComboBoxServices屬性設定
Height
:設定控制元件高度=31
。Width
:設定控制元件寬度=31
。Name
:設定控制元件名稱=ComboBoxServices
。Font
:設定字型,點選右側的[...]
按鈕,打開字型設定界面。
⑩Image4屬性設定
Height
:設定圖片高度=50
。Width
:設定圖片寬度=50
。Visible
:設定圖片可見=True
。Picture
:設定圖片(開關開)。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
(11)Image5屬性設定
Height
:設定圖片高度=50
。Width
:設定圖片寬度=50
。Visible
:設定圖片可見=False
。Picture
:設定圖片(開關關)。點選Picture
屬性右側的[...]
按鈕,打開檔案上傳界面,點選[Load...]
從檔案瀏覽器中選擇對應的圖片檔案上傳,返回該界面下,待顯示出圖片後點擊[OK]
載入圖片。
# 7. 程式設計
# 7.1. 程式初始設定
該程式無初始設定。
# 7.2. 事件設定
- ⑩Image4-OnClick事件
Image4
是開關打開狀態的影象,點選該影象,執行關燈的操作,Image4
隱藏,顯示被遮蓋的Image5
影象(開關關閉狀態)。同時Image3
(燈亮狀態影象)也會隱藏。連線Arduino開發板的LED發光二極管如處於點亮狀態則會被熄滅。
procedure TMyHandler.Image4Click;
begin
//關燈
FThis.Bluetooth1.SendData('0');//熄滅LED
FThis.Image3.Visible := False;
FThis.Image4.Visible := False;
end;
2
3
4
5
6
7
- (11)Image5-OnClick事件
Image5
是開關關閉狀態的影象,點選該影象,執行開燈的操作,Image4
顯示並遮蓋Image5
影象,同時Image3
顯示並遮蓋Image2
影象。連線Arduino開發板的LED燈如處於熄滅狀態則會被點亮。
procedure TMyHandler.Image5Click;
begin
//開燈
FThis.Bluetooth1.SendData('1');//點亮LED
FThis.Image3.Visible := True;
FThis.Image4.Visible := True;
end;
2
3
4
5
6
7
- ⑤ImageDevice-OnClick事件
ImageDevice
是設備搜尋按鈕,點選載入藍芽設備列表。
procedure TMyHandler.ImageDevicesClick;
//點選載入配對設備列表
begin
FThis.Bluetooth1.PairedDevices;
FThis.ComboboxPaired.Items := FThis.Bluetooth1.BTPaireds;
FThis.ComboBoxPaired.DroppedDown := True;
FThis.ImageDevices.Enabled := False;
end;
2
3
4
5
6
7
8
- ⑧ImageServices-OnClick事件
ImageServices
是服務搜尋按鈕,點選以載入服務列表。
procedure TMyHandler.ImageSevicesClick;
//點選載入服務至列表
begin
FThis.Bluetooth1.Services;
FThis.ComboBoxServices.Items := FThis.Bluetooth1.BTServices;
FThis.ComboBoxServices.DroppedDown := True;
end;
2
3
4
5
6
7
8
- ⑦ComboBoxPaired-OnChange事件
點選切換設備時觸發事件,修改Bluetooth1
的設備資訊。
procedure TMyHandler.ComboBoxPairedChange;
//切換設備
begin
FThis.Bluetooth1.PairedDevice := FThis.ComboBoxPaired.Items[FThis.ComboBoxPaired.ItemIndex];
end;
2
3
4
5
- ⑨ComboBoxServices-OnChange事件
點選切換服務,並啟動藍芽服務。
procedure TMyHandler.ComboBoxServicesChange;
//切換服務
begin
FThis.Bluetooth1.CloseServerSocket;
FThis.Bluetooth1.FreeClientSocket;
FThis.Bluetooth1.ServiceUUID := FThis.ComboBoxServices.Items[FThis.ComboBoxServices.ItemIndex];
FThis.Bluetooth1.CreateServerSocket;
end;
2
3
4
5
6
7
8
# 8. 運行結果
通過工具欄儲存,將程式儲存為 sdb 專案檔案。
使用滑鼠點選工具欄運行(Run),測試運行結果。首先點選藍芽圖示按鈕,右側下拉框顯示可選的藍芽設備,點選選擇HC-06
,再點選下方的服務圖示按鈕,右側下拉框會顯示處可選的服務,點選Dev B
系列,此時關注HC-06模組的指示,待指示燈停止閃爍變成常亮狀態則配對成功,此時可點選右側的開關影象,開關打開,上方的燈泡切換為亮燈的狀態,同時連線Arduino開發板的LED發光二極管處於點亮的狀態;在亮燈狀態下,點選右側的開關影象,開關關閉,上方的燈泡切換為燈滅的狀態,同時連線Arduino開發板的LED發光二極管處於關閉的狀態。