Question On Expected BLE Communication Speeds

Hello,

I apologize if this question has already been answered some where on this form but I did not see any post relating to this topic. I want to develop an application that utilizes BLE communication to between a watch (Tactix Delta Sapphire) and another BLE enabled device(phone).

When reading from a device how much time would it take to issue a read command and get a response?  How long would the time take to transfer data to finish reading and writing between the devices on average? Would updating data once a second be to fast for a BLE connection between a watch (Tactix Delta Sapphire) and device?

 

Thank you very much in advance!

  • I'm not sure anyone has been able to use BluetoothLowEnergy to talk to a phone from a garmin device.

    To speed up the connection, you can save the scan result to persistent storge.  That way you don't need to do the scan.  As far as the speed to read something, I've not measured it, but it's fast (subsecond).  One thing to keep in mind, when you do a read (or get a notify) you can only get 22 bytes of data,  I have an app that you can run on a device and check it can see the device you want to connect to.  You can also try to actually connect/pair that device.

    BleScan:

    https://apps.garmin.com/en-US/apps/9bcc8b66-8385-4afb-b93e-f69e01422284

  • Thank you very much for your reply Jim,

    I will download the application and test it out. 

    To specify more I am interested in the time it takes from initiating (on the watch) to read a characteristic (from external device), to getting a response from a BLE read characteristic callback (also on the watch). With this clarification would you still expect the fast sub second time frame you had mentioned above? 

    The main concern is being able to receive data through BLE at around 1 per second if possible. 

    Thanks again for your incite!

  • I'll add a bit of code to one of my apps to display yje time for a read, but from what I observe, it will be under a second,  But could vary based on what you connect to

  • With a Raspberry Pi, and using Sys.getTimer() when I do the requestRead() and in onCharacteristicRead(), I'm seeing about 200ms (+/- 50ms) to do a read on a real device.  So yes, well under 1 second.

    update:  The Pi uses node.js and python to handle BLE requests.  I switched to a very simple characteristic, and I'm now consistently seeing 130-190ms.  Using native/compiled code on the PI end would probably improve on that

  • Thank you for testing and letting me know the results. I am not seeing the speeds mentioned above on my Tactix Delta and am seeing around 2 seconds between request read. What Garmin device are you using to get the speeds mentioned above? 

  • My own code on a raspberry pi.  

    Is there a notify option for the characteristic you're reading?

  • The way I did the test is I times how long it was between doing the requestRead and when results are seen in the Ble delegate.  Not how offend I do a read.  How are you doing the requestRead calls?  Is it based on a timer in your app?

  • In my application I am calling the requestRead() function on my (Tactix Delta), I then wait until the callback function onCharacteristicRead() is called. Inside the onCharacteristicRead() callback function I then call the requestRead() function again which repeats the cycle. measuring this time I get about 2 second between one requestRead() to the next requestRead(). I currently do not have any timers in my program. 

    Thanks again!

  • As I've said in this thread, times are dependant on the device you are connecting to.  I'd really look at using notifcations if supported.  That's what I do in an app I have for an external heart rate monitor.  You let the device update you when it needs to and not issue a bunch of reads.