第08课 蓝牙遥控的原理及应用#
8.1 项目介绍:#
蓝牙是一种流行的无线通信方式,能让设备之间不用电线就能传递信息。蓝牙模块充当中间人,手机通过蓝牙发送指令,蓝牙模块将指令传给Arduino开发板,开发板根据指令执行相应操作,例如控制LED灯的亮灭或小车的运动等。

8.2 蓝牙工作原理#
⚠️ 特别提醒:这是针对于 UNO-PLUS版本 的蓝牙模块。

BT24是一款面向嵌入式开发的低功耗串口透传蓝牙模块,主打简化蓝牙通信开发,广泛应用于物联网原型开发和小型智能设备项目中,以下是详细介绍:
蓝牙参数:
蓝牙协议: Bluetooth Specification V5.1 BLE
工作频率: 2.4GHz ISM band
通信接口: UART
工作电压: DC 5V
通信距离: 40m
蓝牙名称: BT24
串口参数: 9600、8数据位、1停止位、无校验、无流控
兼容性:支持Android/iOS蓝牙4.0及以上设备,AT指令可灵活修改模块名称、波特率等参数。
DX-BT24模块同时支持BT5.1 BLE协议,能够与具备BLE蓝牙功能的iOS设备直接连接,支持后台程序常驻运行。主要用于短距离的数据无线传输领域。避免繁琐的线缆连接,能直接替代串口线。BT24模块成功应用领域包括:
蓝牙无线数据传输
手机、电脑周边设备
手持POS设备
医疗设备无线数据传输
智能家居控制
蓝牙打印机
蓝牙遥控玩具
共享单车
⚠️ 特别提醒:这是针对于 UNO-R3版本 的蓝牙模块。

HM-10是一款经典的蓝牙4.0 BLE低功耗串口透传模块,广泛应用于物联网DIY项目和智能硬件开发,以下是核心信息:
蓝牙参数:
工作电压:5V DC
蓝牙协议:蓝牙V4.0 BLE串口收发无字节限制
工作距离:空旷环境最大100米,实际场景约20-30米,可通过发射功率调整
工作频率:2.4GHz ISM频段
调制方式:GFSK(高斯频移键控)
传输功率:支持-23dBm至6dBm调节,通过AT指令配置。
灵敏度:0.1%BER时≤-84dBm
安全功能:身份验证和加密
支持服务:中央和外围UUID FFE0,FFE1
功耗:自动休眠模式,待机电流400uA〜800uA,传输期间为8.5mA。
兼容性:支持Android/iOS蓝牙4.0及以上设备,AT指令可灵活修改模块名称、波特率等参数。
8.3 APP下载安装:#
⚠️ 特别提醒:如果已经在手机/平板上安装好了APP,则这一步骤可以直接跳过;否则,需要参照以下步骤在手机/平板上来安装APP。

步骤1: 在手机/平板浏览器的搜索框中输入官网链接:https://www.keyesrobot.cn/zh-cn/latest

步骤2: 点击 “下载中心”,进入下载中心页面。

步骤3: 在 “APP下载” 栏向下滑找到 keyes 4wd,根据自己的手机/平板系统选择对应的APP下载安装。

安卓系统(Android)
a. 点击 “点击下载” 按钮,下载对应的 “keyes 4wd.apk” 文件。

b. 按照安装提示进行下载安装。


c. 下载安装后,打开 keyes 4wd APP,出现如下图界面,按照提示进行操作。




苹果系统(IOS)
a. 点击 “跳转APP Store” 按钮,页面跳转到 APP Store

b. 在 APP Store 上搜索 keyes BT car ,选择 keyes BT car,然后点击
获取,等待下载安装APP即可。

c. 下载安装后,打开 keyes BT car APP,出现如下图界面,参照提示进行相应的操作。

d. 打开手机/平板上的蓝牙。


