• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Постоянная загрузка данных.

ART_HA

Member
Здравствуйте.
Прошу совета.
Требуется постоянная передача одной переменной на ПК или в андроид.
Рабочим вариантом является создание HTTP сервера на ESP и периодический опрос его с браузера компа или смартфона.
Но во-первых, желательно опрашивать ESP чаще, чем раз в секунду, а во-вторых, уж больно все получается громоздко из-за всего лишь одного числового значения.
Неужели нет вариантов попроще?
 

tretyakov_sa

Moderator
Команда форума
Сокет сервер на ESP. Сокет клиент на ПК или android или другая ESP с экраном и тд. Если к серверу есть подключение передаем данные тогда когда они изменились, если подключения к серверу нет ничего не передаем.
 

nikolz

Well-known member
Здравствуйте.
Прошу совета.
Требуется постоянная передача одной переменной на ПК или в андроид.
Рабочим вариантом является создание HTTP сервера на ESP и периодический опрос его с браузера компа или смартфона.
Но во-первых, желательно опрашивать ESP чаще, чем раз в секунду, а во-вторых, уж больно все получается громоздко из-за всего лишь одного числового значения.
Неужели нет вариантов попроще?
Делал следующие варианты:
--------------
Вариант 1:
На компе ставите UDP сервер, (работает роутер) который следит за заданным портом.
На луа это примерно 5 строк текста.
На ESP ставите UDP клиент, который в бродкасте шлет на порт сервера сообщения.
Минимальное время не измерял.
Но если ESP отправлять спать , то минимальное интервал составит 0.3 сек.
Если спать не отправлять, то очевидно меньше.
---------------------
Вариант 2:
Без роутеров.
берем две ESP в режиме ESP-NOW.
Одна на компе (смартфоне).
Вторая - где угодно.
Примеры есть в документации на SDK.
Примерно строк 100 на СИ.
Раз 10 в секунду без проблем
------------------------
Но полагаю, что передавать очень часто сырые данные это плохая идея. Надо делать обработку на ESP а не гонять тупо данные забивая эфир.
 

ART_HA

Member
Спасибо.
Правильно ли я понял, что моя задача может быть решена двумя способами:
1. Вместо того, чтобы на ESP поставить сервер и с браузера компа посылать с него информацию через запросы, предлагается сервер поставить на комп и с ESP слать на него информацию "по расписанию" ESP?
2. Можно ли для данного случая представить себе ESP-NOW как систему из двух отдельных ESP, постоянно связанных между собой по радиоканалу, при этом один ESP отсылает данные, а второй принимает их и по проводу отдает в комп например по RS232?
 

tretyakov_sa

Moderator
Команда форума
Спасибо.
Правильно ли я понял, что моя задача может быть решена двумя способами:
1. Вместо того, чтобы на ESP поставить сервер и с браузера компа посылать с него информацию через запросы, предлагается сервер поставить на комп и с ESP слать на него информацию "по расписанию" ESP?
2. Можно ли для данного случая представить себе ESP-NOW как систему из двух отдельных ESP, постоянно связанных между собой по радиоканалу, при этом один ESP отсылает данные, а второй принимает их и по проводу отдает в комп например по RS232?
Вы можете и не выключать сервер. В этом случае вам не потребуется никакое дополнительное программное обеспечение ни на компьютере ни на телефоне. Браузер и все.
Если использовать ESP-NOW то вы действительно можете связать 2 esp без роутеров, но вот как вы реализуете интерфейс с ПК или adroid? Это создаст дополнительные задачи.
 

ART_HA

Member
Спасибо, Сергей.
Я уже однажды воспользовался Вашим: https://esp8266-arduinoide.ru/step2-webserver/
Всё получилось очень просто и удачно, сейчас коробочка на испытаниях.
Однако на этот раз из-за ограниченности ардуино мне придется перейти на: Михаил Григорьев
а у него в примерах websocket почему-то не просматривается.
Буду думать...
 

ART_HA

Member
Однако вижу такой выход из создавшегося положения.
Использовать наработку с WebSocket Сергея Третьякова, включив в ардуину нужные мне функции из ESP8266_NONOS_SDK-3.0.4
По крайней мере с помощью предварительных танцев с бубнами мне удалось добиться ошибок компиляции.
Проверка на физическом ESP8266 будет позже, когда придут заказанные WiFi Wemos D1 mini, так как имеющаяся находится в коробочке на испытаниях и вернется не скоро.
Всем огромное спасибо за ценные советы,
ИМХО толковый форум.
 

pvvx

