Шлюз Bluetooth Low Energy (BLE) - MQTT

Здесь описывается рабочий способ, как сделать устройство которое выполняет связь между устройством Bluetooth с низким энергопотреблением (BLE) и MQTT в обоих направлениях. Но я только использовал в одном направлении от BLE к MQTT и реализовывал завершение проекта "Вывод данных с датчика сердечного ритма Coospo H8" по которому не удалось методами Flprog сделать такое устройство https://forum.flprog.ru/viewtopic.php?f=242&t=8372&p=119923#p119923. Верней у меня получилось наполовину. Только принимать данные с датчика пульса и отправлять в Uart, а возможность сделать MQTT не увенчалась успехом, потому что в итоговом исполнении в программе были какие-то ошибки.

Ответить
tol123
Рядовой
Сообщения: 58
Зарегистрирован: 16.07.2021{, 11:34}
Репутация: 7
Имя: Anatoly

Шлюз Bluetooth Low Energy (BLE) - MQTT

#1

Сообщение tol123 » 10.04.2023{, 12:11}

Итак что нужно.
Сначала вам нужно будет установить Espressif IoT Development Framework в Visual Studio Code согласно описанию по установке непосредственного кода по ссылке (https://github.com/shmuelzon/esp32-ble2mqtt) который будем устанавливать.
Качаем и открываем проект, редактируем файл config.json в папке data так, как вам надо и прошиваем ESP 32.
Скину свой вариант, по нему можно сделать под свои нужды.
Только я не мог закачать с расширение config.json. Так что переименуйте config.txt на config.json.
Опишу в настройках файла:
hostname":"ble_mqtt" - это как будет называться устройство.
ssid","password понятно логин и пароль wifi. "eap" Данные по защите сети. server - данные по mqtt "host":"ай пи адрес с сервером mqtt , "port":"1883", "username" - логин "password" - пароль для входа в mqtt, "client_id" - имя устройства esp32 в mqtt.
whitelist":[ "ff:b9:75:11:b3:87" - это мак адрес устройства блютуз(в моем случае это пульсометр). если его не указать , то будут приходить широковещательные данные со всех устройств в области досегания esp 32. Его (мак адрес) и другие данные для настройки можно посмотреть в приложении в телефоне типа nRF Connect Mobile или nRF toolbox (если ваш телефон поддерживает подключение к такому устройству).
Что значат остальные настройки:
services":{
"definitions":{
"0000180d-0000-1000-8000-00805f9b34fb":{ - тот сервис UUID который вы можете увидеть подключившись к блютус устройству через телефон.
"name":"Heart Rate service", - то как у вас будет называться топик
characteristics":{
"definitions":{
"00002a37-0000-1000-8000-00805f9b34fb":{ - это подраздел сервиса UUID
"name":"Heart Rate Measurement", - как он называется и в топике будет приходить это.
"whitelist":[
"00002a37-0000-1000-8000-00805f9b34fb" - это прописываем "белый лист" то , что будем пропускать , а остальное игнорировать то, какие характеристики нужны.
Дальше можно их использовать в Node-red (на телефоне или на компьютере).
У меня данные приходят с пульсометра который я описал в (viewtopic.php?f=242&t=8372&p=119923#p119923) в виде строки "22,67,88,3" иногда "22,67,87,3,87,3" . 22 это настройки (приходит когда датчик передает данные, 6 - 0110 а потом 4 - 0100 приходят вместо 22 если датчик убрали от тела и данные не передаются ) можно посмотреть https://github.com/oesmith/gatt-xml найдя описание как и что значат число 22 это 00 01 0110 в двоичтой системе, 00 бит формата UINT8 или UIN16, 01 - Биты состояния контакта датчика, 01 Бит состояния израсходованной энергии, 10 Бит интервала RR (иногда, когда пульс учащается то появляется строка "22,67,87,3,87,3" и 87,3 эти два числа сообщают о интервале RR, но их нужно получить). (В первых числах я разобрался в третьем 88,3 не совсем). Затем, чтобы получить RR интервал из чисел нужно 87,3 нужно перевести 3 и 87 в двоичную систему и записать вместе типа это число должно состоять из двух UINT8, а именно UINT8 числа 87 - 01010111 и UINT8 числа 3 - 00000011 и причем записать надо сначала 3, а потом 87 -0000001101010111 и получим 855 и надо поделить его на 1024 получим 0,834 секунды -длительность RR интервала.
В Node-red мне только удалось спарсить количество ударов в минуту, а хотелось бы и rr интервал получить. Хоть мне помог chart gpt в telegram, но там ограниченное число запросов и получить rr интервал пока не удалось. Если кто сможет получить или подскажет код или ноды для получения rr интервала скажу спасибо. Простите что некототко. Код для Node-red тоже в txt формате, что-о сайт не грузит json.
Если кто сможет допилить viewtopic.php?f=242&t=8372&p=119923#p119923 и приделать MQTT к в среде Flprog для esp 32 будет здорово, и не нужны будут эти сложности.
Все данные с устройства esp 32 можно получить по топику #
ff:b9:75:11:b3:87/Heart Rate service/Heart Rate Measurement - это топик (Heart Rate service и Heart Rate Measurement это в настройках указывали). А если отправить MQTT с приставкой /Get приставлять вконец ff:b9:75:11:b3:87/Heart Rate service/Heart Rate Measurement/Get, то можно получать характеристику ( я пронимаю это для тех данных, которые непостоянно не приходят и которые нужно будет запрашивать типа расстояния, но это надо проверить). А /Set - для установки чего-либо, если устройство может принимать данные на определенном сервисе.
Ну и для чего все это. Можно прикрутить аудио файл к Node-redи при превышении определенного уровня сердцебиения сообщать об этом и снижать нагрузку на сердце. По rr интервалу в спокойном положении "не напряжном" можно судить как тело реагирует на после нагрузочное состояние. И делать выводы...
К тому еще можно расстояние до устройства можно получать и тоже как-то использовать в домашней автоматизации.
Вложения
config.txt
(1.49 КБ) 12 скачиваний
код для node-red.txt
(4.03 КБ) 13 скачиваний

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Шлюз Bluetooth Low Energy (BLE) - MQTT

#2

Сообщение Rovki » 10.04.2023{, 16:11}

А где тут ФЛПРОГ ?
Электронщик до мозга костей и не только

tol123
Рядовой
Сообщения: 58
Зарегистрирован: 16.07.2021{, 11:34}
Репутация: 7
Имя: Anatoly

Шлюз Bluetooth Low Energy (BLE) - MQTT

#3

Сообщение tol123 » 11.04.2023{, 07:11}

Rovki писал(а):
10.04.2023{, 16:11}
А где тут ФЛПРОГ ?
Нету его, не получилось приделать MQTT к BLE здесь viewtopic.php?f=242&t=8372&p=119923#p119923.
Здесь, как альтернатива, так как не получилось в FLprog.

tol123
Рядовой
Сообщения: 58
Зарегистрирован: 16.07.2021{, 11:34}
Репутация: 7
Имя: Anatoly

Шлюз Bluetooth Low Energy (BLE) - MQTT

#4

Сообщение tol123 » 12.04.2023{, 15:34}

Получилось вывести, Число ударов в минуту, rr1, rr2 и все га графики. Пример для node-red в файле txt
Вложения
flows (4).txt
(26.7 КБ) 11 скачиваний

Ответить

Вернуться в «ESP32»