Bluetooth-плоттер ESP32. Как такое реализовать?

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
Хочу реализовать Bluetooth плоттер с функцией последующего сохранения данных в какой-нибудь табличный формат (.csv). Часто сталкиваюсь с тем, что мне нужно работать с данными с датчиков - причём в реальном времени. Порылся, погуглил. Максимально похожее, что нашёл это получение данных на какой-нибудь последовательный Bluetooth терминал на телефон, где просто "приходят циферки столбом". Но мне бы хотелось выводить графики. В идеале несколько - примерно так, как построено в teleplot у platformIO или в плоттере от ардуино IDE.(но очень бы хотелось как в телеплот).

Может есть какие-то приложения, которые принимают данные по блютузу и выводят графики(не получилось найти)?
Или есть какие-то решения иные (простые) для выполнения данной задачи?

Буду рад помощи в этом вопросе)
 
Изменено:

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@Брякомякс, Wi-Fi не подойдёт. Мне нужно получать данные в реальном времени напрямую сразу в телефон, а не через какой-либо сервер с задержкой в несколько секунд. Я, банально, буду находиться в поле, где кроме трактора ничего не будет, поэтому тут только блютуз или что-то с подъёмом сайта на есп в локальной сети с телефоном, но это слишком муторно(про сайт) - хочется просто передавать несколько переменных.
 

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
90
20
Почему секунд-то? Милисекунд?
роутер с банкасилой взять реально? В поле инет есть?

можно тогда в любое приложение на телефоне ака mqtt dashboard.
наверно, можно найти и с возможность ведения лога.

А частота опроса какая? сколько раз в секунду?


я просто что-то реализовал у себя в рамках умного дома, но там опрос раз в несколько минут.
Раз в секунду можно сделать без особых изворотов, может даже несколько раз.
 

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@Брякомякс, Нет в поле интернета))). И с собой в тракторе везти роутер - затея интересная, конечно, но труднореализуемая и слишком замороченная, чтобы юзать MQTT, когда есть под рукой блютуз. Это хорошее решение для IoT, но не для сельхоз. техники.

@Брякомякс, Частота опроса каждую миллисекунду.
Upd.
(+-20мс) чуть больше, наврал. Суть в том, что в режиме реального времени - чем быстрее, тем лучше)
 

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
90
20
Беспроводной осциллограф)) Вообще есть сомнения, что он 1 кГц переварит. Хз.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
а собственно чем сам телеплот-то неугодил? Ноутбук с собой не предусмотрен или нужно именно на телефоне тыкаться?
Тогда надо начинать с поиска приложения на телефон - первая же ссылка в гугле Serialize Bluetooth-Plotter, бесплатно и без СМС.
 

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@vortigont, Потыкаю приложуху, спасибо. Ноутбук с собой не предусмотрен.
UPD.

Приложение говорит, что работает с HC-05. Не уверен, что будет работать с ESP32. Но потыкаю ещё
 

poty

★★★★★★✩
19 Фев 2020
3,154
926
@DakonS, на ESP32 вполне можно поднять собственную точку доступа и использовать его без WiFi роутера.
 
  • Лойс +1
Реакции: Vaqtincha

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@Старик Похабыч, @poty, Можно, но это несколько сложнее работать с get запросами и прочим, чем просто отправлять данные в монитор порта. Да и вопрос у меня касательно именно блютуз, а не MQTT, серверов и прочего.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
Приложение говорит, что работает с HC-05. Не уверен, что будет работать с ESP32
ему нужен сериал порт через БТ, есп32 так умеет без проблем.

Можно еще запускать локальнут точку доступа, открывать в браузере и данные отдавать через вебсокет. Разных "живых графиков" на яваскрипте навалом. Как пример можете мой проект энергометра глянуть.
 
  • Лойс +1
Реакции: DakonS

Старик Похабыч

★★★★★★★
14 Авг 2019
4,222
1,291
Москва
@DakonS, не нужно делать GET MQTT и прочей сторонней лабуды. Это будет долго. Протокол UDP и прямое общение платы с телефоном,может даже и быстрее чем блюпуп будте. Я так соединял и получал приличную скорость без потерь данных.
 
  • Лойс +1
Реакции: Брякомякс

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
90
20
А чем можно на компе логгироватб/рисовать данные, полученные через UDP?
Хочу по-быстрому проверить на Тасмоте.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,222
1,291
Москва
Кто чем может, питон это умеет точно, я делал на PascalABC
UPD
Вот вспомнил! еще делал на дельфи какой то приложение для андроида работающее по тому же принципу, но тут уже передавалось все с телефона на плату, и только при изменении данных. Но тоже вполне рабочий вариант.
 
Изменено:
  • Лойс +1
Реакции: Брякомякс

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@vortigont, А можно ли как-то телеплот на телефоне запустить и законнектить с есп?))

@vortigont, Я с яваскриптом вообще не знаком, думаю проблематично будет такое)). Но буду иметь в виду это решение