Активный участник сообщества
Если использовать ESP-NOW то вы действительно можете связать 2 esp без роутеров, но вот как вы реализуете интерфейс с ПК или adroid? Это создаст дополнительные задачи.
Все платки с ESP8266 имеют USB-COM порт. Браузер без проблем работает с COM портами (включая и Android), или вообще с любым USB.
WebSocket будет так-себе решением такой задачи. Не далеко от HTTP-Web.
Самый простой способ задачи посылки пару байт на сегодня предоставляет BLE. Он для этого и создан.
 

tretyakov_sa

Moderator
Команда форума
Вопрос в теме к
Здравствуйте.
Прошу совета.
Требуется постоянная передача одной переменной на ПК или в андроид.
Я вам дал пример как это можно сделать используя одну esp подключенную к сети или в режиме работы точки доступа.
Подключили перешли по адресу в браузере и получили живые значения. Зачем USB-com зачем терминалы?
Вы не рассказали куда эти данные потом будите передавать. Число на экране видите и ответ на ваш вопрос получен. Какая разница в браузере вы видите число или в программе терминал?
 

ART_HA

Member
Я вам дал пример как это можно сделать используя одну esp подключенную к сети или в режиме работы точки доступа.
Очень даже хороший пример, и, судя по предыдущему опыту пользования Вашими примерами, наверняка работоспособный. Можно смело сказать, что Вы меня выручили.
Зачем USB-com зачем терминалы?
Этот вариант мною виделся при использовании ESP-NOW. То есть я так его понял для решения моей задачи - второй ESP принимает информацию от первого и конвертирует её в RS232 для терминала компа.
Вы не рассказали куда эти данные потом будите передавать.
Никуда. Числа на экране более чем достаточно. Проблема была в том, что я не мог найти способа, чтобы эта информация могла меняться автоматически, т.е. без запроса приемника, и к тому же чаще, чем раз в секунду. Причем ненамного чаще.
Какая разница в браузере вы видите число или в программе терминал?
Насколько я понимаю, браузер позволяет оформить представление это числа. И хотя в данном случае это не имеет значения, ИМХО если есть возможность сделать лучше, грех не воспользоваться этой возможностью.
 

pvvx

Активный участник сообщества
Простейшая :) (>200 килобайт в сек) передача данных через Websocket ("чаще, чем раз в секунду." :))

Или простейшее (>100 килобайт в сек) чтение adc c платки JDY-10 c BLE за 80 руб через его всторенный USB-COM:
 

pvvx

Активный участник сообщества
Нельзя на любом ESP в Arduino делать AJAX чаще чем один раз в секунду. Иначе полностью нарушатся сетевые нормативы TCP. У ESP нет памяти для хранения структур TCP соединений перешедших в состояние TIME_WAIT (а они обязательно появятся при работе через некоторые прокси) – всё обрезано, т.к. Arduino не дружит ни с какими стандартами, а Ардуинщикам на всё наплевать, тем более на внешнее коммуникационное оборудование…
 

ART_HA

Member
Нельзя на любом ESP в Arduino делать AJAX чаще чем один раз в секунду.
Ну вот поэтому я и жду прихода заказанных ESP8266, чтобы выяснить практические негативные последствия получения информации с ESP8266 чаще, чем раз в секунду. Тем более, что это будет не единственное нарушение рекомендованных изготовителем правил применения ESP8266. :)
 

ART_HA

Member
ESP8266 пришли, и испытания показали, что вышеупомянутый проект С. Третьякова работает. Мало того, он оказался исключительно удобен, т.к. почти не потребовал модификации.
Но есть вопрос: спустя некоторое время после запуска сеанса наблюдается прекращение передачи данных с ESP8266 в браузер, и обновление страницы не всегда помогает. Это наблюдается и при "штатном" графике - раз в секунду. С чем это может быть связано?
 

pvvx

Активный участник сообщества
Но есть вопрос: спустя некоторое время после запуска сеанса наблюдается прекращение передачи данных с ESP8266 в браузер, и обновление страницы не всегда помогает. Это наблюдается и при "штатном" графике - раз в секунду. С чем это может быть связано?
Точнее технически описывайте -
какой метод получения данных? AJAX, websockets, HTTP/socket Keep-Alive, ...
WiFi к примеру использует смену ключа шифрования (время смены устанавливается в роутере) и на ESP8266 это иногда не очень хорошо отражается...
И ещё куча вариантов возможных причин...
 

pvvx

Активный участник сообщества
Можно погадать, но обычно детские примеры на AJAX построены на таймере в js. Они не смотрят пришел ли ответ и посылают новый запрос.... :) Да и таймер в js может менять ход времени если страница не активна.
 
Сверху Снизу