如何使用Flora Bluefruit LE的HID配置文件实现音乐播放器远程控制
基于Flora Bluefruit LE的HID媒体控制实现方案
1. 前置准备
- 硬件:Flora Bluefruit LE开发板、对应按键/触控输入模块、适配的供电单元
- 依赖:Arduino IDE + Adafruit BluefruitLE nRF51库,直接在Arduino库管理器搜索即可安装
2. 核心原理
蓝牙HID的媒体控制不需要你手动编写复杂的HID配置描述符,Flora Bluefruit LE的官方固件已经默认集成了HID消费者页面的支持,你只需要调用封装好的API发送对应标准按键码就能实现控制,常用的媒体控制按键码如下:
- 音量加:
HID_CONSUMER_VOLUME_INCREMENT - 音量减:
HID_CONSUMER_VOLUME_DECREMENT - 下一曲:
HID_CONSUMER_SCAN_NEXT - 上一曲:
HID_CONSUMER_SCAN_PREVIOUS - 播放/暂停:
HID_CONSUMER_PLAY_PAUSE - 静音:
HID_CONSUMER_MUTE
3. 具体实现步骤
3.1 开启HID模式
你可以通过两种方式开启设备的HID功能:
方式1:发送AT指令
AT+BLEHIDEN=1,重启开发板后生效
方式2:直接在Arduino代码中调用blehid.begin()初始化HID服务,烧录后自动生效
3.2 编写按键控制逻辑
给每个功能绑定对应IO口的按键,检测到按键按下后发送对应HID码即可,示例代码片段如下:
#include <Adafruit_BLE.h> #include <Adafruit_BluefruitLE_SPI.h> #include <Adafruit_BluefruitLE_HID.h> Adafruit_BluefruitLE_SPI ble; Adafruit_BluefruitLE_HID blehid(&ble); // 自定义按键引脚 #define VOL_UP_PIN 2 #define VOL_DOWN_PIN 3 #define NEXT_TRACK_PIN 4 #define PREV_TRACK_PIN 5 #define PLAY_PAUSE_PIN 6 void setup() { ble.begin(); blehid.begin(); // 配置按键为上拉输入,低电平触发按下 pinMode(VOL_UP_PIN, INPUT_PULLUP); pinMode(VOL_DOWN_PIN, INPUT_PULLUP); pinMode(NEXT_TRACK_PIN, INPUT_PULLUP); pinMode(PREV_TRACK_PIN, INPUT_PULLUP); pinMode(PLAY_PAUSE_PIN, INPUT_PULLUP); } void loop() { // 音量加逻辑 if (digitalRead(VOL_UP_PIN) == LOW) { blehid.consumerKeyPress(HID_CONSUMER_VOLUME_INCREMENT); delay(100); blehid.consumerKeyRelease(); while(digitalRead(VOL_UP_PIN) == LOW); // 等待按键松开防重复触发 } // 音量减逻辑 else if (digitalRead(VOL_DOWN_PIN) == LOW) { blehid.consumerKeyPress(HID_CONSUMER_VOLUME_DECREMENT); delay(100); blehid.consumerKeyRelease(); while(digitalRead(VOL_DOWN_PIN) == LOW); } // 下一曲逻辑 else if (digitalRead(NEXT_TRACK_PIN) == LOW) { blehid.consumerKeyPress(HID_CONSUMER_SCAN_NEXT); delay(100); blehid.consumerKeyRelease(); while(digitalRead(NEXT_TRACK_PIN) == LOW); } // 上一曲逻辑 else if (digitalRead(PREV_TRACK_PIN) == LOW) { blehid.consumerKeyPress(HID_CONSUMER_SCAN_PREVIOUS); delay(100); blehid.consumerKeyRelease(); while(digitalRead(PREV_TRACK_PIN) == LOW); } // 播放暂停逻辑 else if (digitalRead(PLAY_PAUSE_PIN) == LOW) { blehid.consumerKeyPress(HID_CONSUMER_PLAY_PAUSE); delay(100); blehid.consumerKeyRelease(); while(digitalRead(PLAY_PAUSE_PIN) == LOW); } delay(20); }
3.3 手机端配对使用
代码烧录完成后,打开手机蓝牙搜索名为Adafruit Bluefruit LE的设备,配对完成后直接打开音乐播放器即可用按键控制,不需要额外安装任何APP。
4. 注意事项
- 如果你需要实现其他自定义媒体控制功能,直接查阅HID消费者页面的标准码表替换对应按键码即可,不需要修改HID描述符
- 按键防抖的delay时长可以根据实际使用需求调整,也可以用硬件防抖电路替代软件防抖
- 供电建议用3.7V锂电池匹配Flora的供电规格,续航更稳定
内容的提问来源于stack exchange,提问作者Pouya M. Khorsandi
相关产品推荐
相关产品推荐