@Старик Похабыч, Мысля интересная, конечно. Для будущего развития проекта можно будет такое реализовать, думаю
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
537
Saint-Petersburg, Russia
А можно ли как-то телеплот на телефоне запустить и законнектить с есп?))
я про телеплот от вас узнал ) спасибо )
насчет запустить на мобиле, технически с этим проблем нет, нужен node js движек. Но в готовом виде как это сделать я знаю, нужды не было.
 

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
Вдруг кому будет интересно. Реализовал я всё это по другому.

Я поднял node.js сервер на телефоне через приложуху Termux. Поднял я сервер teleplot. Подключился на ESP32 к локальной точке доступа, которую раздал с телефона.

С ESP я отправлял UDP-пакеты на нужный IP. И у меня получилось отличный беспроводной плоттер реального времени. Вдруг у кого такая же проблема будет - пользуйтесь). Для того, чтобы в полях гонять на тракторе, где нет инета и ноутбук нормально не поставить - самое то.
 
  • Лойс +1
Реакции: Wan-Derer и vortigont

smaglyuk

✩✩✩✩✩✩✩
23 Окт 2022
8
1
Оформи код соответствующим тэгом
Может я что то не понимаю,а почему не сделать на esp раздачу через асинхронный вебсервер. Подключаешься на телефоне к точки доступа на процессоре,а он отдает нужные данные.

C++:
// для создания точки доступа

/*  WiFi.softAPConfig(local_IP, gateway, subnet);

  WiFi.softAP(ssid, password);

  //WiFi.softAP(ssid);

  delay(100); */





// Подключаемся к сети wi-fi используя данные

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);

    Serial.println("Подключились к сети WiFi..");

  }

  Serial.println(WiFi.localIP());

// Посылает браузеру страницу index.html

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){

    request->send(SPIFFS, "/index.html", "text/html");

  });

  //index.html  имеет в заголовке ссылку на файл стилей

  // он запрашивает у сервера файл находящийся по адресу URL для файла «style.css»:

  server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){

    request->send(SPIFFS, "/style.css", "text/css");

  });

// URL для файла температуры:

  server.on("/webpage", HTTP_GET, [](AsyncWebServerRequest *request){

    request->send(200,  "text/html", get_temperetur());

  });

// URL для поля напряжения сети:

  server.on("/LineVoltage", HTTP_GET, [](AsyncWebServerRequest *request){

    request->send(200,  "text/html", CurentValueVoltage);

    //request->send(200,  "text/html", get_voltage());

  });

server.begin();

HTML:
<!-- Скрипт выполняет постоянную перезагрузку элемента "webpage" на странице -->

        <script>

            setInterval(loadDoc,5000);       

            function loadDoc() {

                <!-- вся информация здесь https://ru.wikipedia.org/wiki/XMLHttpRequest -->

                var xhttp = new XMLHttpRequest();  // 1. Создаём новый объект XMLHttpRequest

                xhttp.onreadystatechange = function() {

                    if (this.readyState == 4 && this.status == 200) {

                        document.getElementById("webpage").innerHTML =this.responseText};

                    }

                <!-- open(method, URL, async, userName, password)    Определяет метод, URL и другие опциональные параметры запроса; -->

                <!-- параметр async определяет, происходит ли работа в асинхронном режиме. -->

                <!-- Последние два параметра необязательны. -->

                xhttp.open("GET","webpage", true);

                <!-- send(content)    Отправляет запрос на сервер. -->

                xhttp.send();

                <!-- запрос напряжения сети -->

              

                var voltagehttp = new XMLHttpRequest();  // 1. Создаём новый объект XMLHttpRequest

                voltagehttp.onreadystatechange = function() {

                    if (this.readyState == 4 && this.status == 200) {document.getElementById("LineVoltage").innerHTML =this.responseText};

                }

                voltagehttp.open("GET","LineVoltage", true);

                voltagehttp.send();         

            }

        </script>
 
Изменено:

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@smaglyuk, Потому что мне нужен удобный способ мониторинга данных. Видеть графики, иметь возможность их сохранить, комбинировать и т.п.

Но во всяком случае я неделю уже как приехал с испытаний в полях - и обнаружил, что там глушат связь🤡. По итогу мониторинг там не работал :).
 

smaglyuk

✩✩✩✩✩✩✩
23 Окт 2022
8
1
@DakonS, а чем канал синезубого отличается от wifi? мастером сделать esp и никакая глушилка не справиться, расстояния от ведущего и ведомого очень маленькие.
 

poty

★★★★★★✩
19 Фев 2020
3,154
926

@DakonS, в каких это полях глушат связь? Да так, чтобы на маленьком расстоянии связи не было? Что-то какая-то ерунда получается.
Мониторинг, скорее, не снимался по причине неправильной настройки или ошибках в ПО, никак не из-за связи.
 

DakonS

✩✩✩✩✩✩✩
2 Фев 2023
32
5
@poty, В полях недалеко от Ростова-на-Дону. Геополитическая повестка, здравствуйте). Я больше скажу. GPS там не работает и подавно, а сигнал ГЛОНАСС и вовсе показывает несколько иную геопозицию. Интернет на телефоне в том числе не работает, а телефонная связь с большим трудом.