Ardunio BLE keyboard 库的使用

为了开发一个 ardunio 的蓝牙选歌器,网络上普遍推荐使用:

https://github.com/T-vK/ESP32-BLE-Keyboard

结果搞了好几天,就是不行。最后发现,下面两点非常重要:

  • 使用 NimBle-ardunio 库
  • 这个库目前是2.1.2 ,一定要使用老的版本,我使用1.4.0 好了。

分享给有缘人。

代码

cpp 复制代码
#include <BleKeyboard.h>
BleKeyboard bleKeyboard;
bool deviceConnected = false; // 标记设备连接状态
 
void setup() {
  Serial.begin(115200);
  Serial.println("start ble keyboard...");
  bleKeyboard.begin();
  Serial.println("start ble keyboard finish");
}
 
void loop() {
 Serial.println("Loop work");
  // 检查设备连接状态
  if (bleKeyboard.isConnected()) {
    Serial.println("bleKeyboard.isConnected()");
    if (!deviceConnected) {
      Serial.println("device is connected");
      deviceConnected = true;
    }
 
    // 检查串口输入命令
    if (Serial.available()) {
      char command = Serial.read();
      
      // 打印接收到的命令
      Serial.print("Received command: ");
      Serial.println(command);
      
      // 通过串口输入字母进行 触发
      if (command == 'n') {
        Serial.println("send next command");
        bleKeyboard.write(KEY_MEDIA_NEXT_TRACK); // 发送"下一首"命令
      } 
      else if (command == 'p') {
        Serial.println("send previous command");
        bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK); // 发送"上一首"命令
      } else if (command == 's') {
        Serial.println("send start command");
        bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE); // 发送"上一首"命令
      }else if (command == 'o') {
        Serial.println("send stop command");
        bleKeyboard.write(KEY_MEDIA_STOP); // 发送"关闭"命令
      }else if (command == 'u') {
        Serial.println("send up command");
        bleKeyboard.write(KEY_UP_ARROW); // 发送"向上"命令
      }else if (command == 'd') {
        Serial.println("send down command");
        bleKeyboard.write(KEY_DOWN_ARROW); // 发送"向下"命令
      }else {
        Serial.println("Unknown command");
        //可以补充
        // KEY_LEFT_CTRL
        // KEY_LEFT_SHIFT
        // KEY_LEFT_ALT
        // KEY_LEFT_GUI
        // KEY_RIGHT_CTRL
        // KEY_RIGHT_SHIFT
        // KEY_RIGHT_ALT
        // KEY_RIGHT_GUI
 
        // KEY_UP_ARROW
        // KEY_DOWN_ARROW
        // KEY_LEFT_ARROW
        // KEY_RIGHT_ARROW
        // KEY_BACKSPACE
        // KEY_TAB
        // KEY_RETURN
        // KEY_ESC
        // KEY_INSERT
        // KEY_PRTSC
        // KEY_DELETE
        // KEY_PAGE_UP
        // KEY_PAGE_DOWN
        // KEY_HOME
        // KEY_END
        // KEY_CAPS_LOCK
        // KEY_F1
        // KEY_F2
        // KEY_F3
        // KEY_F4
        // KEY_F5
        // KEY_F6
        // KEY_F7
        // KEY_F8
        // KEY_F9
        // KEY_F10
        // KEY_F11
        // KEY_F12
        // KEY_F13
        // KEY_F14
        // KEY_F15
        // KEY_F16
        // KEY_F17
        // KEY_F18
        // KEY_F19
        // KEY_F20
        // KEY_F21
        // KEY_F22
        // KEY_F23
        // KEY_F24
 
        // KEY_NUM_0
        // KEY_NUM_1
        // KEY_NUM_2
        // KEY_NUM_3
        // KEY_NUM_4
        // KEY_NUM_5
        // KEY_NUM_6
        // KEY_NUM_7
        // KEY_NUM_8
        // KEY_NUM_9
        // KEY_NUM_SLASH
        // KEY_NUM_ASTERISK
        // KEY_NUM_MINUS
        // KEY_NUM_PLUS
        // KEY_NUM_ENTER
        // KEY_NUM_PERIOD
 
      }
    }
  } else {
    Serial.println("bleKeyboard.disConnected()");
    // 当设备断开连接时重新初始化蓝牙
    if (deviceConnected) {
      Serial.println("device disconnected, restarting Bluetooth broadcast");
      deviceConnected = false;
    }
    //bleKeyboard.begin(); // 重新开始广播以允许重新连接
  }
  delay(2000); // 控制发送频率,避免误操作
}
相关推荐
姚家湾2 个月前
由播客转向个人定制的音频频道(1)平台搭建
javascript·ai·hls·ardunio·播客
一只爬爬虫1 年前
利用proteus实现串口助手和arduino Mega 2560的串口通信
proteus·串口·mega 2560·ardunio