Arduino UNO и ESP-link

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Пт ноя 08, 2013 01:01:18

Сообщение melandr »

Добрый день!
Возник вопрос по использованию прошивки ESP-link в связке с Arduino UNO. На Arduino UNO используется библиотека EL-client. К Arduino UNO подключен датчик BME280. Arduino UNO подключен по UART к ESP8266. При старте происходит передача показаний датчика от Ардуино к ESP8266, а далее на ESP8266 поднят web-сервер с загруженной web-страницей. Сначала показания на странице обновляются, при открытой странице в браузере, но потом происходит завтык
Изображение
После перезапуска Arduino UNO через web-интерфейс, данные идут, но потом происходит завтык.
Изображение
Кто использовал данную прошивку для ESP8266? В какую сторону копать?
После обновления страницы данные начинают идти какое-то время.
Реклама
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

А потому что нечего заливать web-страницы во всякие ESP8266.
web-страницы надо заливать в Arduino UNO.
А ещё лучше хранить web-страницы на ПК... телефоне... и т.д.
А подключаться лучше по AJAX. Тогда не будет никаких затыков)) И сами страницы при каждом подключении не перегружаются.
Я так и делаю. Никаких затыков))
дом_2.jpg
(196.83 КБ) 335 скачиваний
Реклама
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Пт ноя 08, 2013 01:01:18

Сообщение melandr »

Ну страницу можно оставить и на сервере, я на роутере поднял ligthttpd. Просто не нашел документации по прошивке ESP-link вменяемой. А насчет загрузки web-страницы в Ардуино, то сомнительное удовольствие. Если не секрет, как реализовано взаимодействие и на чем на Вашем скриншоте, так сказать для общего развития.
Я так понимаю здесь тоже используется технология ajax
var loadVariables=function(){ajaxJson("GET",window.location.pathname+".json?reason=load",notifyResponse,function(){setTimeout(loadVariables,1000)
Так как данные на странице обновляются без нажатия кнопки "обновить"
ЗЫ: возможно есть какие-то ошибки в реализации либо прошивки ESP8266, либо библиотеки ESP-link
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Секретов никаких нет))
Сначала я хотел сделать так
схема_1.jpg
(196.87 КБ) 347 скачиваний
на обычных модулях... на меги128...
модули.jpg
(146.4 КБ) 288 скачиваний
или меги8...
1.jpg
(135.11 КБ) 293 скачивания
собрал несколько модулей... проверил как всё работает по AJAX... Нормально работает))
дом.jpg
(166.29 КБ) 312 скачиваний
Получился простенький сервер. Простое управление по Интернет... Сервер работает ещё и как файлообменник на простой флешке)) На этой же флешке можно хранить web-страницы.

Потом я передумал делать web-сервер. Для простого управления по Интернет web-сервер не нужен.
Потом переделал всё на Java.
melandr писал(а):var loadVariables=function(){ajaxJson("GET",window.location.pathname+".json?reason=load",notifyResponse,function(){setTimeout(loadVariables,1000)
Похоже на AJAX...
А чтоб точно это знать включаем анализатор и смотрим как всё работает.
Ethernet_Screenshot.jpg
(179.9 КБ) 319 скачиваний
После этого вопросов не будет))
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="roman.com",url="/forum/viewtopic.php?p=3864707#p3864707"]А потому что нечего заливать web-страницы во всякие ESP8266.
web-страницы надо заливать в Arduino UNO.[/uquote]
ESP8266 в разы быстрее и мощнее UNO.

И у ТС есть AJAX. На скринах тип запроса видно - xhr, это и есть т.н. AJAX (правильно XMLHttpRequest).

Добавлено after 35 seconds:
Зачем вам ардуино вообще? Ардуино ядро можно накатить сразу на ESP8266 и с него и юзать датчик. UNO не нужен.
Реклама
Вымогатель припоя
Сообщения: 580
Зарегистрирован: Пт ноя 08, 2013 01:01:18

Сообщение melandr »

