BLE disconnect is not working properly

Yes I have tested this app and it works fine. The clock2 timer has nothing to do with BT as it is just to show the time in the app.

It will slow the whole App down on most smartphones.

Well I can delete this and then check the disconnect action. But I am using clock1 to read data from DK every 200ms.

..actually the BLE Extension you are using is out of date.

I updated the extension to Extension Version: 20200828 and removed the clock2 but still disconnect is not working. Looks like it the app doesn't have full control over disconnect function it only works if I close the app from background or turn off the Bluetooth.

But if I call bt_disconect() from nrf52833dk then it gets disconnected.

It will not necessarily affect the disconnection as a timer, but both Clocks must be disabled before you disconnect.

That is a Bluetooth Classic method. You are actually receiving and processing via a BLE 'Floats Received' Block so you could instead use 'Register for Floats' and simply work with the timing in the microprocessor script.

The replace text code is not necessary - the 'floatValues' are a list, just use the List Blocks to get the values.

The latest is 20201223
https://www.professorcad.co.uk/appinventortips#TipsBluetooth

Your code is somewhat unconventional and that might have something to do with it but I agree, it looks like disconnect should work.

Did you notice that we are running the new App Inventor version today? Unfortunately still on SDK 30 - Android 11.

In this topic in the first example there is an app called p110i_esp32_ble_conexión.aia (199.5 KiB), can you check if the connection/disconnection works for you?

1 Like

If you stick with this method, change your code to:

EDIT: The Clock should be disabled:
Clock1

This is what your 'FloatsReceived' Block could look like:
FloatsReceived

As I said before, you could have the App instruct the board to disconnect - is your Project just for you or is it going to be distributed? If it's just for you, then the Activity Starter method should suffice.

What do you mean by unconventional?
I start scanning, find the devices, look for device with particular name, connect, start timer and read data on timer ticks and then display data accordingly.

I can modify my app and will test it

You don't test that you are still connected (not correctly, see my Clock1 Block update), you don't use the BLE method 'register for floats', you use separate characteristics when the value type is the same, etc. That does not mean, except for testing that you are connected, that your code is wrong in any way, nor does it mean your code makes disconnection fail.

Also, not sure why you cut a chunk out of the address found for the device? You should be able to simply use the string listed and leave the extension to work with it.

Try disconnecting with this Block:

DisconnectWithAddress

You shouldn't need to ask for Bluetooth permission, the extension does that.

Chunk is because if I get the full address it comes along with the device name and If I connect with it, it gives error. So I get that the chunk that is only the device address so that it connect without errors.

I used disconnectWitAddress block but it still doesn't work.
If I make an app with just scan and disconnect functionality then disconnect start to work like I tested with my new application with only connect and disconnect functionality and also the app from @Juan_Antonio
It means my this app have some thing wrong that is not allowing it to disconnect even when it is calling disconnect.