Closed flynny75 closed 4 months ago
Is the device you are connecting to advertising when you attempt to connect? If not, then it will fail since it will not be listening for connections.
Yes, the server is advertising. The entirety of the server code for this scenario is
NimBLEDevice::init("NimBLE_light_sleep");
auto bleServer = NimBLEDevice::createServer();
auto advertising = NimBLEDevice::getAdvertising();
auto service = bleServer->createService("1111");
auto c = service->createCharacteristic("2222");
c->setValue("3333");
service->start();
advertising->start();
There is no change in server behaviour between the delay loops and the light sleep loops
I am sure this used to work, so I went back through every version of the espressif32 platform. The most recent version that works is 5.1.1, 5.2.0 and onwards do not work, it never reconnects after light sleep. 5.1.1 reconnects with much more reliability (although not 100%, I assume the failed connections are an impact of default connection parameters) after light sleep.
I have uploaded a better sample that uses the neopixel to show if the connection works NimBLE_light_sleep.zip
Should I also open an issue in the espressif platform repo https://github.com/platformio/platform-espressif32 ?
Yes, I would assume that if the platform change is what affected the operation in this situation that is a bug there and not here.
I am attempting to put a client to light sleep and when it wakes reconnect to a known server. Connections after a light sleep always seem to fail and I cant figure it out - the only difference between the iterations of the loops is light sleep. I have attached a sample Platformio project that configures both the client and server. NimBLE_light_sleep.zip
Light sleep makes this awkward because the serial connection is lost. The client ESP will need to be externally powered and the USB disconnected and reconnected at certain times to see the logs. The code indicates when to do this (this is easiest in VSCode using the Serial Monitor extension as it reconnects to the same serial port when the device reappears)
Connections following
DELAY
are made after a task delay, the connections made afterLIGHT SLEEP
are made after a light sleep