8.4 项目组件:#
组装好的智能车(未插上蓝牙模块) *1 |
草帽LED白发红模块 *1 |
3Pin 双母头杜邦线 *1 |
|---|---|---|
|
|
|
USB线 *1 |
5号(1.5V)电池 *6(电池自备) |
蓝牙模块 |
|
|
|
8.5 示例代码1:APP测试#
⚠️ 重要提示:
- 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。示例代码上传成功后,再插回蓝牙模块。
/*
keyes 4WD 多功能智能车
课程 08.1
蓝牙通信
http://www.keyes-robot.com
*/
char BLE_VAL; // 蓝牙接收到的字符变量
/* 功能:初始化串口通信 */
void setup() {
Serial.begin(9600); // 初始化串口,波特率 9600
}
/* 功能:读取串口数据并打印 */
void loop() {
if (Serial.available() > 0) { // 判断串口缓存区是否有数据
BLE_VAL = Serial.read(); // 读取串口缓存区的数据
Serial.println(BLE_VAL); // 打印接收到的字符
}
}
8.6 项目结果1:#
⚠️ 重要提示:
- 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。示例代码上传成功后,再插回蓝牙模块。
外接电源,将电机驱动扩展板上的拨码开关拨到 “OFF” 端,上电后。选择好正确的开发板板型(Arduino Uno)和 适当的串口端口(COMxx),然后单击
按钮上传示例代码1至Arduino控制板。
打开电源:将电机驱动扩展板上的拨码开关拨到 “ON” 端。
将蓝牙模块直接插在电机驱动扩展板上,注意一下蓝牙方向,确认接线无误。
蓝牙模块 |
电机驱动扩展板 |
|---|---|
EN |
- |
VCC |
5V |
GND |
G |
TXD |
RX |
RXD |
TX |
STATE |
- |


⚠️ 特别注意:
接线时请确保电源断开(拔掉Arduino主控板上的USB线或将电机驱动扩展板上的拨码开关拨到 “OFF” 端),避免短路。
电源连接:电池盒电源接到电机驱动扩展板的 BAT 接口(注意正负极不要接反),端口正反面,请勿反插,否则会损坏端口。
电池正负极切勿接反,否则可能烧毁电机驱动扩展板。
连接好蓝牙模块,蓝牙模块上的LED闪烁。
安卓系统(Android)
打开手机/平板上的蓝牙。

点击手机/平板上的APP图标
,进入APP界面,显示如下图:

