feat: migrate BLE to NimBLE — 45% flash, 33% RAM reduction
- Replaced ESP32 BLE Arduino with h2zero/NimBLE-Arduino@^2 - -DCONFIG_BT_NIMBLE_ENABLED to disable built-in Bluedroid - NIMBLE_PROPERTY::* replaces BLECharacteristic::PROPERTY_* + setAccessPermissions - BLE2902 descriptor removed (NimBLE auto-creates it) - pService->start() removed (NimBLE starts services with server) - setMinPreferred → setMinInterval/setMaxInterval - onConnect/onDisconnect/onWrite get extra NimBLEConnInfo& param - Re-advertise: BLEDevice → NimBLEDevice::startAdvertising() - Firmware: 533KB flash (was 964KB), 29KB RAM (was 44KB)
This commit is contained in:
parent
42b8092807
commit
96d3620535
3 changed files with 21 additions and 25 deletions
Binary file not shown.
|
|
@ -10,6 +10,8 @@ build_flags =
|
|||
-DCORE_DEBUG_LEVEL=5
|
||||
-DARDUINO_USB_CDC_ON_BOOT=1
|
||||
-DARDUINO_USB_MODE=1
|
||||
-DCONFIG_BT_NIMBLE_ENABLED
|
||||
lib_deps =
|
||||
h2zero/NimBLE-Arduino@^2
|
||||
upload_port = /dev/ttyACM0
|
||||
upload_speed = 115200
|
||||
44
src/main.cpp
44
src/main.cpp
|
|
@ -1,8 +1,5 @@
|
|||
#include <Arduino.h>
|
||||
#include <BLEDevice.h>
|
||||
#include <BLEServer.h>
|
||||
#include <BLEUtils.h>
|
||||
#include <BLE2902.h>
|
||||
#include <NimBLEDevice.h>
|
||||
|
||||
#include <mbedtls/md.h>
|
||||
#include <Preferences.h>
|
||||
|
|
@ -25,7 +22,7 @@
|
|||
#define NVS_KEY_NAME "key"
|
||||
#define NVS_UUID_NAME "uuid"
|
||||
|
||||
BLECharacteristic *pCharacteristic;
|
||||
NimBLECharacteristic *pCharacteristic;
|
||||
bool deviceConnected = false;
|
||||
bool bleRelay1 = false;
|
||||
bool bleRelay2 = false;
|
||||
|
|
@ -39,19 +36,19 @@ bool keyProvisioned = false;
|
|||
bool uuidProvisioned = false;
|
||||
Preferences preferences;
|
||||
|
||||
class MyServerCallbacks : public BLEServerCallbacks {
|
||||
void onConnect(BLEServer *pServer) override {
|
||||
class MyServerCallbacks : public NimBLEServerCallbacks {
|
||||
void onConnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo) override {
|
||||
deviceConnected = true;
|
||||
lastSeq = 0;
|
||||
Serial.println("BLE: device connected");
|
||||
}
|
||||
void onDisconnect(BLEServer *pServer) override {
|
||||
void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason) override {
|
||||
deviceConnected = false;
|
||||
bleRelay1 = false;
|
||||
bleRelay2 = false;
|
||||
lastSeq = 0;
|
||||
Serial.println("BLE: device disconnected");
|
||||
BLEDevice::startAdvertising();
|
||||
NimBLEDevice::startAdvertising();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -101,8 +98,8 @@ static void parseHexKey(const String &hex, uint8_t *out) {
|
|||
}
|
||||
}
|
||||
|
||||
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
|
||||
void onWrite(BLECharacteristic *pChar) override {
|
||||
class MyCharacteristicCallbacks : public NimBLECharacteristicCallbacks {
|
||||
void onWrite(NimBLECharacteristic *pChar, NimBLEConnInfo &connInfo) override {
|
||||
std::string value = pChar->getValue();
|
||||
if (value.length() != HMAC_PKT_SIZE) {
|
||||
Serial.printf("BLE: bad packet length %d (expected %d)\n",
|
||||
|
|
@ -185,34 +182,31 @@ void setup() {
|
|||
}
|
||||
Serial.println("LED blink done, starting BLE...");
|
||||
|
||||
BLEDevice::init("SylDa_Server");
|
||||
NimBLEDevice::init("SylDa_Server");
|
||||
|
||||
BLEServer *pServer = BLEDevice::createServer();
|
||||
NimBLEServer *pServer = NimBLEDevice::createServer();
|
||||
pServer->setCallbacks(new MyServerCallbacks());
|
||||
|
||||
BLEService *pService = pServer->createService(SERVICE_UUID);
|
||||
NimBLEService *pService = pServer->createService(SERVICE_UUID);
|
||||
pCharacteristic = pService->createCharacteristic(
|
||||
CHARACTERISTIC_UUID,
|
||||
BLECharacteristic::PROPERTY_WRITE_NR | BLECharacteristic::PROPERTY_NOTIFY
|
||||
NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::NOTIFY
|
||||
);
|
||||
pCharacteristic->setAccessPermissions(ESP_GATT_PERM_WRITE);
|
||||
pCharacteristic->addDescriptor(new BLE2902());
|
||||
pCharacteristic->setCallbacks(new MyCharacteristicCallbacks());
|
||||
pCharacteristic->setValue("0");
|
||||
pService->start();
|
||||
|
||||
BLECharacteristic *pUuidChar = pService->createCharacteristic(
|
||||
NimBLECharacteristic *pUuidChar = pService->createCharacteristic(
|
||||
UUID_CHAR_UUID,
|
||||
BLECharacteristic::PROPERTY_READ
|
||||
NIMBLE_PROPERTY::READ
|
||||
);
|
||||
pUuidChar->setValue(deviceUuid, ESP_UUID_LEN);
|
||||
|
||||
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
|
||||
NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
|
||||
pAdvertising->addServiceUUID(SERVICE_UUID);
|
||||
pAdvertising->setScanResponse(true);
|
||||
pAdvertising->setMinPreferred(0x06);
|
||||
pAdvertising->setMinPreferred(0x12);
|
||||
BLEDevice::startAdvertising();
|
||||
pAdvertising->enableScanResponse(true);
|
||||
pAdvertising->setMinInterval(32);
|
||||
pAdvertising->setMaxInterval(64);
|
||||
NimBLEDevice::startAdvertising();
|
||||
|
||||
Serial.println("BLE: advertising started as 'SylDa_Server'");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue