Esp 32 als Bluetooth HIDKeyboard nutzen?
Hallo,
Ich will gerne mit einem esp32 eine Bluetooth Tastatur machen. Ich habe dafür eine 3x12-Taster-Matrix. Hat jemand einen Code dafür?
Vielen Dank!
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.
Ö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
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.
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 ;)
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