Z14172803154 2024-12-20 09:32 采纳率: 66.7%
浏览 172
已结题

ArduinoIDE使用 ESP32 BLE 鼠标库出现错误

使用ESP32_BLE_MOUSE的库却出现了一堆错误,代码没有问题,错误提示却说ESP32_BLE_MOUSE的库:
c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp: In static member function 'static void BleMouse::taskServer(void*)':
c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp:143:37: error: cannot convert 'std::string' {aka 'std::__cxx11::basic_string'} to 'String'
143 | BLEDevice::init(bleMouseInstance->deviceName);
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~
| |
| std::string {aka std::__cxx11::basic_string}


这里是ArduinoIDE跳出来的错误

c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp: In static member function 'static void BleMouse::taskServer(void*)':
c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp:143:37: error: cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'String'
  143 |   BLEDevice::init(bleMouseInstance->deviceName);
      |                   ~~~~~~~~~~~~~~~~~~^~~~~~~~~~
      |                                     |
      |                                     std::string {aka std::__cxx11::basic_string<char>}
In file included from c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp:1:
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLEDevice.h:41:27: note:   initializing argument 1 of 'static void BLEDevice::init(String)'
   41 |   static void init(String deviceName);                                                            // Initialize the local BLE environment.
      |                    ~~~~~~~^~~~~~~~~~
c:\Users\HP\Documents\Arduino\libraries\ESP32_BLE_Mouse\BleMouse.cpp:151:50: error: no matching function for call to 'BLECharacteristic::setValue(std::string&)'
  151 |   bleMouseInstance->hid->manufacturer()->setValue(bleMouseInstance->deviceManufacturer);
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLEServer.h:23,
                 from C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLEDevice.h:21:
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:77:8: note: candidate: 'void BLECharacteristic::setValue(uint8_t*, size_t)'
   77 |   void setValue(uint8_t *data, size_t size);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:77:8: note:   candidate expects 2 arguments, 1 provided
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:78:8: note: candidate: 'void BLECharacteristic::setValue(String)'
   78 |   void setValue(String value);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:78:24: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'String'
   78 |   void setValue(String value);
      |                 ~~~~~~~^~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:79:8: note: candidate: 'void BLECharacteristic::setValue(uint16_t&)'
   79 |   void setValue(uint16_t &data16);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:79:27: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'uint16_t&' {aka 'short unsigned int&'}
   79 |   void setValue(uint16_t &data16);
      |                 ~~~~~~~~~~^~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:80:8: note: candidate: 'void BLECharacteristic::setValue(uint32_t&)'
   80 |   void setValue(uint32_t &data32);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:80:27: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'uint32_t&' {aka 'long unsigned int&'}
   80 |   void setValue(uint32_t &data32);
      |                 ~~~~~~~~~~^~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:81:8: note: candidate: 'void BLECharacteristic::setValue(int&)'
   81 |   void setValue(int &data32);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:81:22: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'int&'
   81 |   void setValue(int &data32);
      |                 ~~~~~^~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:82:8: note: candidate: 'void BLECharacteristic::setValue(float&)'
   82 |   void setValue(float &data32);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:82:24: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'float&'
   82 |   void setValue(float &data32);
      |                 ~~~~~~~^~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:83:8: note: candidate: 'void BLECharacteristic::setValue(double&)'
   83 |   void setValue(double &data64);
      |        ^~~~~~~~
C:\Users\HP\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\BLE\src/BLECharacteristic.h:83:25: note:   no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'double&'
   83 |   void setValue(double &data64);
      |                 ~~~~~~~~^~~~~~

exit status 1

Compilation error: exit status 1

img

这里是我用到鼠标库的链接: https://github.com/T-vK/ESP32-BLE-Mouse

  • 写回答

1条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2024-12-20 10:02
    关注
    让【道友老李】来帮你解答,本回答参考通义千问大模型编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    ### 问题分析

    根据你提供的错误信息,问题出在 ESP32_BLE_Mouse 库中的一些类型转换错误。具体来说,std::string 类型不能直接转换为 String 类型。这通常是因为 Arduino IDE 中的 String 类型和 C++ 标准库中的 std::string 类型不兼容。

    解决方案

    1. 修改库文件

    你需要修改 ESP32_BLE_Mouse 库中的 BleMouse.cpp 文件,将 std::string 转换为 String 类型。

    修改前的代码
    BLEDevice::init(bleMouseInstance->deviceName);
    
    修改后的代码
    BLEDevice::init(String(bleMouseInstance->deviceName));
    

    同样地,对于 setValue 方法也需要进行类似的修改:

    修改前的代码
    bleMouseInstance->hid->manufacturer()->setValue(bleMouseInstance->deviceManufacturer);
    
    修改后的代码
    bleMouseInstance->hid->manufacturer()->setValue(String(bleMouseInstance->deviceManufacturer));
    

    2. 重新编译

    完成上述修改后,保存文件并重新编译你的项目。

    示例代码

    假设你有一个简单的示例代码来测试 ESP32_BLE_MOUSE 库,如下所示:

    #include <BleMouse.h>
    
    BleMouse bleMouse("My BLE Mouse");
    
    void setup() {
      Serial.begin(115200);
      bleMouse.begin();
    }
    
    void loop() {
      if (Serial.available()) {
        char command = Serial.read();
        switch (command) {
          case 'l':
            bleMouse.click(BLE_MOUSE_LEFT);
            break;
          case 'r':
            bleMouse.click(BLE_MOUSE_RIGHT);
            break;
          case 'm':
            bleMouse.click(BLE_MOUSE_MIDDLE);
            break;
          case 'u':
            bleMouse.move(0, -10, 0);
            break;
          case 'd':
            bleMouse.move(0, 10, 0);
            break;
          case 'l':
            bleMouse.move(-10, 0, 0);
            break;
          case 'r':
            bleMouse.move(10, 0, 0);
            break;
        }
      }
    }
    

    总结

    通过将 std::string 转换为 String 类型,可以解决类型不匹配的问题。确保在修改库文件后重新编译项目,以验证问题是否已解决。如果还有其他问题,请检查库的版本和依赖项是否正确安装。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月20日