LINUX.ORG.RU

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

 


0

1

Как я уже говорил в предыдущей теме, я хочу сделать BLE устройство, которое будет передавать данные с датчика. Я тут немного подумал и понял, что наврал. На самом деле мне нужно передавать 24 кбайт/сек (24 байта * 1000 Гц).

Это вообще реально с BLE? Если нет, то сколько получится передать, если между устройствами будет не больше пары метров?

И в какую сторону копать? Как реализовать подобный протокол? Сделать кучу характеристик с данными за последние несколько десятков миллисекунд? Или как?

★★★★★

Это вообще реально с BLE?

Максимальная скорость BLE составляет 1 Мбит/с с пропускной способностью сети 260 Кбит/с. ©

quickquest ★★★★★
()

Недавно вышел новый стандарт BLE 5.0 в котором скорость увеличили до 4Мбит. Nordic Semiconductors выпустило новую версию своего чипа nRF52400 которая заявлена как BLE 5.0 Ready и DevKit для разработчиков, стоимость гуманная. Можно попробовать на нем.

Есть еще TI и Dialogic, но там много проприетарщины и боли с ИДЕ и либами.

pitman
()
Ответ на: комментарий от KivApple

Тут все печально. Пока максимум что видел это BLE 4.2. Обратная совместимость должна быть, а со временем и хосты с 5.0 появятся. Многие конторы пилят под BLE расширения которые потом включаются в стандарт. Уже есть пока нестандартные решения Voice over BLE.

pitman
()

Пока предварительные результаты опытов с CC2541:

1) IAR IDE ужасна. Про компилятор ничего не говорю, может он и хороший, но IDE ужасна. Окно поиска по тексту - стандартное виндовое и закрывается после каждого нажатия Find Next (а с чего вы взяли, что первое же совпадение будет искомым?). Нельзя нажать Ctrl и щёлкнуть по имени, опция Find Declaration есть, но только через контекстное меню. И ещё вагон и маленькая тележка вещей, которые есть в любой платной или бесплатной IDE (Qt Creator, CLion), а тут либо отсутствуют, либо реализованы через одно место.

2) Открыл стандартный пример SimpleBLEPeripheral и изменил минимальный интервал соединения до 1 (это вроде как 1.25 мс). Заодно сделал, чтобы он обновлял значение характеристики максимально часто (типа каждую 1 мс, но думаю, что в реальности получается реже).

3) Обнаружил, что QBluetooth глючит, поэтому был вынужден написать простой скрипт на bluepy, который находит устройство, подписывается на обновления его характеристики и считает сколько обновлений в секунду получил.

4) Получил в итоге 4 обновления в секунду, потому что bluepy не умеет менять интервал соединения. В итоге решил проблему тем, что прописал на устройстве единицей не только минимальный, но и максимальный интервал соединения.

5) Получил 400 обновлений в секунду.

6) Продолжил корёжить SimpleBLEPeripheral - теперь можно подписываться на 3 характеристики и они все изменяются каждую миллисекунду (на самом деле скорее всего реже).

7) Получил 460 обновлений в секунду.

Выводы. Ну... чисто теоретически получается интервал соединений 2.5 мс. При 6 посылках за раз и 20 байтах каждой посылки получается 48 КБайт/сек. Это норм для моих задач. Но это всё теория. Реально CC2541 умеет только 4 посылки за раз, плюс судя по всему не осилил даже 3 посылки за раз (после увеличения числа характеристик в 3 раза скорость не возросла в 3 раза). К тому же они были однобайтовые.

С другой стороны я заказал NRF51822. Там будет ARM (прощай IAR! я скомпилировал один из стандартных примеров с помощью простого make и arm-none-eabi-gcc) + он точно умеет 6 посылок за раз. Вопрос в том, во что я упираюсь - в производительность CC2451 или в радиомодуль.

KivApple ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.