На ESP-01 нет нужного количества пинов, зато есть выход в Интернет. На ардуино, или на ATmega32 можно получить необходимое количество входов, выходов, подключить кнопки, экран. А для резервного и удаленного управления юзать web-интерфейс. Подключив один датчик, это проба пера, как правильно организовать. А далее уже можно использовать на полную. Просто мониторя реализация вывода микроконтроллера в Интернет, показалось что ESP8266 будет поинтересней Ethernet модулей. Сам вэб-сервер можно поднять или на роутере или на малинке. Проблема как состыковать микроконтроллер с этим сервером. Как варианты видел использование AT-команд, использование MQTT, кастомные прошивки на ESP, NodeMCU. Либо самому писать вэб-интерфейс для ESP8266, используя ArduinoIDE.
Просто используемая прошивка ESP-link не особо документирована, необходимо смотреть исходники и разбираться с кодом. А там используется C++, шаблоны и т.д.
Выше были скрины из браузера, подключенного из внешней сети. Ниже скрин из браузера в домашней сети. Проработало дольше, но все равно произошел завтык. Хочется понять, где проблема. На стороне вэб-сервера или на стороне Аруино.
Изображение

Добавлено after 8 hours 17 minutes 38 seconds:
roman.com, А модули использовали готовые, соединив проводами? Или делали материнскую плату с разъемами IDC? Или полностью разрабатывали печатную плату под ATmega128?
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Возьмите на ESP-1, а ESP-12 и будет больше выводов. А с помощью pcf8574 можно еще добавить их. И тогда не надо будет гадать, где затык.
Как стыковать - зависит от задачи. Но если вы датчики планируете подключать, то для таких вещей соб-но MQTT и придумывался.
А сейчас вы спрашиваете слишком абстрактно. Откуда ж нам знать, что там у вас глючит в этой связке.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Да на обычной макетке спаял и соединил проводами... https://aliexpress.ru/item/32910834320. ... fd880b7f-3

Добавлено after 3 minutes 24 seconds:
ESP8266 и ESP32 это интересно... но мало документации и не видел нормального IDE. Всё через AT-команды... Это не то.
Надо качать даташит и писать всё самому. тогда всё будет гуд))
Поэтому лучше по проводам)) Ethernet проще и надёжней. Он не глючит))

Добавлено after 2 hours 7 minutes 27 seconds:
melandr писал(а):Просто мониторя реализация вывода микроконтроллера в Интернет, показалось что ESP8266 будет поинтересней Ethernet модулей. Сам вэб-сервер можно поднять или на роутере или на малинке.
Зачем вэб-сервер ? Вы делаете публичный сервер ? Хотите чтобы любой желающий из интернета мог подключиться к вашему серверу и управлял вашими устройствами ?

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

А зачем MQTT ? Обычно это сторонний сервис... И зачем издатель-подписчик ? А напрямую подключаться к своему серверу нельзя ? У Вас нет белого IP ?
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

ESP8266 и ESP32 это интересно... но мало документации и не видел нормального IDE. Всё через AT-команды... Это не то.
На ESP ставится прекрасно Arduino Core (о чем я писал выше) и работается точно также, как с Arduino любой при желании.
Поэтому лучше по проводам)) Ethernet проще и надёжней. Он не глючит))
Письмами почтой еще надежнее. Не выдумайте. Прекрасно WiFi работает и не нужно никаких гребанных проводов.
Я не передаю вэб-страницы по интернету.
Во-первых это не имеет смысла. Проще хранить вэб-страницы (особенно картинки - они большие по объёму) на ПК / телефоне.
Во-вторых это не безопасно. Не хочу чтобы любой желающий из интернета мог подключиться к моему серверу))
В-третьих я не хочу чтобы даже видели что именно я передаю по интернету)) Даже если кто-то перехватит мой трафик, то он просто увидит абсолютно бессмысленный набор байтов))

