Skip to content

Error after enabling NimBLE for ESP32 (platformio) #368

@javierrayhan

Description

@javierrayhan

Hi there,

I’m currently working on a macro keyboard project using ESP32 and the ESP32 BLE Keyboard library. Everything was going fine until I realized the default BLE stack consumes too much flash and memory — so I decided to switch to NimBLE for its lighter footprint.

However, after enabling #define USE_NIMBLE, the project fails to compile with the following errors:

In file included from src/BLEKeyboardWrapper.h:4,
from src/main.cpp:3:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:2: warning: "USE_NIMBLE" redefined
#define USE_NIMBLE

: note: this is the location of the previous definition
In file included from src/BLEKeyboardWrapper.h:4,
from src/BLEKeyboardWrapper.cpp:1:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:131:60: error: expected class-name before ',' token
class BleKeyboard : public Print, public BLEServerCallbacks, public BLECharacteristicCallbacks
^
In file included from src/BLEKeyboardWrapper.h:4,
from src/BLEKeyboardWrapper.cpp:1:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:19:36: error: 'NimBLEAdvertising' does not name a type; did you mean 'BLEAdvertising'?
#define BLEAdvertising NimBLEAdvertising
^~~~~~~~~~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:138:3: note: in expansion of macro 'BLEAdvertising'
BLEAdvertising* advertising;
^~~~~~~~~~~~~~
In file included from src/BLEKeyboardWrapper.h:4,
from src/BLEKeyboardWrapper.cpp:1:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:176:16: error: 'virtual void BleKeyboard::onConnect(NimBLEServer*)' marked 'override', but does not override
virtual void onConnect(BLEServer* pServer) override;
^~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:177:16: error: 'virtual void BleKeyboard::onDisconnect(NimBLEServer*)' marked 'override', but does not override
virtual void onDisconnect(BLEServer* pServer) override;
^~~~~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:178:16: error: 'virtual void BleKeyboard::onWrite(NimBLECharacteristic*)' marked 'override', but does not override
virtual void onWrite(BLECharacteristic* me) override;
^~~~~~~
*** [.pio\build\esp32dev\src\BLEKeyboardWrapper.cpp.o] Error 1
In file included from src/BLEKeyboardWrapper.h:4,
from src/main.cpp:3:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:131:60: error: expected class-name before ',' token
class BleKeyboard : public Print, public BLEServerCallbacks, public BLECharacteristicCallbacks
^
In file included from src/BLEKeyboardWrapper.h:4,
from src/main.cpp:3:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:19:36: error: 'NimBLEAdvertising' does not name a type; did you mean 'BLEAdvertising'?
#define BLEAdvertising NimBLEAdvertising
^~~~~~~~~~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:138:3: note: in expansion of macro 'BLEAdvertising'
BLEAdvertising* advertising;
^~~~~~~~~~~~~~
In file included from src/BLEKeyboardWrapper.h:4,
from src/main.cpp:3:
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:176:16: error: 'virtual void BleKeyboard::onConnect(NimBLEServer*)' marked 'override', but does not override
virtual void onConnect(BLEServer* pServer) override;
^~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:177:16: error: 'virtual void BleKeyboard::onDisconnect(NimBLEServer*)' marked 'override', but does not override
virtual void onDisconnect(BLEServer* pServer) override;
^~~~~~~~~~~~
.pio/libdeps/esp32dev/ESP32 BLE Keyboard/BleKeyboard.h:178:16: error: 'virtual void BleKeyboard::onWrite(NimBLECharacteristic*)' marked 'override', but does not override
virtual void onWrite(BLECharacteristic* me) override;
^~~~~~~
*** [.pio\build\esp32dev\src\main.cpp.o] Error 1

What I’ve Tried:

Removed local #define USE_NIMBLE and used only build_flags = -DUSE_NIMBLE
Ensured NimBLEDevice.h is included
Confirmed class aliases (#define BLEServer NimBLEServer, etc.) are being used
Still, the virtual methods using BLEServer* are not overriding properly when NimBLE is enabled.

Thanks in advance!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions