Cant compile
niekie813 opened this issue · 4 comments
Board
ESP32
Device Description
Breadboard
Hardware Configuration
GPIO 18 = button
GPIO 19 = button
GPIO 5 = buzzer
Version
latest master (checkout manually)
IDE Name
Arduino IDE
Operating System
Windows 11
Flash frequency
40MHZ
PSRAM enabled
yes
Upload speed
115200
Description
I cant compile.
Sketch
#include <BleKeyboard.h>
#define DOT_PIN 18
#define DASH_PIN 19
#define BUZZER_PIN 5
BleKeyboard bleKeyboard; // Maak een instance van de BleKeyboard
String morseInput = "";
unsigned long lastInputTime = 0;
const unsigned long morseTimeout = 1000; // Pauze na het invoeren van morsecode
// Morsecode vertalingen
const char* morseAlphabet[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};
const char morseLetters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void setup() {
Serial.begin(115200);
pinMode(DOT_PIN, INPUT_PULLUP);
pinMode(DASH_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
// Initialiseer het Bluetooth toetsenbord
bleKeyboard.begin();
Serial.println("Morse keyboard started.");
}
void loop() {
if (digitalRead(DOT_PIN) == LOW) {
morseInput += ".";
beep(100);
Serial.print(".");
delay(300); // Anti-bounce
lastInputTime = millis(); // Reset pauze-timer
}
if (digitalRead(DASH_PIN) == LOW) {
morseInput += "-";
beep(300);
Serial.print("-");
delay(300); // Anti-bounce
lastInputTime = millis(); // Reset pauze-timer
}
// Verwerking van morsecode en versturen naar het toetsenbord
if (morseInput.length() > 0 && millis() - lastInputTime > morseTimeout) {
char translated = translateMorse(morseInput); // Vertaal morse naar letter
Serial.println(" -> " + String(translated)); // Print de vertaling
sendKey(translated); // Stuur naar Bluetooth toetsenbord
morseInput = ""; // Reset de invoer
}
}
// Beep de buzzer voor een bepaalde tijd
void beep(int duration) {
digitalWrite(BUZZER_PIN, HIGH);
delay(duration);
digitalWrite(BUZZER_PIN, LOW);
}
// Vertaal morse naar een letter
char translateMorse(String morse) {
for (int i = 0; i < 26; i++) {
if (morse == morseAlphabet[i]) {
return morseLetters[i];
}
}
return '?'; // Onbekend teken
}
// Stuur de letter naar het Bluetooth-toetsenbord
void sendKey(char key) {
if (key != '?') {
if (bleKeyboard.isConnected()) {
bleKeyboard.print(key); // Stuur het teken via Bluetooth
} else {
Serial.println("No Bluetooth connection");
}
}
}
Debug Message
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:98:25: error: expected constructor, destructor, or type conversion before '(' token
98 | BleKeyboard::BleKeyboard(string deviceName, string deviceManufacturer, uint8_t batteryLevel)
| ^
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp: In member function 'void BleKeyboard::begin()':
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:106:36: error: no matching function for call to 'String::String(std::string&)'
106 | BLEDevice::init(String(deviceName));
| ^
In file included from C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLEUUID.h:11,
from C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:17,
from C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLEHIDDevice.h:17,
from c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.h:24,
from c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:1:
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:77:12: note: candidate: 'String::String(long long unsigned int, unsigned char)'
77 | explicit String(unsigned long long, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:77:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'long long unsigned int'
77 | explicit String(unsigned long long, unsigned char base = 10);
| ^~~~~~~~~~~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:76:12: note: candidate: 'String::String(long long int, unsigned char)'
76 | explicit String(long long, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:76:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'long long int'
76 | explicit String(long long, unsigned char base = 10);
| ^~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:75:12: note: candidate: 'String::String(double, unsigned int)'
75 | explicit String(double, unsigned int decimalPlaces = 2);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:75:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'double'
75 | explicit String(double, unsigned int decimalPlaces = 2);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:74:12: note: candidate: 'String::String(float, unsigned int)'
74 | explicit String(float, unsigned int decimalPlaces = 2);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:74:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'float'
74 | explicit String(float, unsigned int decimalPlaces = 2);
| ^~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:73:12: note: candidate: 'String::String(long unsigned int, unsigned char)'
73 | explicit String(unsigned long, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:73:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'long unsigned int'
73 | explicit String(unsigned long, unsigned char base = 10);
| ^~~~~~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:72:12: note: candidate: 'String::String(long int, unsigned char)'
72 | explicit String(long, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:72:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'long int'
72 | explicit String(long, unsigned char base = 10);
| ^~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:71:12: note: candidate: 'String::String(unsigned int, unsigned char)'
71 | explicit String(unsigned int, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:71:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'unsigned int'
71 | explicit String(unsigned int, unsigned char base = 10);
| ^~~~~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:70:12: note: candidate: 'String::String(int, unsigned char)'
70 | explicit String(int, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:70:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'int'
70 | explicit String(int, unsigned char base = 10);
| ^~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:69:12: note: candidate: 'String::String(unsigned char, unsigned char)'
69 | explicit String(unsigned char, unsigned char base = 10);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:69:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'unsigned char'
69 | explicit String(unsigned char, unsigned char base = 10);
| ^~~~~~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:68:12: note: candidate: 'String::String(char)'
68 | explicit String(char c);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:68:24: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'char'
68 | explicit String(char c);
| ~~~~~^
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:66:3: note: candidate: 'String::String(StringSumHelper&&)'
66 | String(StringSumHelper &&rval);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:66:28: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'StringSumHelper&&'
66 | String(StringSumHelper &&rval);
| ~~~~~~~~~~~~~~~~~~^~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:65:3: note: candidate: 'String::String(String&&)'
65 | String(String &&rval);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:65:19: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'String&&'
65 | String(String &&rval);
| ~~~~~~~~~^~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:63:3: note: candidate: 'String::String(const __FlashStringHelper*)'
63 | String(const __FlashStringHelper *str) : String(reinterpret_cast<const char *>(str)) {}
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:63:37: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'const __FlashStringHelper*'
63 | String(const __FlashStringHelper *str) : String(reinterpret_cast<const char *>(str)) {}
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:62:3: note: candidate: 'String::String(const String&)'
62 | String(const String &str);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:62:24: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'const String&'
62 | String(const String &str);
| ~~~~~~~~~~~~~~^~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:60:3: note: candidate: 'String::String(const uint8_t*, unsigned int)'
60 | String(const uint8_t *cstr, unsigned int length) : String(reinterpret_cast<const char *>(cstr), length) {}
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:60:3: note: candidate expects 2 arguments, 1 provided
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:58:3: note: candidate: 'String::String(const char*, unsigned int)'
58 | String(const char *cstr, unsigned int length);
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:58:3: note: candidate expects 2 arguments, 1 provided
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:57:3: note: candidate: 'String::String(const char*)'
57 | String(const char *cstr = "");
| ^~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/WString.h:57:22: note: no known conversion for argument 1 from 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'const char*'
57 | String(const char *cstr = "");
| ~~~~~~~~~~~~^~~~~~~~~
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:117:32: error: no matching function for call to 'BLECharacteristic::setValue(std::string&)'
117 | hid->manufacturer()->setValue(deviceManufacturer);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:83:8: note: candidate: 'void BLECharacteristic::setValue(double&)'
83 | void setValue(double &data64);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:82:8: note: candidate: 'void BLECharacteristic::setValue(float&)'
82 | void setValue(float &data32);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:81:8: note: candidate: 'void BLECharacteristic::setValue(int&)'
81 | void setValue(int &data32);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:80:8: note: candidate: 'void BLECharacteristic::setValue(uint32_t&)'
80 | void setValue(uint32_t &data32);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:79:8: note: candidate: 'void BLECharacteristic::setValue(uint16_t&)'
79 | void setValue(uint16_t &data16);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:77:8: note: candidate expects 2 arguments, 1 provided
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:78:8: note: candidate: 'void BLECharacteristic::setValue(String)'
78 | void setValue(String value);
| ^~~~~~~~
C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\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\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp: At global scope:
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:164:6: error: variable or field 'setName' declared void
164 | void BleKeyboard::setName(string deviceName) {
| ^~~~~~~~~~~
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:164:27: error: 'string' was not declared in this scope
164 | void BleKeyboard::setName(string deviceName) {
| ^~~~~~
c:\Users\niek\OneDrive\Documenten\Arduino\libraries\ESP32_BLE_Keyboard\BleKeyboard.cpp:164:27: note: suggested alternatives:
In file included from C:/Users/niek/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/xtensa-esp-elf/include/c++/13.2.0/string:41,
from C:\Users\niek\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\libraries\BLE\src/BLECharacteristic.h:15:
C:/Users/niek/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/xtensa-esp-elf/include/c++/13.2.0/bits/stringfwd.h:77:33: note: 'std::string'
77 | typedef basic_string<char> string;
| ^~~~~~
C:/Users/niek/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/xtensa-esp-elf/include/c++/13.2.0/string:66:11: note: 'std::pmr::string'
66 | using string = basic_string<char>;
| ^~~~~~
exit status 1
Compilation error: exit status 1
Other Steps to Reproduce
No response
I have checked existing issues, online documentation and the Troubleshooting Guide
- I confirm I have checked existing issues, online documentation and Troubleshooting guide.
What is the Arduino Core version used to compile this sketch?
What is the link to the ESP32_BLE_Keyboard Library used in the code?
The BLE stack has been changed in Arduino Core version 3.0.0-Alpha1 to replace all std::string
for String
class from Arduino.
The change was done in #8724
https://github.com/espressif/arduino-esp32/releases/tag/3.0.0-alpha1
The library BleKeyboard
is compatible with Arduino Core 2.0.x instead.
You can try to change the ESP32 Arduino Core version to 2.0.17 and test this sketch.
This BLE Keyboard library must be modified in order to be compatible with Arduino Core 3.0.x and latter.
Closing this issue with the resolution described above. Feel free to open it again.