Esp 32 als Bluetooth HIDKeyboard nutzen?

2 Antworten

VielenDank für den Tipp, genau das habe ich gemacht. Leider kommt folgende error Meldung: C:\Users\hallo\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp: In member function 'void BleKeyboard::begin()':

C:\Users\hallo\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:105:19: error: cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'String'

105 | BLEDevice::init(deviceName);

| ^~~~~~~~~~

| |

| std::string {aka std::__cxx11::basic_string<char>}

In file included from C:\Users\hallo\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:7:

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:116:32: error: no matching function for call to 'BLECharacteristic::setValue(std::string&)'

116 | hid->manufacturer()->setValue(deviceManufacturer);

| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~

In file included from C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLEServer.h:23,

from C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLEDevice.h:21:

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:79:8: note: candidate: 'void BLECharacteristic::setValue(uint16_t&)'

79 | void setValue(uint16_t &data16);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:80:8: note: candidate: 'void BLECharacteristic::setValue(uint32_t&)'

80 | void setValue(uint32_t &data32);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:81:8: note: candidate: 'void BLECharacteristic::setValue(int&)'

81 | void setValue(int &data32);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:82:8: note: candidate: 'void BLECharacteristic::setValue(float&)'

82 | void setValue(float &data32);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:83:8: note: candidate: 'void BLECharacteristic::setValue(double&)'

83 | void setValue(double &data64);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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);

| ~~~~~~~~^~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:77:8: note: candidate expects 2 arguments, 1 provided

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\BLE\src/BLECharacteristic.h:78:8: note: candidate: 'void BLECharacteristic::setValue(String)'

78 | void setValue(String value);

| ^~~~~~~~

C:\Users\hallo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\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);

| ~~~~~~~^~~~~

exit status 1

Compilation error: exit status 1

Wissen Sie, was ich da tun kann?

Vielen Dank und viele Grüße.


Taroc  28.04.2025, 16:52

Das Problem sind falsche String Datentypen in der Library, da die Library intern C++ std::string nutzt, vom Arduino Code aber den Wrapper Typ String übergeben bekommt. Um das zu lösen müsstest du zwei Zeilen in der Library selbst anpassen

Esp32 
Beitragsersteller
 28.04.2025, 17:32
@Taroc

Okay, was muss ich da den tun bzw wie geht das?

Taroc  28.04.2025, 21:35
@Esp32

Öffne :

C:\Users\hallo\Documents\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp

Ändere die Zeile

BLEDevice::init(deviceName);

zu

BLEDevice::init(String(deviceName.c_str()));

Ändere die Zeile

hid->manufacturer()->setValue(deviceManufacturer);

zu

hid->manufacturer()->setValue(String(deviceManufacturer.c_str()));

Probiers dann nochmal zu kompilieren

Dir wird hier niemand einen fertigen Code schreiben, zumal keiner weiß welche Buttons in deiner Matrix wie verbaut sind.

Google einfach nach Esp32 Bluetooth Keyboard und du wirst überhäuft mit Tutorials, Beispielen und Bibliotheken. Ohne etwas Eigenleistung sind solche Projekte nicht umsetzbar


Esp32 
Beitragsersteller
 15.04.2025, 16:51

Das mit den Buttons ist egal. Ich will einen Code der NimBLE-Arduino oder BLE verwendet und Tastatur Eingaben senden kann. Alles andere mache ich dann. Aber das mit dem Verbinden über Bluetooth usw. Habe ich noch nicht hinbekommen und auch nichts gefunden.

Esp32 
Beitragsersteller
 15.04.2025, 17:39
@Taroc

Habe ich natürlich schon versucht, aber leider funktioniert die bei mir nicht, weil da irgendwelche Fehler drin sind

Taroc  15.04.2025, 17:40
@Esp32

Kann ich mir schwer vorstellen aber egal. Hast du auch die BLE Variante probiert?

Esp32 
Beitragsersteller
 15.04.2025, 18:13
@Taroc

Klar. Ich habe aber auch selten einfache Beispiele gefunden. Zu den Fehlern: ich weiß auch nicht warum, ich meine nicht, dass die librarie Fehler hat, sondern dass in meinem Code Fehler waren. Ich habe die aber nicht gefunden.

Taroc  15.04.2025, 18:25
@Esp32

Hast du die Datei im Ordner Examples gesehen? Im Github Repo? Das ist ein 40 Zeilen Beispiel das bei Knopfdruck einen Keycode über Bluetooth sendet. Einfacher als dieses Beispiel gehts vom Aufwand her nicht mehr, schau dir das mal an und wenns nicht klappt schreib mir warum ;)