Доброго времени суток!
Для опыта и практики создаю свою систему сбора данных и управление своими устройствами. Сервер я пишу на Java + Vue. Для связи между устройствами выбор пал на протокол BLE и в частности esp32c3 и nrf52 для батарейного питания. На данном этапе у меня в тестовом режиме работают 2 nrf52832 + BME280(температура, влажность, измерения по запросу), данные отсылаются раз в 10с по BLE рекламным пакетом, данные записаны в manufacture date. Одна NRF52 на батарейке CR2032 отработала в таком режиме дома 4-5 месяцев, вторая с батарейкой LiFePO4(600мА) с 28 октября 2022г работает по сей день на улице.
На ESP32 решил взять библиотеку NimBLE так как она кушает меньше ресурсов, чем стандартная на стеке bludroid.
И стоит вопрос организации логики работы шлюза, буду рад дельным советам, может у кого есть личный опыт в этом деле, буду рад помощи!
Батарейные устройства, которые не критичны к данным, отправляют данные в рекламном пакете, очень быстрый прием данных.
Шлюз постоянно сканирует эфир и при получении данных отправляет их по MQTT (шлюз/имя_устройства/mac_адрес/manufacture_data), а сервер, подписан на конкретные топики, уже знает как парсить те или иные данные ориентируясь на имя устройства.
И вот в чем вопрос, как организовать связь, когда устройство хочет передать данные на шлюз и когда на шлюз приходят данные, как их передать на устройство?!
Мои мнения на этот счет:
- Устройство → шлюз : Устройство(клиент) хранит в памяти или ищет Шлюз, подключается к нему и в характеристику записывает данные.
, шлюз эти данные передает по mqtt. Либо через рекламные пакеты осуществлять передачу, но тут нет контроля доставки данных до шлюза. Как будет вести себя шлюз, если несколько устройств одновременно захотят записать данные в характеристику? Или на уровне протокола esp сама все разрулит и сможет принять несколько подключений и одновременную запись в одну характеристику. - Шлюх → устройство : И примерно тот же алгоритм, для поиска и записи данных в устройство! Через рекламу или характеристику?!