Страница 1 из 1

BLE и передача потока данных

Добавлено: Вт янв 31, 2017 23:24:50
KIVi
Есть некоторый датчик, который я хочу считывать по SPI 1000 раз в секунду и получать каждый раз 24 байта данных. Я хочу эти данные переправлять по протоколу BLE на смартфон или ноутбук. Зачем именно BLE? Потому что я хочу, чтобы устройство большую часть времени находилось в энергосберегающим режиме, но сохраняло обнаруживаемость, а когда появляются желающие начинало передачу (я понимаю, что в этот момент оно будет потреблять больше обычного).
У меня уже есть платка с CC2541 и CC Debugger, я немного поигрался с примерами проектов.
Во-первых, это вообще реально передавать 24 кбайт/сек по протоколу BLE? Если нет, то сколько максимум можно, если расстояние между устройствами будет не более пары метров?
Во-вторых, в какую сторону копать? Какой способ взаимодействия по BLE мне лучше всего подходит для реализации этой затеи?

Re: BLE и передача потока данных

Добавлено: Вт янв 31, 2017 23:50:58
Ser60
СС2541 поддерживает BLE 4.х. Тогда скорость передачи самого радио 1Mbps. Однако, из-за оверхеда протокола реально получается передать порядка 0.25 - 0.3 Mbps, или порядка 30 KBps. На скорости 25 KBps это будет уже совсем не LE (Low Energy), т.к. стек будет в активном режиме большинство времени. Полагаю, вопрос насчёт куда копать отпал сам собой, а вот последний вопрос я не понял.

Re: BLE и передача потока данных

Добавлено: Ср фев 01, 2017 10:43:46
KIVi
Нет, вопрос не отпал. Меня устраивает, что в активном режиме устройство будет много кушать., главное что в других режимах оно будет low energy.

Я хотел спросить, как именно можно обеспечить такую скорость по ble.

Re: BLE и передача потока данных

Добавлено: Ср фев 01, 2017 14:44:30
Ser60
Обеспечить высокую скорость можно путем посылки пакетов максимальной длины через минимально допустимый интервал между посылками.

Re: BLE и передача потока данных

Добавлено: Пт фев 10, 2017 19:20:08
KIVi
Это звучит логично. Но пока, насколько я вижу BLE, протокол состоит не из посылок, а из "характеристик", которые можно читать и писать. Или имеется ввиду, что хост должен запрашивать значения характеристик с минимально возможным интервалом?

Re: BLE и передача потока данных

Добавлено: Пт фев 10, 2017 23:07:31
Ser60
Нет, не совсем так. Peripheral может посылать периодические НОТИФИКАЦИИ мастеру без его на то запроса. Имеется всего 4 пита BLE сообшений, и нотификации (notification) - один из них. Почитать подробнее обо всём этом можно и следует в тех. литературе. Я рекомендую книгу, которая мне в своё время очень помогла. Для более глубокого ознакомления с технологией BLE могу порекомендовать эту книгу, однако, для начального ознакомления во многих случаях хватит и предыдущей.

Re: BLE и передача потока данных

Добавлено: Вс фев 12, 2017 22:29:45
KIVi
Так. То есть я правильно понял, что использовать GATT для моей задачи вполне нормальное решение и альтернатив особо нет.

Подредактировал пример SimpleBLEPeripheral для CC2541, чтобы он обновлял значение характеристики с минимальной задержкой (типа каждую 1 мс, но скорее всего реже), а также установил минимальный и максимальный интервал соединения в 1.25 мс. В итоге скриптом на Python, использующим библиотеку bluepy, запущенным на ноутбуке под управление Linux получил 400 обновлений в секунду. Однако если сделать доступной для подписывания ещё одну характеристики и также обновлять её, то получается лишь 460 обновлений в секунду, а не 800.

Кто виноват скорее всего? Микроконтроллер 8051 не справляется или радиомодуль? Поможет ли переход на NRF51822? Там всё же ARM + официально поддерживается 6 посылок за раз, а не 4.

Re: BLE и передача потока данных

Добавлено: Пн фев 13, 2017 18:10:42
Ser60
Не понял насчёт 1.5мс, т.к. минимальный интервал соединения, согласно характеристикам BLE-4, всего 7.5мс. Посмотрите эту статью для информации. Вот ещё конкретный пример достижения 260 kbps через GATT и L2CAP. Правда, это для другого BLE модуля.

Кто виноват - скорее всего каждый понемногу, включая библиотеку на компе. В основном, возможно, что именно она самая неповоротливая, но я с ней не работал, поэтому утверждать наверняка не берусь. ARM или не ARM в смысле обработки событий самого стека особого значения не имеет. Однако 6 пакетов за раз вместо 4 скорости, естественно, прибавит.