40| 0
|
[ESP8266/ESP32] 关于ESP32-C5开发板ESP32 BLE Keyboard库的兼容性解决 |
本帖最后由 创客编程张 于 2025-10-17 22:28 编辑 对于一些想要用esp32-c5做蓝牙键盘的创客者来说,大家一般都可以选择esp32 ble keyboard库,但是在操作过程中你会发现, ide又会进行报错,这是因为当前使用的 3.3.0-alpha1-cn 是测试版,兼容性较差,ESP32 开发板包版本与 ESP32 BLE Keyboard 库不兼容,具体是开发板包中的 BLE 库(BLECharacteristic.h)与键盘库使用的字符串类型不匹配(std::string vs String)。 现在我们需要解决这个问题。我们不能更换库版本我们只能去改变蓝牙接盘库 我们可以通过修改 ESP32 BLE Keyboard 库的源码来解决字符串类型不兼容的问题(std::string 与 String 冲突)。具体步骤如下: 问题根源 开发板包的 BLE 库(BLECharacteristic.h)中,setValue 函数要求参数为 Arduino 自带的 String 类型,而 ESP32 BLE Keyboard 库中使用了 C++ 标准库的 std::string 类型,导致类型不匹配。 解决方法:修改库源码中的字符串类型 1.找到库的安装路径 我们找到Arduino ide的库文件文件夹(libraries) 找到ESP32_BLE_Keyboard文件夹 找到BleKeyboard.cpp文件,用记事本打开 找到以下代码 在此处添加 #include <String.h>(引入 Arduino 的 String 类型): 搜索所有 std::string 并替换为 String(注意大小写):例如: 原代码:std::string deviceName = "ESP32 BLE Keyboard"; 改为:String deviceName = "ESP32 BLE Keyboard"; 原代码:void BleKeyboard::setDeviceName(std::string deviceName) { 改为:void BleKeyboard::setDeviceName(String deviceName) { 原代码:std::string _manufacturerName; 改为:String _manufacturerName; (全局替换,确保所有 std::string 都改为 String,包括变量定义、函数参数、返回值等) 2.修改 BleKeyboard.cpp 中的 substr 错误 找到以下代码 将 substr 替换为 Arduino String 支持的 substring 方法: 全局搜索文件中所有的 substr,全部替换为 substring(通常会有 2-3 处,比如设备名、制造商名的长度限制处理)。3.修改头文件 BleKeyboard.h(同样在ESP32_BLE_Keyboard文件夹) 打开BleKeyboard.h文件,同样将所有 std::string 替换为 String: 原代码:#include <string> 可删除或注释掉(因为已改用 Arduino 的 String)。 原代码:void setDeviceName(std::string deviceName); 改为:void setDeviceName(String deviceName); 所有变量声明中的 std::string 均改为 String。 注:此处方法在大多库皆适用 4.疑难杂症问题解说 如果上传出现了这样的错误 编译提示 “Sketch too big” 是因为代码编译后的体积超过了 ESP32-C5 开发板的 Flash 存储空间限制(通常与开发板包配置的 Flash 分区有关)。选择更大的 Flash 分区方案,例如: 若当前是 2MB (1MB APP/1MB SPIFFS),尝试改为 4MB (3MB APP/1MB SPIFFS)(根据开发板实际 Flash 大小选择,ESP32-C5 通常为 4MB 或 8MB)。 重新编译代码,查看是否能通过。 如果你还调用了稍大一点的库,有可能还会出现这样的错误 这是因为体积超出了内存限制可以对代码进行简化或选择更小的库 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed