NimBLE-Arduino icon indicating copy to clipboard operation
NimBLE-Arduino copied to clipboard

Impossible to reconnect after some time and multiple connections

Open Koxx3 opened this issue 1 year ago • 10 comments

Hello,

this is a bug that I have been tracking for a long time. It's difficult to reproduce.

After some time, it becomes impossible to reconnect to the ESP BLE. In 99.9% of the time, it works fine. But sometime, it's locked in a bad state.

I finally managed to capture the log (see next comment).

After that it is impossible to reconnect. I never seen the 'onAuthenticationComplete'.

I found a hack ... but it's really dirty. I have to deinit NimBLE and reinit. then it works again.

It's a complicated project, it's difficult to extract the BLE code.

Koxx3 avatar Aug 14 '23 16:08 Koxx3

Here is the log : https://koxx3.fr.eu.org:8086/ble_conn_ko.txt

Note that at line 4704, I decide to reset the NimBLE (after 5 failure).

I've tried to connect another phone, it's not the phone or the phone BLE stack. When stuck. I tried with android and iphone, impossible to reconnect. They are stuck when "reading services" or "connect" state. Tried with my app, Ble Scanner or LighBlue app. Same thing.

After unbonding, impossible to rebond.

Koxx3 avatar Aug 14 '23 16:08 Koxx3

As you can see, My ESP act as a BLE server, it also constinuously advertise and scan for devices.

No memory issue : MEM left = 54256 idle = 5584 tft = 1936 wifi = 3020 btn = 2452 canrx = 1600 cantx = 1884 sound = 408 serial = 4500 btCntr = 1580 btHost = 5212 CAN_WD_BI = 1544 CAN_LORX = 3524 Tmr = 1388 ipc0 = 256 esp_timer = 2816 loopTask = 5264

Koxx3 avatar Aug 14 '23 16:08 Koxx3

Here is a the important code extraction : https://koxx3.fr.eu.org:8086/ble_conn_ko.cpp

Koxx3 avatar Aug 14 '23 16:08 Koxx3

@h2zero , any help would be greatly appreciated. As said, it's very difficult to capture and I don't see anything wrong the my current code.

Koxx3 avatar Aug 14 '23 16:08 Koxx3

Also, my PIO config :

[env]
platform = https://github.com/tasmota/platform-espressif32/releases/download/v.2.0.5/platform-espressif32-v.2.0.5.zip
framework = arduino, espidf
board = esp32dev

lib_deps = 
	nimble=https://github.com/h2zero/[email protected]+sha.bc333cc

build_flags = 
	-DCONFIG_BT_NIMBLE_LOG_LEVEL=0 ; => debug
	-DCONFIG_NIMBLE_CPP_LOG_LEVEL=4 ; => debug
	-DCONFIG_BT_NIMBLE_TASK_STACK_SIZE=8096 
	-DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=10000
	-DCONFIG_BT_NIMBLE_MAX_CONNECTIONS=2
	-DMYNEWT_VAL_BLE_STORE_MAX_CCCDS=20

Koxx3 avatar Aug 14 '23 16:08 Koxx3

Hi @Koxx3, I don't see any obvious problem in the logs. I suspect an issue with the BLE controller as it's well known to hang, especially in the version of the arduino core/IDF you are on.

Unfortunately, if that's the case, what you are doing to workaround it is the best way to resolve the issue.

h2zero avatar Aug 14 '23 19:08 h2zero

thanks a lot for your feedback. do you known which version of arduino/idf could improve this sitation ? migration on a large project is always a pain. If I can target a version, it will help :D

Koxx3 avatar Aug 14 '23 19:08 Koxx3

The old versions, such as 1.0.6 were better in this regard, but I doubt you want to go back to that. I believe this should be fixed when the new version based on IDF 5.x is released, you could try testing it now.

h2zero avatar Aug 14 '23 21:08 h2zero

@Koxx3 are you still having this issue?

h2zero avatar Jun 05 '24 16:06 h2zero

@Koxx3 A number of commits where just made to the master branch and 1 to the release branch that should resolve this.

h2zero avatar Jun 13 '24 20:06 h2zero