Управление одной кнопкой на ESP.

Управление одной кнопкой на ESP.

Управление различными устройствами всего одной кнопкой.
Сегодня мы рассмотрим такой интересный пример как включение трёх ламп всего 1 кнопкой. Будут рассмотрены такие события как.

  • Быстрое нажатие кнопки. 
  • Два нажатия кнопки, кратковременные нажатия.
  • Долгое нажатие кнопки.

У меня на канале уже есть про подключение кнопки к Ардуино. Тактовая кнопка и сенсорная кнопка.
А сегодня я покажу как соединить выключатель с модулем ESP8266 и научимся обрабатывать события нажатия кнопки. Рассмотрим время нажатия кнопки для однократного и двойного нажатия кнопки. Скорость нажатия можно регулировать в настройках программы ESPEASY.

Работать сегодня будем с модулем ESP и программой прошивальщиком ESPEASY.
Используя эту программу можно абсолютно не зная азов программирования сделать неумные вещи умными и управлять ими со своего телефона, как локально так и удалённо.
Например для сегодняшнего примера, управления тремя лампами нам понадобилось написать всего 20 строчек кода. А вы можете просто взять их из архива ссылка на который будет в описании и вставить в поле Правила.

Для этого видео я собрал вот такую люстру. Не помню для чего я покупал эти отражатели в Китае. Наверное хотел сделать прожектор. И вот сегодня они мне пригодились. Также я взял коробочки от йогуртов и лампы на 12 вольт.
Ну и вот что получилось. 
Сегодня я не буду рассказывать как интегрировать всю эту систему в Умный дом на OPENHAB. Это Отдельная тема для следующего урока. Но хочу сказать, что по MQTT, в топики события приходят и те кто хоть немного разбирается может сам подключить это устройство в Умный дом, а если нет, или лениво, то ждите продолжение.

Сначала рассмотрим Быстрое нажатие кнопки
Включаем  и выключаем.  Срабатывание происходит с задержкой в 1 секунду. Почему так и как можно избавиться от этого расскажу чуть позже когда буду объяснять принцип работы.

Теперь рассмотрим как работает Два нажатия кнопки. Нужно немного попрактиковаться  чтобы уложиться в интервал. В моём случае я применил 1 секунду.

Ну и наконец Долгое нажатие кнопки. Здесь всё просто. Просто удерживаем кнопку нажатой больше 1 секунды.
Вот и всё. 
Теперь приступим к прошивке нашего ESP и добавим в него наши устройства.
Нам понадобятся 
1 кнопка 
3 реле – это если вы планируете подключать устройства на напряжение больше 3,3 вольта.
Ну и источники напряжения. Я использовал источник на 12 вольт, преобразователь на 5 вольт и 3,3 вольта. 

Для начала открываем браузер на страницу настройки вашего прошитого модуля. И вводим пароль. Если вам что не понятно, то посмотрите видео про прошивку и подключение модуля к программе ESPEASY. Дальше я буду думать, что это уже сделано.
Во вкладке Config проверяем настройки и если что не так, то изменяем.
Теперь заходим во вкладку Device. Здесь мы установим кнопку и 3 модуля реле. Так как у меня были только 2 модуля реле по 2 штуки. Это 4 реле. Мне не хватало выводов. Поэтому я открепил выводы которые по умолчанию задействованы под I2C. 4 и 5 gpio. 
Кнопка у меня подключена к gpio 5, а реле к gpio 12, 13,14 и 4.
Здесь всё понятно из предыдущих уроков, ну кроме вот этого блока отвечающего за двойное нажатие кнопки и за долгое удерживание кнопки. По умолчанию они выключены.

Принцип работы я объясню позже, а пока расскажу про эти  поля.
Для двойного нажатия.
Так как наша кнопка подключена к земле, то мы ставим Активность при низком уровне. И событие при этом будет равно 3. Ниже всё объясню. Интервал установим в 1 секунду.

Для долгого нажатия.
Так как наша кнопка подключена к земле, то мы ставим Активность при низком уровне. И мы не ставили галочку, инвертировать, то событие при этом будет равно 10. Ниже всё объясню. Интервал нажатия установим в 0,5 секунды.

Теперь добавим 3 реле. Я объяснять не буду как это делать. Мы уже это делали не один раз в прошлых видео. Просто покажу.

Теперь переходим в Controllers и установим связь с нашим OPENHAB. Это нам пригодится  потом при подключении в Умный дом. Что я делаю рассказывать не буду, смотрите предыдущие видео.
Ну и включаем светодиод на модуле который будет показывать, что связь с WIFI установлена.

Теперь во вкладке TOOLS включаем галочку использование правил и установим NTP сервер точного времени. Я взял из предыдущего урока.
Установил понедельник началом недели и свой часовой пояс.
Вот и всё, переходим к описанию принципа работы.


Принцип работы.

Допустим, что начальное значение кнопки равно 1. Это нормальное значение для кнопки подключеной к земле и использующей подтягивающий резистор PULUPP.

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

Для двойного нажатия
пользователь коротко нажимает кнопку. При нажатии создается событие. Состояние изменяется с 1 на 0. При отпускании кнопки создается следующее событие. Состояние изменяется с 0 на 1.
На втором быстром нажатии создается событие двойного щелчка. Состояние будет равно 3. При отпускании кнопки создается следующее событие. Состояние изменяется с 3 на 1.
Двойное нажатие должно быть в пределах 1000 мс.  или 1 секунде. В состоянии нажатия, то есть на низком уровне.
 

Для долгого удерживания кнопки
пользователь коротко нажимает кнопку. При нажатии создается событие. Состояние изменяется с 1 на 0. Пользователь продолжает нажимать кнопку и через некоторое время, определенное в настройках, отправляет событие, Долгое нажатие. Состояние изменяется с 0 на 10 или 11. При отпускании кнопки создается следующее событие. Состояние изменяется с 0 на 1.
Долгое нажатие должно быть в дольше 500 мс.  или 0,5 секунды. В состоянии нажатия, то есть на низком уровне.

Как вы можете увидеть, невозможно избежать отправки одного клика, не применяя задержку во времени ответа или пропуская некоторые изменения состояния. Например, можно сделать без задержки, но тогда надо исключить вариант двойного нажатия кнопки. Оставить только Одинарное и долгое нажатие.

Если при установке вы не планируете использовать варианты с двойным нажатием и удержанием кнопки, то срабатывание будет без задержки.


Как сделал я. Я добавил таймер на 1 секунду.
Теперь при коротком нажатии команда не отрабатывает сразу, а ждёт 1 секунду чтобы убедиться что это не двойное или долгое нажатие и если за это время ничего не происходит, то тогда срабатывает событие.

Теперь всё работает правильно. Правда первое время придётся немного привыкать для двойного нажатия, но я быстро научился. 
Изменить время вы можете в настройках.

Дополнительные материалы по теме
Подключение кнопки к ардуино
TTP223 сенсорная кнопка
Резистивные кнопки
Первая программа на Arduino. Aрдуино для начинающих
Digital Read Arduino
Управление светодиодами кнопкой на Ардуино
Analog Read Arduino

Скетчи