点击APP界面左上角的
图标 “CONNECT”,搜索到对应的蓝牙设备(BT24–针对UNO-PLUS版本 // HMSoft–针对UNO-R3版本),上下滑动找到对应的蓝牙设备(BT24–针对UNO-PLUS版本 // HMSoft–针对UNO-R3版本),显示如下图:


点击 “connect” 来连接蓝牙,蓝牙连接成功后,“connect” 字样会变成 “is connected” 字样,显示如下图。这时,蓝牙模块上的LED变为常亮。


打开串口监视器,设置波特率为9600,按下APP界面上的各个按键,串口监视器窗口会打印对应的字符。

苹果系统(iOS)
打开手机/平板上的蓝牙。

点击手机/平板上的APP图标
,进入APP界面,显示如下图:

点击APP界面左上角的
图标 “CONNECT”,搜索到对应的蓝牙设备(BT24–针对KE0165套件 // HMSoft–针对KE0165套件),上下滑动找到对应的蓝牙设备(BT24–针对KE0165套件 // HMSoft–针对KE0165套件),显示如下图:


点击 “Connect” 来连接蓝牙,蓝牙连接成功后,蓝色字体“Connect” 字样会变成 绿色字体“Connect” 字样,显示如下图。这时,蓝牙模块上的LED变为常亮。



点击 “keyes 4wd” 图标
进入APP操作页面。


打开串口监视器,设置波特率为9600,按下APP界面上的各个按键,串口监视器窗口会打印对应的字符。

8.7 示例代码2:蓝牙控制LED:#
上面的项目,我们讲解了蓝牙接收到手机/平板发送的信号并且在开发板的串口显示出来,接下来,利用手机/平板上APP上的
键发送的命令去打开或者关闭一个LED灯。
⚠️ 重要提示:
- 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。示例代码上传成功后,再插回蓝牙模块。
/*
keyes 4WD 多功能智能车
课程 08.2
蓝牙控制
http://www.keyes-robot.com
*/
char BLE_VAL; // 蓝牙接收到的字符变量
#define LED_PIN 9 // LED 灯引脚
/* 功能:初始化串口和 LED 引脚 */
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
}
/* 功能:读取串口数据,根据指令控制 LED 灯 */
void loop() {
if (Serial.available() > 0) {
BLE_VAL = Serial.read();
Serial.print(BLE_VAL); // 打印接收到的字符
Serial.print(" 数据已接收:"); // 输出接收提示
if (BLE_VAL == 'B') {
digitalWrite(LED_PIN, HIGH); // 点亮 LED
Serial.println("LED 已开启");
}
if (BLE_VAL == 'S') {
digitalWrite(LED_PIN, LOW); // 熄灭 LED
Serial.println("LED 已关闭");
}
}
}
8.8 项目结果2:#
⚠️ 重要提示:
- 上传示例代码前,请务必拔掉蓝牙模块! 因为蓝牙模块也占用Arduino的串口通信(TX/RX),如果不拔掉,示例代码上传会失败。示例代码上传成功后,再插回蓝牙模块。
外接电源,将电机驱动扩展板上的拨码开关拨到 “ON” 端,上电后。选择好正确的开发板板型(Arduino Uno)和 适当的串口端口(COMxx),然后单击
按钮上传示例代码2至Arduino控制板。
打开电源:将电机驱动扩展板上的拨码开关拨到 “ON” 端。
将蓝牙模块直接插在电机驱动扩展板上,注意一下蓝牙方向,确认接线无误;LED模块也连接到电机驱动扩展板对应位置上。
蓝牙模块 |
电机驱动扩展板 |
|---|---|
EN |
- |
VCC |
5V |
GND |
G |
TXD |
RX |
RXD |
TX |
STATE |
- |
LED 模块 |
电机驱动扩展板 |
|---|---|
GND |
G |
VCC |
5V |
S |
S(D9) |


⚠️ 特别注意:
接线时请确保电源断开(拔掉Arduino主控板上的USB线或将电机驱动扩展板上的拨码开关拨到 “OFF” 端),避免短路。
电源连接:电池盒电源接到电机驱动扩展板的 BAT 接口(注意正负极不要接反),端口正反面,请勿反插,否则会损坏端口。
电池正负极切勿接反,否则可能烧毁电机驱动扩展板。
连接好蓝牙模块,蓝牙模块上的LED闪烁。
⚠️ 特别提醒:这里是以安卓系统(Android)手机/平板操作为例,苹果系统(IOS)在这里就不多讲,自己可以参照。
打开手机/平板上的蓝牙。

点击手机/平板上的APP图标
,进入APP界面,显示如下图:
点击APP界面左上角的
图标 “CONNECT”,搜索到对应的蓝牙设备(BT24–针对KE0165套件 // HMSoft–针对KE0165套件),上下滑动找到对应的蓝牙设备(BT24–针对KE0165套件 // HMSoft–针对KE0165套件),显示如下图:
点击 “connect” 来连接蓝牙,蓝牙连接成功后,“connect” 字样会变成 “is connected” 字样,显示如下图。这时,蓝牙模块上的LED变为常亮。

点击手机/平板APP上的
键来控制LED。当你按住
键时,串口监视器窗口接收到字符 ‘B’,同时LED将打开;当你松开
键时,串口监视器窗口接收到字符 ‘S’,同时LED将关闭。


8.9 代码说明:#
Serial.begin(9600);
初始化串口通信,设置波特率为9600,使Arduino能与电脑或蓝牙模块正常通信。
Serial.available() > 0
检查串口缓存区是否有数据,若有则大于0。
Serial.read()
读取串口缓存区里的一个数据,存到 BLE_VAL 变量并打印出来。
#define LED_PIN 9
将LED连接的引脚定义为9,方便后续使用。
pinMode(LED_PIN, OUTPUT);
把LED引脚设置为输出模式,以便控制LED亮灭。
if (BLE_VAL == 'B') {
digitalWrite(LED_PIN, HIGH); // 点亮 LED
Serial.println("LED 已开启");
}
if (BLE_VAL == 'S') {
digitalWrite(LED_PIN, LOW); // 熄灭 LED
Serial.println("LED 已关闭");
}
若收到字符 ‘B’ 时,让LED点亮; 若收到字符 ‘S’ 时,让LED熄灭。
8.10 注意事项:#
1. 上传代码前不要插蓝牙模块,否则会导致代码上传不成功。
2. 使用电池时注意安全,避免短路。
3. 蓝牙连接时,手机/平板与蓝牙模块需在有效距离内。





