当前位置: 首页 > article >正文

Ardunio BLE keyboard 库的使用

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

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

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

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

分享给有缘人。 

代码

#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); // 控制发送频率,避免误操作
}


http://www.kler.cn/a/456407.html

相关文章:

  • sentinel集成nacos启动报[check-update] get changed dataId error, code: 403错误排查及解决
  • 19、鸿蒙学习——配置HDC命令 环境变量
  • netcat和nmap的区别
  • Linux:线程的概念
  • 影刀进阶指令 | Kimi (对标ChatGPT)
  • js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
  • 变长的时间戳(第4版)
  • Spring Boot 项目中 Maven 剔除无用 Jar 引用的最佳实践
  • LabVIEW Ctrl+Shift space 快速放置被占用解决办法
  • 三层交换机配置
  • 【UE5.3.2 】引擎中安装RiderLink插件
  • 将现有Web 网页封装为macOS应用
  • TCP 小队列的设计原理
  • Python学习_集合
  • 什么是数据库的锁?怎么实现?
  • 【教程】如何编译指定版本Spark
  • [Hive]七 Hive 内核
  • Kotlin 协程基础知识总结三 —— 协程上下文与异常处理
  • AutoFOX:一种冠状动脉X线造影与OCT的自动化跨模态3D融合框架|文献速递-视觉大模型医疗图像应用
  • IDEA 搭建 SpringBoot 项目之配置 Maven
  • 打造RAG系统:四大向量数据库Milvus、Faiss、Elasticsearch、Chroma 全面对比与选型指南
  • 【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南
  • 从CreateDialogIndirectParam起---我与大模型对话
  • 使用机器学习在单细胞水平识别肿瘤细胞
  • 【Halcon】数据结构汇总
  • 从0入门自主空中机器人-3-【环境与常用软件安装】