Найти тему
Электроника, ESP32, Arduino

Универсальное (1-8 каналов) Wi-Fi реле на ESP8266

Это полностью готовый проект - заливай скетч и пользуйся. Имеет несколько ключевых особенностей:

  • может быть легко перестроен под любое количество реле (от 1 до 8);
  • имеет диспетчер подключения к Wi-Fi (например в случае необходимости замены точки доступа или смены пароля от Wi-Fi);
  • управление через WEB интерфейс с любого устройства в локальной сети через браузер (подключение к Интернет не требуется);
  • запрос статуса состояния реле и возможность управления с помощью других плат ESP;
  • возможность присвоения статического IP адреса;
  • возможность работы с разными типами модулей реле.

Общий алгоритм работы показан блок-схеме:

Алгоритм работы программы
Алгоритм работы программы

После подачи питания программа ищет в файлах информацию необходимую для подключения к локальной (домашней) сети Wi-Fi. Если информация не найдена (первый запуск устройства) или сменился пароль от сети Wi-Fi - плата ESP82666 запускается как точка доступа.

ESP8266 как точка доступа
ESP8266 как точка доступа

Подключившись к этой точке доступа, можно открыть браузер, вбить в адресную строку IP 192.168.4.1 и в открывшейся странице задать параметры сети Wi-Fi, к которой необходимо подключиться.

WEB Страница для задания параметров домашней сети
WEB Страница для задания параметров домашней сети

Там же можно присвоить статический IP адрес и прописать шлюз. Перед этим необходимо зайти на домашний роутер и посмотреть, что раздает DHCP сервер и какие IP не заняты.

Смотрим свободный IP и шлюз
Смотрим свободный IP и шлюз

После нажатия кнопки Submit ESP8266 перезагрузится и будет доступна внутри домашней сети по адресу, который вы укажите. Я выбрал 10.168.0.200

WEB интерфейс панели управления GPIO
WEB интерфейс панели управления GPIO

Библиотека ESPAsyncWebServer умеет делать "динамический" HTML - количество отображаемых кнопок будет зависеть от настроек которые вы зададите в скетче. События происходящие при нажатии кнопок обрабатываются с помощью JavaScript - перезагрузка и обновление WEB страницы не требуются!
При запросе страницы - ползунки обновляются в соответствии с последним состоянием GPIO (можно одновременно управлять с нескольких устройств ПК, смартфон через WEB браузер).

Для проверки и отладки кода был собран прототип. (8 светодиодов + 8 резисторов номиналом 330-990 Ом)

Схема прототипа для проверки скетча
Схема прототипа для проверки скетча
Прототип на макетной плате.
Прототип на макетной плате.

Кроме WEB интерфейса, изменить состояние светодиодов можно отправив GET запрос вида:

http://192.168.0.200/update?relay=5&state=1

GET запрос для изменения состояния GPIO
GET запрос для изменения состояния GPIO
  • relay=5 порядковый номер реле (5)
  • state=1 (1 - включить/0 выключить)

Можно запросить состояние всех GPIO с помощью запроса:

http://192.168.0.200/status

Запрос статуса всех реле одной строкой
Запрос статуса всех реле одной строкой

a1b1c0d0e1f0g0h0

Английская буква алфавита - номер реле, цифра после неё 1/0 включено/выключено.

Прошивка и настройка платы

Перед использованием необходимо установить в систему Arduino IDE две библиотеки:

В Папке с проектом есть папка DATA.

-10

Файлы из этой папки необходимо разместить в файловой системе ESP (LittleFS).

-11

Как установить загрузчик и загрузить файлы, читайте в этой статье:

После загрузки файлов необходимо откорректировать несколько строк в скетче:

Параметры необходимые для конфигурации Wi-Fi реле
Параметры необходимые для конфигурации Wi-Fi реле

Если устройств планируется несколько - лучше присвоить точке доступа понятное название. Я использую место установки + последняя цифра IP адреса который я планирую задать.

const char* AP_NAME = "STENA_200";

Задать пароль для точки доступа. Если у вас моргнет электричество и возникнет проблема с роутером, все ваши самодельные девайсы перейдут в режим точки доступа - чтобы в этот момент к ней не смог подключиться "замечательный сосед", лучше придумать свой надежный пароль.

const char* AP_password = "password";

Можно задать понятное название устройства - в WEB странице управления GPIO включена поддержка русской кодировки.

const char* Name_device = "СТЕНА";

Количество реле - именно столько кнопок будет нарисовано в WEB интерфейсе управления. (у меня два реле)

##define NUM_RELAYS 2

Отредактировать массив к которым будут подключены реле (модули реле). Определиться с выбором GPIO, физических контактов на плате и особенностями подключения Вам поможет эта статья:

У меня модули реле подключены к контактам D1, D2 соответственно массив будет выглядеть:

int relayGPIOs[NUM_RELAYS] = {5, 4};
Схема самодельного светодиодного встроенного светильника.
Схема самодельного светодиодного встроенного светильника.

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

Разные типы модулей реле
Разные типы модулей реле

У меня есть несколько таких готовых релейных модулей и логика управления у них разная.

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

Для этого в коде присутствуют следующие строки:

// Инверсия выходов
##define RELAY_INVERSION true
// Инверсия переключателя
##define SWITCH_INVERSION false
Начальное состояние переключателей и GPIO
Начальное состояние переключателей и GPIO

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

Прошиваем, проверяем, паяем, вставляем в готовую конструкцию и пользуемся.

Распределительная коробка самодельного светильника
Распределительная коробка самодельного светильника

Конструкция самодельного светодиодного светильника была описана в этой статье:

Загрузив такой вариант прошивки в ESP8266, не будет необходимости каждый раз разбирать конструкцию и пере-прошивать плату в случае необходимости смены сетевых настроек. Есть возможность управлять отдельными GPIO с помощью отдельных HTPP запросов, и запросить статус всех GPIO в виде одной строки текста. Главный плюс - все это находится внутри локальной сети и не требует подключения к сети Интернет.

Скетч с комментариями на русском языке качайте ТУТ.

Полный список всех статей канала доступен по этой ссылке:

Всем удачи!