А зачем MQTT ? Обычно это сторонний сервис... И зачем издатель-подписчик ? А напрямую подключаться к своему серверу нельзя ? У Вас нет белого IP ?
Еще какие-то глупости от непонимания что и как работает.
Про пароли и шифрование ничего не слышали?
У меня 3ий год уже управлялка ус-ом лежит на публичном сервере в Интернете. Чтобы я с любого места мог управлять. Просто стоит пароль и HTTPS. Всё. Никто еще левый не залез.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Пишу немного на Ардуино... точнее пытаюсь)) Не важно. Всё равно не люблю Ардуино...
Подключить ESP к Ардуино и залить прошивку с АТ- командами не интересно... Я не люблю библиотеки. Они все глючные))
Вот если бы можно было бы работать с ESP как с обычной например АВР (с полным доступом ко всем блокам и регистрам через например машинные инструкции) то вот это было бы интересно... :roll:
NStorm писал(а):Про пароли и шифрование ничего не слышали?
Да что-то такое слышал...))
Сейчас использую блочное симметричное шифрование на одноразовых блокнотах - абсолютная криптографическая стойкость.))
NStorm писал(а):У меня 3ий год уже управлялка ус-ом лежит на публичном сервере в Интернете. Чтобы я с любого места мог управлять.
Тут два пороса... :roll:
А какое время отклика через публичный сервер ?
Допустим мне надо включить лампочку в доме. Сейчас у меня прямая связь с домом. Время реакции примерно равно... пингу))
А если делать через публичный сервер (с такой же малой задержкой) то тогда мне придётся непрерывно опрашивать публичный сервер ?
И сколько я сгенерирую трафика из дома... и с мобильного устройства ? Ну например за месяц ?))
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Вот если бы можно было бы работать с ESP как с обычной например АВР (с полным доступом ко всем блокам и регистрам через например машинные инструкции)
Через SDK и gcc можно писать "напрямик". Только полного ДШ нет, т.к. радиомодуль и wifi стек закрыты. Как и везде, в любом ус-ве с WiFi. Но писать без "библиотек" на голом bare meta вполне можно.

По остальному - мне не нужно быстрое время отклика. На деле меня хоть минута устроит. И трафик меня в 2020 году совсем не волнует. Но если нужно было бы, то есть Websockets. Там и отклики миллисекундные будут и трафика мало.
Вы как с луны свалились. Весь мир уже живет с облаками и IoT, а вас до сих пор трафик на это дело волнует.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

NStorm писал(а):трафик меня в 2020 году совсем не волнует. Но если нужно было бы, то есть Websockets. Там и отклики миллисекундные будут и трафика мало.
Websockets...
Да, ответ от публичного сервера через Websockets будет миллисекунды...
Помнится пытался делать Websockets.
Только...
Во-первых там помнится для защита от поддельных запросов надо вычислить значение MD5, а в последней версии бинарный хеш SHA-1... Класс))
Во-вторых как я понял надо поддерживать сокет всё время открытым. А для этого надо передавать данные (например пустые пакеты) или передавать типа всяких keep-alive.
Screenshot_1.jpg
(59.64 КБ) 258 скачиваний
Короче что-то надо передавать, а то NAT удалит сокет из списка (из кеша)... )) Придётся переподключаться...
Чисто интересно... а сколько NAT хранит в кеше запись о сокете... какой там тайм-аут ))
Браузер через каждые 40 сек передаёт keep-alive... ARP хранится в кеше 2 минуты. А NAT... фиг его знает... Можно проверить))

Короче, не нравятся мне ваши всякие Websockets. Проще просто по таймеру опрашивать публичный сервер. Так будет проще))
И лучше по UDP. Там нет всяких keep-alive))

А трафик меня не пугает. Больше пугает надёжность ваших всяких keep-alive.))

И вообще... надо всем переходить на IPv6 и не морочить людям голову... с вашими публичными серверами))

МTС (Россия) вроде как раздаёт своим абонентам белые IPv6 и даже с привязкой к номеру и вроде бесплатно. Надо уточнить...
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Я бы в 2020 году за трафик keep-alive вот не подумал бы даже переживать. Меньше пары мегабайт в сутки - и похер.
UDP можно, но Websockets стандартное решение, как и MQTT. И не требуют изобретений велосипедов.
NAT - настройка зависит сугубо от провайдера и его оборудования. В Linux обычно по умолчанию 5 суток вообще:
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
Но на всяких железных роутерах и коммутаторах L3+ может быть значительно меньше.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

5 суток это хорошо...))

На самом деле Websockets мне не нужен. У меня самодельный сервер и простое приложение на Java.
Оба они могут открыть обычный сокет по TCP и удерживать сокет открытым сколь угодно долго... при необходимости обмениваясь между собой данными...
Screenshot_2.jpg
(58.95 КБ) 226 скачиваний
Сокет закрывается по нажатию кнопочки...)) Или закрывается автоматом при открытии нового сокета... Тут вариантов много))
Screenshot_3.jpg
(93.59 КБ) 223 скачивания
Но меня больше интересует UDP. Он проще))

