蓝牙控制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发光二极管处于关闭的状态。
