• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

spectra

New member
Доброго времени суток!

Требуется снимать данные с нескольких (2-5 шт.) сенсоров.
Данные будут передаваться пакетами по 12 байт с частотой передачи 10 Гц.
Вычитал что можно передавать небольшие пакеты с данными по рекламному BLE каналу.
Вопрос - при асинхронной передаче данных по рекламному каналу не будут ли пакеты создавать коллизии и мешать друг другу?
 

pvvx

Активный участник сообщества
Вопрос - при асинхронной передаче данных по рекламному каналу не будут ли пакеты создавать коллизии и мешать друг другу?
Будут.
Кроме того в эфире есть помехи, а так-же чипы BT/BLE с кривописанным кодом и кривые BT/BLE чипы.

5 шт сенсоров с 10-ю рекламами в сек - это 50 шт реклам в сек (* 3 канала = 150 передач). И не все USB BT адаптеры такое вытянут. Только некоторые, работающие на USB2.0 High-Speed (большинство работает на Full-Speed и имеют тормозной код).
 

pvvx

Активный участник сообщества
И работе BLE мешает WiFi - от этого у ESP32 с BLE полный ужас - сплошные потери приема рекламных пакетов BLE...
 

spectra

New member
Значит мое опасение оправдалось(
В общем-то потеря до 30% пакетов допускается.
Кроме BLE других вариантов нет, т.к. в качестве приемника будет смартфон.
Для передачи по рекламным каналам используется всего 3 фиксированные частоты, что существенно увеличивает вероятность патери.
Будет ли лучше если не использовать рекламные каналы, а передавать через BLE соединение в котором больше частот и есть подтверждение доставки?
 

pvvx

Активный участник сообщества
Будет ли лучше если не использовать рекламные каналы, а передавать через BLE соединение в котором больше частот и есть подтверждение доставки?
По соединению - имеется ограничение кол-ва одновременно подключенных устройств. По Win-де это где-то было описано - что-то около 5 соединений. Но возможна зависимость от драйверов и адаптера BT.
По Android и iOS подробной информации не нашел. Поиск дает типа такого
https://stackoverflow.com/questions...concurrent-ble-connections-android-m-can-have
А в реалии надо глядеть ограничения в константах исходников конкретной версии Android...
 

pvvx

Активный участник сообщества
Есть другие варианты как принимать множество рекламных BLE устройств.
Лучшее решение лежит в области специального адаптера, построенного на чипе BLE и передающего данные по Ethernet проводу. Но это слишком специфичное решение.
Упрошенное решение, которое пропускает какую-то не очень большую часть реклам можно строиться на дешевом BLE чипе. Он постоянно принимает рекламу, но в этот момент иcпользует BLE соединение с смартфоном или другим BT адаптером.
Проверенный пример такого решения - AdScanerTrg и подобные, описанные где-то на данном форуме...
Такое устройство у меня успешно принимает 25 внешних BLE датчиков. Потери не большие - до 10%, зависит от интенсивности поступления реклам в единицу времени, т.к. принятое ему надо успеть передать и на время этих транзакций канал приема занят...
Гораздо хуже, т.е. очень большое кол-во потерь, дают решения на одиночном SoC с одновременным WiFi соединением и BLE приемом реклам. Типа ESPHome - просто ужас (полные выпадения по несколько секунд и т.д.). Я не смог это использовать, хотя постоянно слежу за новыми версиями...
 

spectra

New member
Такое устройство у меня успешно принимает 25 внешних BLE датчиков. Потери не большие - до 10%, зависит от интенсивности поступления реклам в единицу времени, т.к. принятое ему надо успеть передать и на время этих транзакций канал приема занят...
25 это много, а с какой интенсивностью передаются данные?

Почитал про организацию рекламной передачи, она делится на два базовых вида - с соединением и без соединения с централью.
Рекламная передача с соединением используется для передачи информации бОльшего размера чем может уместиться в одном рекламном пакете. В этом случае определенно возникнет конкурентная проблема с несинхронной приемом/передачей.
В моем же случае может и прокатить, т.к. передаваемый объем информации умещается в одном рекламном пакете который можно передавать без соединения с централью.

Гораздо хуже, т.е. очень большое кол-во потерь, дают решения на одиночном SoC с одновременным WiFi соединением и BLE приемом реклам.
Совмещенные WiFi/BLE трансмиттеры является проблемой на стороне приема или передачи?
В качестве BLE передатчиков предполагаю использовать какие-нить недорогие модули например на базе чипов NRF52 или других...
 

pvvx

Активный участник сообщества
25 это много, а с какой интенсивностью передаются данные?
Пара LYWSD02MMC - 0.1 сек
USB-BT адаптер в компе (всегда годит BLE и MESH рекламу и при включении) - менее 0.1 сек
Разнообразные термометры с неоф. прошивкой - 2.5 сек
Разнообразные термометры с оф. прошивкой - 1..1.6 сек
При тесте в городе ещё захватывало какие-то Apple телевизор и другие устройства, вечно транслирующие рекламу с периодом в 50 мс.
И т.д.

В среднем данные в нужных рекламках меняются каждые 10 сек. AdScanerTrg по соединению передает только изменяющиеся данные из рекламы. Не полные кадры рекламы, а только блок с нужными данными. Но можно включить всё.
 

pvvx

Активный участник сообщества
Почитал про организацию рекламной передачи, она делится на два базовых вида - с соединением и без соединения с централью.
Что-то не то вычитали.
Рекламная передача с соединением используется для передачи информации бОльшего размера чем может уместиться в одном рекламном пакете. В этом случае определенно возникнет конкурентная проблема с несинхронной приемом/передачей.
В моем же случае может и прокатить, т.к. передаваемый объем информации умещается в одном рекламном пакете который можно передавать без соединения с централью.
C версии 5.0 есть расширенный формат рекламы. Там длина и модуляция (2М/LongRange:125K/250К/...) ничем не ограничена.
Но есть проблемс в реализации на смартфонах. Нет поддержки в старых и т.д. ....
Совмещенные WiFi/BLE трансмиттеры является проблемой на стороне приема или передачи?
На стороне приема. WiFi сигнал громкий и творит коллизии всем BLE/BT. Тупо затыкает АРУ.
И у SoC c WiFi долгое переключение RF части, да длительное время срабатывания АРУ у приемника.
По этому их антенны всегда разносят на как можно дальнее расстояние. А в одном Чипе - это бред.
 

pvvx

Активный участник сообщества
В качестве BLE передатчиков предполагаю использовать какие-нить недорогие модули например на базе чипов NRF52 или других...
У NRF52 бинарный ,блок-библиотека SoftDevice, подключаемая к вашей прошивке. И там подобие RTOS, да реализация постоянного приема реклам с одновременной работой устройства BLE будет иметь сложности из-за общих тормозов такого типа построения программной модели системы.
 

pvvx

Активный участник сообщества
Требуется снимать данные с нескольких (2-5 шт.) сенсоров.
Типичное время передачи устройством BLE рекламы по 3-м каналам - около 2..3 мс.
В итоге шустрый BLE сканер на одном канале может принимает максимум к 300 рекламных пакетов в сек.
При длине информационного тела рекламы в 31 байт - это 9300 байт в сек, плюс MAK и тип пакета.
Для типового HCI (интерфейса у адаптера и ОС) это дело сильно увеличивается на всякие доп. команды и заголовки. USB2.0 12Мбит/c не хватает :)
В итоге смартфон или BT-USB и прочие BT адаптеры принимают гораздо меньшее кол-во реклам в сек, чем нормальный BLE сканер (бывают и тупые BLE сканеры).
Данные будут передаваться пакетами по 12 байт с частотой передачи 10 Гц.
В рекламе должны быть заголовки блоков в спец формате. Плюс другие блоки, чтобы смартфон или другое типовое устройство поняло, что это BLE реклама, а не MESH и т.д.
 

