Универсальное (1-8 каналов) Wi-Fi реле на ESP8266
Это полностью готовый проект — заливай скетч и пользуйся. Имеет несколько ключевых особенностей:
- может быть легко перестроен под любое количество реле (от 1 до 8);
- имеет диспетчер подключения к Wi-Fi (например в случае необходимости замены точки доступа или смены пароля от Wi-Fi);
- управление через WEB интерфейс с любого устройства в локальной сети через браузер (подключение к Интернет не требуется);
- запрос статуса состояния реле и возможность управления с помощью других плат ESP;
- возможность присвоения статического IP адреса;
- возможность работы с разными типами модулей реле.
Общий алгоритм работы показан блок-схеме:
После подачи питания программа ищет в файлах информацию необходимую для подключения к локальной (домашней) сети Wi-Fi. Если информация не найдена (первый запуск устройства) или сменился пароль от сети Wi-Fi — плата ESP82666 запускается как точка доступа.
Подключившись к этой точке доступа, можно открыть браузер, вбить в адресную строку IP 192.168.4.1 и в открывшейся странице задать параметры сети Wi-Fi, к которой необходимо подключиться.
Там же можно присвоить статический IP адрес и прописать шлюз. Перед этим необходимо зайти на домашний роутер и посмотреть, что раздает DHCP сервер и какие IP не заняты.
После нажатия кнопки Submit ESP8266 перезагрузится и будет доступна внутри домашней сети по адресу, который вы укажите. Я выбрал 10.168.0.200
Библиотека ESPAsyncWebServer умеет делать «динамический» HTML — количество отображаемых кнопок будет зависеть от настроек которые вы зададите в скетче. События происходящие при нажатии кнопок обрабатываются с помощью JavaScript — перезагрузка и обновление WEB страницы не требуются!
При запросе страницы — ползунки обновляются в соответствии с последним состоянием GPIO (можно одновременно управлять с нескольких устройств ПК, смартфон через WEB браузер).
Для проверки и отладки кода был собран прототип. (8 светодиодов + 8 резисторов номиналом 330-990 Ом)
Кроме WEB интерфейса, изменить состояние светодиодов можно отправив GET запрос вида:
Можно запросить состояние всех GPIO с помощью запроса:
Английская буква алфавита — номер реле, цифра после неё 1/0 включено/выключено.
Прошивка и настройка платы
Перед использованием необходимо установить в систему Arduino IDE две библиотеки:
В Папке с проектом есть папка DATA.
Файлы из этой папки необходимо разместить в файловой системе ESP (LittleFS).
Как установить загрузчик и загрузить файлы, читайте в этой статье:
После загрузки файлов необходимо откорректировать несколько строк в скетче:
Если устройств планируется несколько — лучше присвоить точке доступа понятное название. Я использую место установки + последняя цифра IP адреса который я планирую задать.
Задать пароль для точки доступа. Если у вас моргнет электричество и возникнет проблема с роутером, все ваши самодельные девайсы перейдут в режим точки доступа — чтобы в этот момент к ней не смог подключиться «замечательный сосед», лучше придумать свой надежный пароль.
Можно задать понятное название устройства — в WEB странице управления GPIO включена поддержка русской кодировки.
Количество реле — именно столько кнопок будет нарисовано в WEB интерфейсе управления. (у меня два реле)
Отредактировать массив к которым будут подключены реле (модули реле). Определиться с выбором GPIO, физических контактов на плате и особенностями подключения Вам поможет эта статья:
WeMos D1 Mini Модуль реле 1-канальное
Одновременно с выходом в недалёком 2014 году чипа беспроводной связи ESP8266EX по стандарту WiFi, набравшего по-настоящему оглушительную популярность в кругу любителей собирать самодельные устройства, компания WEMOS Electronics представила общественности большую линейку собственных модульных электронных плат под торговой маркой WeMos, задав новый вектор развития ардуино-совместимых платформ. Взяв за основу микроконтроллер от компании Espressif Systems, разработчики значительно потрудились не только над уменьшением размеров базовых модулей, сделав их максимально компактными, но и над выпуском целого спектра расширений, предложив пользователям богатый функционал, способный помочь в реализации задач различного уровня сложности при проектировании и конструировании разнообразных полезных изобретений.
Современные электронные продукты WeMos входят в категорию эффективных низкоценовых решений и позиционируются создателями как открытая платформа для самостоятельной разработки многоцелевых устройств на основе беспроводной связи по технологии WiFi. При этом основной упор сделан на создание и развитие изделий с поддержкой сетей нового поколения «Интернет вещей» (англ. — Internet of Things, IoT), чему активно способствуют существующие возможности облачных вычислений и межмашинных взаимодействий.
Чтобы потребитель не смог запутаться в физической совместимости плат, каждая серия обладает своими отличительными особенностями. Например, серия WeMos D1 Mini, к которому принадлежит Relay Shield Модуль электромагнитного реле, имеет синий цвет поверхности текстолита и небольшой скруглённый угловой вырез рядом с маркировкой 3V3. Вырез служит ориентиром, гарантирующим правильное совмещение нескольких плат между собой.
Технические характеристики
- Модель: 1.0.0
- Питание: 5 В
- Потребляемый ток: до 60 мА
- Совместимость: WeMos D1 mini / WeMos D1 mini PRO
- Активные выводы: D1, 5V, GND
- Реле: JQC-3FF-S-Z
- Выводы коммутации: NO, NC, COM
- Максимальная нагрузка: 10А/250В, 15А/125В, переменное напряжение
- Оптическая изоляция: отсутствует
- Встроенные транзисторный ключ и защитный диод
- Световая индикация состояния
- Размер: 28.0 х 25.6 х 17.6 мм
Подавляющее большинство современных и разнообразных электронных систем, служащих для управления и коммутации устройств, не обходятся без их главного компонента — электромагнитных реле. Именно благодаря реле, становится возможным управляемое включение, отключение или переключение разного рода силовых нагрузок, заставляющих работать связанные приборы в различных режимах и при определённых событиях. Встречаются реле повсеместно, начиная от обычного термостата на простеньком микроконтроллере и заканчивая сложными интеллектуальными автоматизированными комплексами.
Функционал модуля Вемос реле шилд
Говоря простым языком, конструкция реле представляет из себя неподвижный металлический сердечник, расположенный в центре катушки индуктивности. Напряжение, поступающее на обмотку катушки, создаёт магнитное поле на конце сердечника, приводя в движение встроенных механизм замыкания или размыкания цепей внешней нагрузки, подключенных к коммутационным выводам. Всего у реле три вывода с винтовым соединением. По центру находится общий вход, по которому поступает ток для внешней нагрузки. По краям размещены нормально открытый (разомкнутый в исходном состоянии, NO) и нормально закрытый (замкнутый в исходном состоянии, NC) выходы, через которые нагрузочный ток уходит дальше. Во время срабатывания реле, выходы NO и NC меняют своё положение на обратное, и возвращаются в исходное состояние при отсутствии напряжения в катушке индуктивности.
Наглядно понять схему подключения поможет нижеприведённая принципиальная схема модуля реле WeMos. В зависимости от типа коммутации, не сложно создать несколько вариантов управления силовыми цепями: включение одной цепи при срабатывании реле, отключение одной цепи при срабатывании реле, или переключение между двумя цепями с одинаковым рабочим напряжении.
Электромагнитное реле WeMos Relay Shield основано на одноканальном реле JQC-3FF-S-Z, позволяющим замыкать силовые цепи переменного напряжения до 250В с пиковой нагрузкой до 10А (или до 15А при переменном напряжении до 125В). Питается реле от постоянного напряжения 5 вольт. Для совместимости с контроллером Вемос Д1 мини (Про), все цифровые контакты которого восприимчивы лишь к 3.3-вольтовому напряжению, схемой модуля предусмотрен специальный транзисторный «ключ», развязывающий друг от друга оба типа напряжения. В качестве защиты от обратного напряжения, возникающего в катушке при отключении нагрузки, в схему установлен дополнительный диод.
Управление реле по умолчанию назначено на вывод D1 шилда Relay Shiled Wemos. Высокоуровневый сигнал вывода приводит к включению реле, низкоуровневый сигнал возвращает реле в исходное положение. В качестве информационного индикатора, указывающего на состояние реле, в модуль интегрирован светодиод, зажигающийся при срабатывании катушки индуктивности.
Составляя WeMos-проекта, необходимо учитывать достаточно высокий корпус реле. Стандартные соединения, входящие в комплект с модулем, слишком малы и не позволят установить сверху какое-либо другое WeMos-расширение. Решением может стать многослойное наращивание соединений или использование специально разработанных для подобных задач переходников Вемос Двойная база или Вемос Тройная база. Прибегнув к их помощи, добавление нескольких подобных модулей в одну WeMos-конструкцию не вызовет затруднений.
Программирование на Ардуино
Способ программирования реле WeMos Relay Shield практически ничем не отличается от самого наипростейшего аналогичного метода включения/выключения встроенного на плате микроконтроллера WeMos D1 Mini (Pro) светодиода, и будет понятет даже тем, кто только начинает постигать азы программирования контроллерных платформ.
const int relayPin = D1; // контакт, подключенный к реле const long interval = 2000; // пауза на две секунды void setup() < pinMode(relayPin, OUTPUT); // устанавливаем контакт D1 в режим вывода >void loop() < digitalWrite(relayPin, HIGH); // срабатывание реле при высокоуровневом сигнале delay(interval); // пауза digitalWrite(relayPin, LOW); // отключение реле при низкоуровневом сигнале delay(interval); // пауза >
Использование команды delay() при работе с реле может показаться не совсем уместной, так как команда полностью приостанавливает выполнение всей программы на заданное время. Если во время ожидания требуется продолжение выполнения кода, следует присмотреться к функции millis(), которая позволит реализовать задержку без delay(). Функция millis() выполняет постоянный отсчёт в миллисекундах, начиная с 0 до 4294967295 (около 50 дней) с момента включения микроконтроллера. После переполнения, значение сбрасывается.
const int relayPin = D1; // контакт, подключенный к реле const long interval = 2000; // пауза на две секунды int relayState = LOW; // начальное состояние реле unsigned long previousMillis = 0; void setup() < Serial.begin(115200); //открываем последовательный порт pinMode(relayPin, OUTPUT); // устанавливаем контакт D1 в режим вывода >void loop() < // текущее значение берем из счетчика unsigned long currentMillis = millis(); // разместим отладочный код, чтобы наблюдать // как происходит подсчет и смена состояния реле Serial.print("Current Millis: "); Serial.print(currentMillis); Serial.print(" "); Serial.print("Previos Millis: "); Serial.print(previousMillis); Serial.print(" "); Serial.print("Relay stat: "); Serial.println(relayState); // сравниваем значения текущего значения счетчика // с величиной заданного интервала if (currentMillis - previousMillis >= interval) < previousMillis = currentMillis; // если оно болше, то меняем состояние реле relayState = !relayState; digitalWrite(relayPin, relayState); >>
Результат выполнения скетча в открытом мониторе последовательного порта Ардуино ИДЕ
Принципиальная схема Relay Shield WeMos