ESP8266 замена на Lan (или программируемый модуль с Lan)

Тема в разделе "Проводная и беспроводная связь", создана пользователем SergeyR, 26 мар 2018.

?

Существуют программируемые датчики на Ethernet

Голосование закрыто 25 апр 2018.
  1. Да

    0 голосов
    0,0%
  2. Нет

    0 голосов
    0,0%
  3. Просто поставить две Arduino (одна онлайн, другая оффлайн)

    100,0%
  1. SergeyR

    SergeyR Нуб

    Всем добрый день,
    Столкнулся с проблемой совместить работу в интернете и оффлайне. Поиск решения не дал, своя голова уже не тащит. Вопросы подобные видел, но решения не нашёл. Призываю сообщество!

    Максимально упростив задачу получаем:

    :cool: Имеем
    :
    • 1 реле
    • 1 кнопка
    • Wi-Fi (в моём случае Troyka-модуль, но думаю подойдёт любой на ESP8266)
    • Ethernet Shield (в моём случае на W5100)
    • Arduino Uno (в моём случае Iskra Neo, но это не важно)
    :confused: Хотим:
    Чтобы мы могли управлять реле по интернету и по кнопке (оффлайн).
    Кнопка обычная, не тумблер.
    Для интернета доступны 3 страницы с командами:
    • включить
    • выключить
    • узнать текущий статус

    :eek: Проблемы:
    По реализации более-менее понятно:
    Код (C++):
    void loop()
    {
       //Проверяем web server
       if (Serial1.available()) {
       ...                              
       }
       //Проверяем кнопку
       if (button_click()) {
       ...  
       }
    }
    Но так работать будет не стабильно: мы нажали кнопку в тот момент, когда arduino проверяло наличие подключения по ethernet (операция не мгновенная), и наше нажатие она просто не заметила.
    Конечно если зажать кнопку, или нажимать пока не получится, все отработает - но это будет постоянно раздражать.

    ;) Возможное решение:
    Аппаратно (Конденсаторами) сохранять "нажатое" состояние кнопки на 1 сек после отпускания.
    Я не смог это реализовать.

    :) Решение:
    Мне на помощь пришёл esp8266, который я прошил отдельно, полностью разместив на нём серверную часть. Если пришла команда по интернету, esp8266 - отправляет команду для arduino.

    А ардуино в цикле проверяет:
    • есть ли сообщение от esp8266
    • в каком состоянии кнопка
    Всё работает очень быстро без проблем вот уже 3месяца. (никаких проблем ни с кнопкой и с сервером.)

    :mad: А теперь моя проблема:
    Мне нужно заменить Wifi на Lan интерфейс (не достаёт wifi, ну и проводам я больше доверяю)
    Подскажите, пожалуйста, как это можно сделать? Есть ли программируемые модули для Lan, аналогичные с esp8266?

    P.s. Из всех возможных вариантов, пока вижу только использование второй Ардуино, а это делать очень не хочется.
    P.s.s. ну или вернуться к аппаратному решению, но как сделать не знаю.
     
  2. SergeiL

    SergeiL Гуру

    Усложняете Вы все.
    Почитайте про таймеры, прерывания.
    Есть Ethernet шилд.
    Кнопки опрашиваете в обработчике таймера, в loop() проверяйте связь по Ethernet, занимайтесь преподключениями.
    Ничего не будет друг другу мешать.
     
  3. SergeyR

    SergeyR Нуб

    Большое спасибо за подсказку! Но тогда как быть с прерываниями, если имеем 4 реле и 4 кнопки? Ведь доступны только 2 входа для прерываний.
     
  4. SergeiL

    SergeiL Гуру

    Настраиваем таймер (например TimerOne) на периодичность в 10 миллисекунд.

    При срабатывании таймера опрашиваем все кнопки.
    Если состояние какой-то кнопки изменилось, и остается одинаковым последние 4 проверки – значит, нажали или отпустили кнопку.

    Выполняем действие, выставляем флаг.

    В loop() проверяем флаги, и сообщаем куда нужно.

    Это и борьба с дребезгом и отсутствие задержек.
     
    SergeyR нравится это.
  5. SergeyR

    SergeyR Нуб

    Спасибо большое, я обязательно почитаю и разберусь.