pvvx

Активный участник сообщества
При правильном построении (учете описанного) ваша задача не является сложной.
Современный смартфон с Android спокойно примет данные в рекламах от ваших 5 датчиков. Тут важнее расстояние до них и уровень мощности их передатчика.
По поводу формата пакета рекламы - желательно изначально совместить с уже известными форматами для DIY устройств - https://bthome.io/
Такое сразу будет работать в разных "умных домах" и проще отладить-контролировать к примру в ble_monitor для HomeAssistant.
Можно попробовать и https://esphome.io/components/bluetooth_proxy.html
 

spectra

New member
Огромное спасибо за поддержку!
Если будет интересно, то поделюсь результатами экспериментов.

Что-то не то вычитали.
Читал тут

При длине информационного тела рекламы в 31 байт - это 9300 байт в сек, плюс MAK и тип пакета.
Максимальная длина рекламного пакета составляет - 31 байт.
Т.е. нам нужно отправить 5 пактов * 10 раз/сек * 31 байт = 1550 байт/сек т.е. 12400 бит/сек.
12.4 килобит/сек. в сущности мелочь.
Главная проблема похоже будет заключаться в том, что пакеты будут отправляться асинхронно с пяти передатчиков по фиксированным частотам + всевозможные внешние коллизии как Вы и говорили от BT и WiFi.
Но при такой объеме передаваемой информации все должно получиться.
Если я все правильно понял с форматом пакета, то мы идеально в него укладываемся.
Формат рекламного пакета:
  • Flags (0x01)
  • UUID16 (0x16)
  • MYDATA (0x12)
  • CRC (0X2)
 
Сверху Снизу