Последнее время по городу напихали кучу бесплатных Wi-Fi точек)) Идея в том чтоб гуляя по городу оставаться всегда на связи.
Сделать типа бесплатный Wi-Fi роуминг))
Вообще есть уже Wi-Fi 6 с готовым роумингом...
https://zen.yandex.ru/media/droider/cht ... 275bb8e4c7
Но у нас пока нет...

Ещё добавил что-то типа аналога STUN... для определения IP бесплатных Wi-Fi точек. Теперь я виду IP всех бесплатных Wi-Fi точек.
Одна проблема - это дебильные NAT бесплатных Wi-Fi точек, которые не пропускают мои UDP пакеты...

Дома проблем нет. Порты на роутере проброшены как надо. ))
А как быть с бесплатными Wi-Fi точками ? Или каждый раз заходя в кофе просить администратора пробросить порты на своём роутере ? :)))

Короче... надо как то придумать обход этих дебильных NAT...
Или ждать когда все бесплатные Wi-Fi точки будет раздавать белые IPv6))
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

А как быть с бесплатными Wi-Fi точками ? Или каждый раз заходя в кофе просить администратора пробросить порты на своём роутере ? :)))
А вот никак. Этим и хорош HTTP(S)/WebSockets, что работает по стандартному протоколу, который никто не блочит.
Хотя странно, что блочат UDP трафик - значит никакие приложения, вроде телефонии, работать не будут.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

UDP трафик не блочат. Скайп и торенты работают...
Только мои UDP пакеты не проходят без проброски портов... Видать нет автоматической записи в таблице NAT.
У скайпа есть секрет видимо)) пока не знаю какой...))
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Скайп и торренты вполне себе по портам 80, 443 и т.д. могут работать. Если бы запись в табличке NAT не создавалась бы, то ничего бы не работало.
Друг Кота
Сообщения: 9175
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Короче разобрался я со своим роутером)) Всё работает. Тут подсказали - https://gamedev.ru/code/forum/?id=50491&page=2

Для проверки я взял простой роутер и посмотрел как там работает UDP (проброска портов отключена). Измерил все тайминги))

Схема такая: сервер (10.0.0.1) --- (WAN | роутер | LAN) --- сервер (192.168.0.1)

1. Из внешней сети (10.0.0.1) во внутреннюю (192.168.0.1) попасть невозможно так как порты на роутере закрыты.
2. Из внутренней сети (192.168.0.1) во внешнюю сеть (10.0.0.1) попасть можно.))
3. Допустим сервер (192.168.0.1) отправляет UDP пакет серверу (10.0.0.1).
4. Роутер делает запись в таблице NAT (связка "порт == IP" ).
5. После отправки UDP пакета роутер включает таймер примерно на 20 секунд.
6. Если по истечении 20 секунд ответ так и не пришёл, роутер удаляет из таблицы NAT запись о сокете. После этого из внешней сети (10.0.0.1) во внутреннюю (192.168.0.1) попасть невозможно.
7. Допустим ответ пришёл. Тогда роутер устанавливает таймер примерно на 30 секунд.
Screenshot_1.jpg
(18.95 КБ) 209 скачиваний
8. Далее идёт обмен данными между серверами... сервер (192.168.0.1) << >> сервер (10.0.0.1)...
Screenshot_2.jpg
(80.23 КБ) 220 скачиваний
9. При каждом новом пакете роутер автоматически устанавливает таймер примерно на 2...3 минуты.
10. Если пакетов больше нет, то через 2...3 минуты срабатывает тайм-аут и роутер удаляет из таблицы NAT запись о сокете. После этого из внешней сети (10.0.0.1) во внутреннюю (192.168.0.1) попасть невозможно.
11. При передачи пакетов порты (Source port и Destination port) роутер не меняет. Роутер меняет только IP (Source IP и Destination IP).

12. Вывод: Для поддержания связи по UDP надо непрерывно что-то передавать... например пустые пакеты... не реже чем каждые 2...3 минуты )) Чтоб не срабатывал тайм-аут и роутер удаляет из таблицы NAT запись о сокете.

По сути это получается тот же самый keep-alive как в TCP... или как в браузере... или как в HTTP(S)/WebSockets....
Пипец))

Ну зато теперь я точно знаю как работает мой роутер))
Ответить

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