1
\$\begingroup\$

We are trying to read data from 8 BLE peripheral.
When using single peripheral, the peripheral device was sending notify to the central side(this fire a callback on central), ensuring lossless data transmission. How can central read 8 devices simultaneously?

  1. How should central's data reading policy be? Notify based or write/read based?
  2. Peripherals are asynchronous to each other. Should they be synchronous?
  3. Is there a setting that needs to be applied to the ble stack that about the BLE parameters itself.
  4. Do peripherals have to give up by reducing their speed?

NOTE: simultaneously meaning in central's connection interval to peripheral. Not exact same moment in time domain.

Best Regards

\$\endgroup\$
4
  • \$\begingroup\$ You can't read simultaneously. \$\endgroup\$
    – Andy aka
    Aug 18, 2020 at 13:07
  • \$\begingroup\$ Actually, i mean reading 8 devices sequentially in one connection interval. Not exact simultaneously. Central stay connected to all peripheral and collects all data from peripherals in one period(e.g. 7.5ms,15ms..) \$\endgroup\$ Aug 18, 2020 at 13:16
  • 1
    \$\begingroup\$ What if peripherals try to send data to the central at the same time? data loss? What is the solution? \$\endgroup\$ Aug 18, 2020 at 13:19
  • \$\begingroup\$ Fix your question please. \$\endgroup\$
    – Andy aka
    Aug 18, 2020 at 13:20

1 Answer 1

1
\$\begingroup\$

There are two approaches, and either can work.

  1. The central could connect to the 8 peripherals simultaneously. This is definitely possible if you are writing the firmware for the central's Bluetooth chip (e.g., nRF52 series). You start scanning and connect to the first peripheral you find. You then restart the scanning/connecting process until you've connected to all of them. For each connection, the central would subscribe to notifications. The peripherals, running asynchronously, will send notifications at their respective connection intervals. Fortunately, the central manages all the timing issues of preventing collisions. (Note: if you're using a smartphone as the central, the smartphone operating system may limit the number of connections or the frequency of the connection intervals, in order to manage battery life.)

  2. You could also use "broadcasting". In this mode, you put the peripheral data into the advertising packet. The central does NOT connect to any of them, it simply scans continuously and reports the scan packet data. But this is less reliable, so you would have to accept occasional missed messages. If the data rates are low enough, however, it could support 10's to 100's of peripherals.

\$\endgroup\$
2
  • \$\begingroup\$ thanks. I forgot for a moment that central checks intervals, well remember. Can central collect standard data size of 20 bytes from every peripheral? Or do I need to reduce all peripheral speeds? Because central has 1/8 time for 1 peripheral data. Secondly, Is it exactly dividing the central interval value into 8 equal parts to connect with the every peripheral? how to see it? \$\endgroup\$ Aug 19, 2020 at 11:50
  • \$\begingroup\$ The central can collect about 20 bytes per transmission, but the BLE protocol can use repeated transmissions to send more (about 240 bytes in 4.1, more in 5.x). The transmission only takes a few milliseconds, so with 8 peripherals, there's time to hear from each of them in a 20 mSec connection interval. \$\endgroup\$ Aug 20, 2020 at 3:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.