Беспроводный выключатель, что это такое и стоит ли его устанавливать. Беспроводный выключатель, что это такое и стоит ли его устанавливать Выключатель с wifi управлением

Здравствуйте, уважаемые читатели и гости сайта «Заметки электрика».

В прошлых своих публикациях я знакомил Вас с и сенсорным , управляемых, как в ручную, так и с пульта управления.

Но сегодня Ваше внимание я хотел бы обратить на реле (переключатель) Sonoff версии Basic с возможностью управления прямо c мобильного телефона через сеть Wi-Fi или Интернет.

Реле Sonoff Basic представляет из себя небольшое по габаритам устройство (88х38х23 мм), которое без проблем можно разместить за потолочным пространством, в строительной нише, или чаше люстры или светильника.

Его стоимость на момент выхода статьи составляет чуть меньше 300 рублей. Как Вы понимаете, это вполне приемлемые деньги, к тому же за такой современный девайс. Приобрел я его на всем известной торговой площадке АлиЭкспресс (ссылочка будет в конце статьи).

В комплекте прилагались две защитные крышки с крепежными шурупами, а вот инструкции, к сожалению, не было.

Реле Sonoff имеет следующие технические характеристики, часть которых отображена прямо на его корпусе:

  • максимальный ток управляемой нагрузки 10 (А)
  • напряжение питания от 90 (В) до 250 (В)
  • стандарт беспроводной связи 802.11 b/g/n
  • протокол безопасности WPA-PSK/WPA2-PSK
  • температура эксплуатации от 0°С до 40°С
  • масса около 50 г

Возможности реле Sonoff Basic:

  • управление нагрузкой через Wi-Fi
  • управление нагрузкой через Интернет
  • управление нагрузкой по заданному таймеру, как с прямым, так и с обратным отсчетом
  • управление нагрузкой с нескольких мобильных телефонов

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

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

Итак, поехали.

Установка и подключение реле Sonoff

Для работы реле Sonoff ему необходимо напряжение питания 220 (В), а значит его без проблем можно установить в удобном для Вас месте, например, в чаше люстры или прямо под натяжным потолком, а также непосредственно в распределительной коробке, если там предостаточно места.

Для крепления реле к поверхности у него имеются два крепежных отверстия.

Схема подключения реле Sonoff очень простая.

На клеммы (L) и (N) со стороны (Input-Вход) подключается, соответственно, фаза и ноль питающего напряжения 220 (В). Естественно, что при подключении не забываем про .

Обратите внимание, что подключаемые жилы должны быть сечением не больше 1,5 кв.мм. Но я все же попробовал подключить жилы сечением 2,5 кв.мм. В результате, жесткий (однопроволочный) провод еще можно подключить без проблем, а вот гибкий (многопроволочный) со уже с большим трудом вставляется в клемму, так что пришлось его даже не много сплющить и деформировать.

Для примера я использовал питающий кабель марки ПВС, который как раз таки имеет сечение 2,5 кв.мм. На другом конце кабеля имеется вилка, которую в дальнейшем я подключу в любую розетку с напряжением 220 (В).

На клеммы (L) и (N) со стороны (Output-Выход) подключается, соответственно, фаза и ноль нагрузки.

Для удобства подключения нагрузки, на выход реле я подключил розетку.

Кстати, клеммные крышки несут не только защитную функцию, но и играют роль зажимов питающих проводов или кабеля.

Вот так получается все красиво и аккуратно. Реле Sonoff подключено.

В качестве нагрузки я подключил светодиодную лампу, про в одной из своих статей.

Вот простенький пример схемы подключения реле Sonoff для группы светильников.

Кстати, в качестве нагрузки не обязательно использовать только лишь лампу или группу ламп. На выходные клеммы можно смело подключать любую другую нагрузку, не превышающую номинальный ток 10 (А). А если Вам все же необходимо управлять нагрузкой, имеющей значение тока выше 10 (А), то ее можно подключить к контактору, а с помощью реле уже управлять катушкой этого контактора.

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

Будет это выглядеть примерно вот так.

Таким образом, сфера применения реле Sonoff очень широкая и разнообразная. Им можно управлять, хоть одной лампочкой, хоть мощным однофазным электронагревателем, хоть трехфазным электродвигателем и т.д. Все зависит только от Ваших нужд и потребностей.

А теперь рассмотрим все возможности управления реле Sonoff более подробнее.

Вскрывать реле и смотреть его устройство я не буду, на этот счет уже предостаточно информации в Интернете — посмотрите соответствующие ресурсы по электронике. И судя по отзывам, исполнение у реле вполне достойное. Кстати, кому интересно знать, то реле собрано на базе известного китайского микроконтроллера ESP8266.

Управление нагрузкой через телефон по сети Wi-Fi

Прежде чем рассказать про управление реле через Wi-Fi, скажу, что им можно управлять и в ручную. Для этого на его корпусе имеется небольшая утопленная кнопочка черного цвета. Так вот при одном кратковременном ее нажатии реле включается, а при повторном нажатии, соответственно, отключается. Причем для этого не обязательно, чтобы реле было подключено к сети Wi-Fi — управление будет осуществлять и в Offline режиме.

Но помимо этого кнопочка несет в себе и другой функционал, о котором я расскажу чуть ниже.

Для реализации возможности управления нагрузкой через Wi-Fi и Интернет необходимо установить на телефон мобильное приложение eWeLink. Это приложение можно найти, как для устройств с Android, так и с iOS. Для облегчения поиска приложения можно воспользоваться необходимыми QR-кодами на упаковке.

Для устройств с Android приложение eWeLink можно бесплатно скачать с Google Play и без особых проблем установить себе на телефон. Интерфейс программы поддерживает русский язык.

Для устройств с iOS данное приложение доступно в App Store. Скачивать и устанавливать данное приложение на iPhone или iPAD я не пробовал, поэтому, кто опробовал данное приложение на устройствах с iOS, отпишитесь пожалуйста в комментариях о результатах.

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

После этого на почту придет проверочный код (действителен 30 минут), который необходимо ввести в соответствующей строке «Email код». На этой же страничке необходимо ввести пароль для входа в свой будущий аккаунт (не менее 8 символов).

Кстати, на почтовые сервисы Mail.ru и Mail.yandex.ru (Яндекс-почта) письма доходят без проблем. Но насколько я осведомлен, то на почтовый сервис Gmail.ru (Гугл-почта) письма с проверочным кодом доходят не всегда, так что учтите данный момент.

Затем необходимо выполнить сопряжение реле и роутера путем длительного удержания (в течение 5 секунд) той самой кнопки на корпусе выключателя, после чего на реле заморгает зеленый светодиод. Ставим галочку на первом режиме подключения и нажимаем «Далее».

Теперь необходимо выбрать из списка нашу Wi-Fi сеть и ввести от нее пароль. Чтобы каждый раз не вводить пароль, то можно поставить галочку «Запомнить пароль». Нажимаем «Далее», после чего начнется поиск нашего устройства и его регистрация (по времени это заняло у меня не более 2-3 минут).

После успешного сопряжения, реле автоматически передает данные на китайское облако (Amazon AWS или Coolkit), что дает возможность управлять им через Интернет. Но к этому я еще вернусь чуть позже.

Как видите, наше реле теперь отображается в списке всех устройств (пока оно единственное в списке, но совсем в ближайшее время появятся и другие).

Когда реле находится в Online (в сети), то на его корпусе всегда горит зеленый светодиод. Как только светодиод начинает моргать, то значит связь с роутером или Интернетом утеряна. Как раз по этом индикатору и удобно определять, находится реле в сети (Online) или нет (Offline).

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

Теперь можно попробовать включить реле через телефон. Для этого нажимаем на «Реле 1». Тут же появилась красная надпись о том, что необходимо обновить приложение eWeLink, хотя в Google Play обновление не отображается.

Заходим в настройку устройства (три точки в правом углу) и видим, что приложение имеет текущую версию 1.5.2, а доступна более новая версия 1.5.5. Нажимаем на иконку «Скачать» и начинается обновление приложения. После обновления красная надпись исчезает, а в настройках мы можем увидеть новую актуальную версию 1.5.5.

Запомните!!! Главное условие работы реле — это наличие доступа в Интернет.

Если вдруг пропадет доступ в Интернет, то на корпусе реле начнет мигать зеленый светодиод, а в приложении на его вкладке отобразится режим Offline (Офлайн), т.е. не доступен для управления.

Итак, чтобы включить наше «Реле 1», необходимо войти в него и нажать на круглую виртуальную кнопку в центре экрана. Причем управлять реле можно и из общего списка всех устройств, нажимая на соответствующую маленькую кнопку (слева). В общем, кому как понравится.

При отключенном положении реле кнопка имеет белый цвет с заливкой вокруг нее серого фона. При включенном положении реле — кнопка изменяет свой цвет на зеленый, а фон вокруг нее становится синим.

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

Причем удивило то, что реле срабатывает по заданному таймеру даже тогда, когда находится вне сети (Offline), а значит все заданные программы таймера хранятся непосредственно в памяти реле.

Нажимаем на кнопку «Добавить таймер» и переходим на страницу настройки таймеров. Каждый таймер настраивается, либо на включение реле, либо на отключение. Всего имеется два варианта настройки таймера:

  • однократный (разовое срабатывание по заданной дате и времени)
  • повторный (периодические срабатывания по заданной дате и времени, в том числе с указанием конкретных дней недели)

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

Помимо прямого и обратного таймеров, во вкладке «Настройки» (три точки в правом углу) имеется цикличный таймер.

В этой вкладке можно настроить различные варианты циклов срабатывания реле. Об этом я подробно рассказывать не буду, т.к. здесь все просто и интуитивно понятно.

Общее количество настроенных таймеров, включая цикличный таймер, может быть не более 8. И будьте внимательны, т.к. при наложении друг на друга времени различных таймеров ни один из них может не сработать!!!

Также в настройках можно указать, в каком положении будет оставаться реле, если вдруг с него будет отключено питание 220 (В). Здесь есть три варианта. Устанавливая соответствующие галочки можно выбрать, что при повторном появлении питания 220 (В) реле может, либо включиться, либо отключиться, либо остаться в исходном состоянии.

Кстати, это очень удобная функция. Вот даже вспомните про нюанс , который при исчезновении и повторном появлении питания 220 (В), почему-то всегда включается, причем даже находясь в отключенном исходном состоянии. А представьте себе, что Вас нет дома, чуть «моргнуло» напряжение в сети и контроллер самостоятельно включил люстру. Здесь такого инцидента не произойдет, т.к. в подобном случае все можно настроить под Ваши потребности.

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

А можно ли управлять реле сразу с нескольких телефонов?

Можно! Естественно, что при этом на каждый телефон необходимо установить приложение eWeLink.

Здесь есть два варианта. Первый вариант, это заходить в приложение eWeLink под одинаковым именем и паролем с разных телефонов и управлять реле.

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

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

Управление нагрузкой через Интернет

Помимо управления реле через телефон по сети Wi-Fi, им также можно управлять и через Интернет из любой точки Вашего местонахождения, т.е. абсолютно из любой точки Мира, где есть доступ в Интернет.

Итак, для управления выключателем через Интернет, необходимо войти в это же приложение eWeLink под своим именем и паролем, которые Вы указали при регистрации. А дальше все по аналогии. Это же приложение, эти же настройки, эти же кнопки управления, и т.п., разница лишь в том, что Вы находитесь не дома в зоне действия Вашей Wi-Fi сети, а на расстоянии сотни и тысяч километров от дома.

Немного об облаке.

Но все же без Интернета управлять реле Вы не сможете, т.к. управление идет не через локальную сеть, а через сеть Интернет, т.е. то самое китайское облако, про которое я упоминал выше. И не важно, управление идет через Wi-Fi или через Интернет, обращение при управлении всегда идет через облако, а для доступа к облаку нужен доступ в Интернет.

В связи с этим различные умельцы уже придумали как отвязать данное устройство от китайского облака или сделать управление только через локальную домашнюю сеть. Кому интересно, то данную информацию можно найти на определенных ресурсах.

Кстати, если Вам необходимо аналогичное устройство, но с дополнительной функцией радиоуправления с пульта, то можно заказать реле Sonoff версии RF.

Если Вы хотите управлять нагрузкой там, где нет вообще сети Интернет, то можно воспользоваться реле Sonoff версии G1 (GSM/GPRS с поддержкой SIM-карты). Также у данного производителя имеются в наличии реле с датчиками температур и влажности Sonoff ТН10/ТН16 и двухканальные (для управления двумя независимыми нагрузками) реле Sonoff Dual.

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

Купить реле Sonoff можно здесь:

  1. Sonoff Basic: https://goo.gl/jXyNm3
  2. Sonoff RF (с радиоуправлением): https://goo.gl/TRPqN6
  3. Sonoff G1(GSM/GPRS с поддержкой SIM-карты): https://goo.gl/EkpTdp
  4. Sonoff ТН10/ТН16 (датчик температуры и влажности): https://goo.gl/MWAL5p
  5. Sonoff Dual (двухканальный): https://goo.gl/a7rV56

И уже по традиции, видеоролик по материалам статьи, где более наглядно можно посмотреть настройку и управление реле Sonoff:


Данная статья будет посвящена ESP8266 Wi-Fi модулю, языку программирования LUA и прошивке nodeMCU . SDK от производителя рассматриваться не будет.

Примерно года три назад я пробовал реализовать выключатель по 1-wire шине. Как все работало мне очень не понравилось.

  • Единая точка отказа т.к. вся логика на сервере;
  • Медленная скорость;
  • К каждому выключателю придется тянуть от 2х проводов(идеально «витуху»).

В следствии чего все это было удачно заброшено, другие беспроводные решения рассматривались, но были исключены в виду дороговизны, небезопасного протокола и сложности реализации. Хотелось чего то простого с минимумом компонентов, со своей логикой и дешёвого. Не давно заказал 2 штуки esp8266 просто для забавы, не зная, чего конкретного с ними можно сделать. После 2-х вечеров разборок с чипом вспомнил незавершённое дело с кнопкой и решил довести до логического конца.

На данный модуль уже существует некоторое количество прошивок, так же вы можете писать прошивку под себя, используя SDK, но не стал вникать в подробности написания, т.к. после изучения API nodeMCU понял, что данного функционала мне хватает с запасом и прошил оба модуля.

Железо

Себестоимость важный фактор для простого выключателя, так что пытался использовать как можно меньше частей. Решил сделать из того что было дома, но пришлось купить твердотельное реле. Кстати, «релюшка» стоит дороже wifi модуля и ее можно заменить на оптопару, симистор и обвязку, схемы включения легко ищутся в интернете. Был случай, когда плохой контакт в патроне лампочки выбил симистор на коротко. Посмотрим, как покажет себя оптореле, ведь раньше с ними не работал. Стоит учесть для большой нагрузки установка радиатора обязательна.

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


Внимание схему стоит улучшить! Выход на реле стоит подать через транзистор, а кнопку подтянуть через резистор от плюса. Ингредиенты получились такие:

  • выключатель;
  • пружинка(для переделки выключателя в кнопку);
  • сам esp8266;
  • твердотельное реле использовал(S202T02);
  • платка для конструирования;
  • резистор 470 Ом;
  • провода;
  • разъемы по вкусу;
  • зарядка от телефона 400мА 5v;
  • стабилизатор 1117 3.3v;
  • пара конденсаторов.

Переделка выключателя не заняла много времени, выкинул стандартный светодиод. Протянул провода от модуля в центре выключателя, сам модуль расположил снаружи под пластмассовой кнопкой, а силовая часть внутри. Не много фотографий процесса (фото с телефона):

nodeMCU

Прошивка использует Lua язык программирования, данный язык похож чем то на Javascript. Версия ещё сыроватая, но уже базовый функционал вполне не плохо реализован. Сразу после загрузки модуль начинает исполнять файл скрипт init.lua , в чистой прошивке этого файла нет, вам приходиться его создать руками. Все операции можно осуществлять через консоль подключенным к «com» порту, для упрощения заливки файлов в модуль есть скрипт luatool . Заливка работает следующим образом и данный код полностью показывает процесс записи в файл.

File.open("init.lua","w") file.writeline([]) file.writeline([[--comment]]) file.close()

Пример чтения конфигурационного файла. Выглядит не очень. Может есть и другой вариант сериализованных данных.

File.open("config") c_wifi_ssid = string.gsub(file.readline(), "n", "") c_wifi_key = file.readline() file.close()

Пример цикла с использованием API с паузой в 1000 миллисекунд представлен ниже:

Tmr.alarm(1000, 1, function() if wifi.sta.getip()=="0.0.0.0" then --текущий ip print("connecting to AP..."..c_wifi_ssid.."/"..c_wifi_key) else print("ip: ",wifi.sta.getip()) tmr.stop() -- alarm stop end end)

Работа с GPIO

Если у вас модель модуля ESP-01 новой ревизии, то вам доступно всего 2 gpio, не прибегая к грязному хаку.


Решил отказаться от такого хака и воспользоваться тем, что есть.

Один gpio кнопка и второй выход на твердотельное реле. Есть еще Tx, но заставить работать как gpio у меня не получилось, и для индикации я просто передаю сообщения в консоль print() . Пока закостылил именно так. Чем длиннее сообщение, тем дольше и ярче вспыхивает светодиод. Владельцы данной модификации пролетают лесом и с такими функциями как (node.key, node.led), т.к. они могут использовать только GPIO16, который тоже не разведен на плате.

Все gpio могут работать в нескольких режимах (OUTPUT, INPUT, INT), но интересно то, что функция gpio.read() , прежде чем считать, подает низкий уровень, даже если установлен режим OUTPUT. То есть, чтобы получить текущее состояние выхода, это не подходит. Пришлось использовать внешнюю переменную и писать две функции для удобства, а уже через переменную определять активность.

Function on() gpio.write(8,gpio.LOW) oo=1 end function off() gpio.write(8,gpio.HIGH) oo=0 end

В качестве событий можно использовать callback gpio.trig(pin, type, function(level)) , второй параметр может принимать следующие значения «up», «down», «both», «low», «high». Тут, кажется, все ясно. Если у вас вывод находится в состоянии 1 и мы его опускаем на землю, срабатывает down, потом при поднятии срабатывает up, но, к моему сожалению, такого не происходило, в консоли я видел только down в зависимости от скорости нажатия кнопки событие срабатывало 1 или 2 раза. Решил поставить цикл с паузой и бряк по 1 на gpio.

For i=1,1000 do print(i) tmr.delay(10) tmr.wdclr() -- сбрасывает счетчик и предотвращая авто перезагрузку end

Но пауза не отработала, а без паузы устройство уходило в перезагрузку. Зато print(i) вносил хорошую задержку. Сделал через tmr.alarm , но в текущий момент активный цикл может быть только один, что не очень подходит.

Function down() tmr.alarm(100, 1, function() timer = timer + 1 -- ok if gpio.read(9) == 1 then print(timer) tmr.stop() if timer < 20 then switch() else -- ... end timer = 0 end tmr.wdclr() end) end gpio.trig(9, "down", function (gp) if timer == 0 then timer = 1 down() end end)

HTTP сервер

Сервер запускается как 2 пальца, но никакого массива параметров запроса не получите. Пока непонятно, как оптимальнее: или писать свой велосипед, или find по подстроке. Согласитесь, выглядит ужасно. В данном примере ищется 2 параметра key и mode=off,on,party. Последний режим – это простое мигание лампочкой каждые 200мс, можно поставить и побыстрее, но побоялся за лампочку и отпореле.

Function HTTPd() print("start http serv") srv=net.createServer(net.TCP, 5) srv:listen(80,function(conn) conn:on("receive",function(conn,payload) print(payload) if string.find(payload, "key="..c_api_key) then msg = "key_ok" if string.find(payload,"mode=on") then on() else if string.find(payload,"mode=off") then tmr.stop() off() else if string.find(payload, "mode=party") then party(200) end end end else msg = "error_key" end conn:send("

mode= key="api_key"

") end) conn:on("sent",function(conn) conn:close() end) end) end

Не так сложно написать простенький веб-интерфейс, а скрипты и стили расположить на внешних серверах. С модуля забирать только index страницу и общаться с ним, допустим, по json, так не будет большой нагрузки и все влезет в файловую систему, но мы становимся зависимыми от наличия интернета.

Технический прогресс принес новые, более продвинутые способы управления светом. На смену выключателям старого образца пришли беспроводные технологии. Наиболее современный способ передачи сигналов - по Wi-Fi. Технология подразумевает передачу цифровых данных по радиоканалам. Для передачи команд используется Wi-Fi выключатель.

Достоинства и недостатки

Wi-Fi устройства характеризуются следующими положительными качествами:

  1. Отсутствует необходимость в прокладке выделенной ветки электрических проводов.
  2. Управлять осветительными приборами можно централизованно - из одного командного пункта. В качестве контролирующего устройства используют смартфоны, компьютеры, планшеты или пульты дистанционного управления. Для смартфонов и других электронных устройств необходимо специальное программное обеспечение, которое можно скачать в интернете или инсталлировать с установочного диска.
  3. Обширная площадь покрытия. Цифровой радиосигнал проникает даже через стены.
  4. Безопасность системы. В случае повреждения конструкции человеку не грозит сильный удар током. Сила тока слишком мала, чтобы причинить вред человеческому организму.

Разновидности приборов и производители

Ассортимент Wi-Fi выключателей света не слишком разнообразен. Тем не менее, продукция классифицируется по ряду признаков:

  1. Выключатель управляется механическими или электронными клавишами. В последнем случае речь идет о сенсорном мониторе. Клавиши расположены на пульте дистанционного управления.
  2. Имеются выключатели как с диммерами, так и без них. Данное устройство позволяет регулировать яркость света, меняя его интенсивность. Настройку осуществляют удерживанием или прокручиванием соответствующей кнопки.
  3. Выключатель может обеспечивать контроль за одной, двумя или тремя группами осветительных приборов. Цены на оборудование, способное управлять группами приборов, непропорционально высоки.

На рынке есть несколько доминирующих производителей беспроводной техники для управления светом:

  1. Legrand (Франция). В ассортименте компании имеется, в частности, линейка продуктов под названием Celian.
  2. Vitrum (Италия). Итальянская компания использует технологию Z-Wave, позволяющую автоматизировать процессы контроля за светом в «умном доме».
  3. Delumo. Продукция от российской фирмы, производящей выключатели, диммеры и термостаты.
  4. Noolite. Выключатели белорусского производства.
  5. Livolo (Китай). Китайская компания производит специализированные устройства для автоматизации, в том числе для «умного дома». В ассортименте присутствует продукция на одноместные и двухместные рамки для выключателей.
  6. Broadlink. Компания из Китая производит широкий спектр товаров для управления осветительными приборами.
  7. Kopou. Еще одна компания из Китая предлагает диммер в виде брелока.

Схема подключения

Умные выключатели света отличаются простотой установки. При желании их можно смонтировать своими руками. Нужно лишь четко придерживаться требований инструкции. Установка займет буквально несколько минут.

Процесс монтажа включает два этапа:

  1. Установку приемника сигналов.
  2. Установку управляющей кнопки (то есть самого выключателя).

В приемнике имеется от двух до четырех проводов. Чтобы определить, какой из проводов - вход, следует прочитать инструкцию. Другие проводники являются выходами (в двойном выключателе будет пара таких проводов). Монтаж подразумевает разрывание фазы, подающей электропитание на осветительный прибор. Далее следует подключение к электроцепи.

Если имеется больше одной группы освещения, действия будут такими:

  1. Подаем нулевые провода на освещение.
  2. Разветвляем фазу на Wi-Fi.
  3. Направляем фазу по отдельности к каждой группе светильников.

Выключатель устанавливается рядом последовательных операций. Вначале высверливаем отверстие в стене. Далее устанавливаем пластиковый подрозетник в выемку. Установочный процесс здесь ничем не отличается от монтажа обычного выключателя света. Единственное существенное отличие - нет необходимости в прокладке электропроводки. Достаточно закрепить кнопку в коробке.

  • Tutorial

Этот пост - первая часть из серии рассказов о том, как можно относительно несложно сделать своими руками радиоуправляемый выключатель полезной нагрузки.
Пост ориентирован на новичков, для остальных, думаю, это будет «повторение пройденного».

Примерный план (посмотрим по ходу действия) ожидается следующий:

  1. Hardware выключателя
Сразу оговорюсь, что проект делается под мои конкретные нужды, каждый может его адаптировать под себя (все исходники будут представлены по ходу повествования). Дополнительно буду описывать те или иные технологические решения и давать их обоснования.

Начало

На текущий момент имеются следующие вводные:
  1. Хочется реализовать удаленное управление светом и вытяжкой.
  2. Выключатели есть одно- и двух-секционные (свет и свет+вытяжка).
  3. Выключатели установлены в стене из гипсокартона.
  4. Вся проводка - трехпроводная (присутствует фаза, нуль, защитное заземление).
С первым пунктом - все понятно: нормальные желания надо удовлетворять.

Второй пункт в общем-то предполагает, что надо бы сделать две разные схемы (для одно- и двух-канального выключателя), но поступим иначе - сделаем «двухканальный» модуль, но в случае, когда реально требуется только один канал - не будем распаивать часть комплектующих на плате (аналогичный подход реализуем и в коде).

Третий пункт - обуславливает некоторую гибкость в выборе форм-фактора выключателя (реально снимается существующий выключатель, демонтируется монтажная коробка, внутрь стены монтируется готовое устройство, возвращается монтажная коробка и монтируется выключатель назад).

Четвертый пункт - существенно облегчает поиск источника питания (220В есть «под рукой»).

Принципы и элементная база

Выключатель хочется сделать многофункциональным - т.е. должна остаться «тактильная» составляющая (выключатель физически должен остаться и должна сохраниться его обычная функция по включению/выключению нагрузки, но при этом должна появиться возможность управления нагрузкой через радиоканал.

Для этого обычные двухпозиционные (включено-выключено) выключатели заменим на аналогичные по дизайну выключатели без фиксации (кнопки):


Эти выключатели работают примитивно просто: когда клавиша нажата - пара контактов замкнуты, когда клавишу отпускаем - контакты размыкаются. Очевидно, что это обычная «тактовая кнопка» (собственно так ее и будем обрабатывать).

Теперь практически становится понятно, как это реализовать «в железе»:

  • берем МК (atmega8, atmega168, atmega328 - использую то, что есть «прямо сейчас»), в комплекте с МК добавляем резистор для подтяжки RESET к VCC,
  • подключаем две «кнопки» (для минимизации количества навесных элементов - будем использовать встроенные в МК резисторы подтяжки), для коммутации нагрузки воспользуемся реле с подходящими параметрами (у меня как раз были припасены реле 833H-1C-C с 5В управлением и достаточной мощностью коммутируемой нагрузки - 7A 250В~),
  • естественно, нельзя обмотку реле напрямую подключить к выходу МК (слишком высокий ток), поэтому добавим необходимую «обвязку» (резистор, транзистор и диод).
Микроконтроллер будем использовать в режиме работы от встроенного осциллятора - это позволит отказаться от внешнего кварцевого резонатора и пары конденсаторов (чуть сэкономим и упростим создание платы и последующий монтаж).

Радиоканал будем организовывать с помощью nRF24L01+:


Модуль, как известно, толерантен к 5В-сигналам на входах, но требует для питания в 3.3В, соответственно, в схему добавим еще линейный стабилизатор L78L33 и пару конденсаторов к нему.

Дополнительно добавим блокировочные конденсаторы по питанию МК.

МК будем программировать через ISP - для этого на плате модуля предусмотрим соответствующий разъем.

Собственно, вся схема описана , осталось только определиться с выводами МК, к которым будем подключать нашу «периферию» (радиомодуль, «кнопки» и выбрать пины для управления реле).

Начнем с вещей, которые уже фактически определены:

  • Радиомодуль подключается на шину SPI (таким образом, подключаем пины колодки с 1 по 8 на GND, 3V3, D10 (CE), D9 (CSN), D13 (SCK), D11 (MOSI), D12 (MISO), D2 (IRQ) - соответственно).
  • ISP - вещь стандартная и подключается следующим образом: подключаем пины разъема с 1 по 6 на D12 (MISO), VCC, D13 (SCK), D11 (MOSI), RESET, GND - соответственно).
Дальше остается определиться только с пинами для кнопок и транзисторов, управляющих реле. Но не будем торопиться - для этого подойдут любые пины МК (как цифровые, так и аналоговые). Выберем их на этапе трассировки платы (банально выберем те пины, что будут максимально просто развести до соответствующих «точек»).

Теперь следует определиться с тем, какие «корпуса» будем использовать. В этом месте начинает диктовать правила моя природная лень: мне очень не нравится сверлить печатные платы - поэтому выберем по максимуму «поверхностный монтаж» (SMD). С другой стороны, здравый смысл подсказывает, что использование SMD очень существенно сэкономит размер печатной платы.

Для новичков поверхностный монтаж покажется достаточно сложной темой, но реально это не так страшно (правда, при наличии более-менее приличной паяльной станции с феном). На youtube очень много видео-роликов с уроками по SMD - очень рекомендую ознакомиться (сам начал использовать SMD пару месяцев назад, учился как раз по таким материалам).

Сформируем «список покупок» (BOM - bill of materials) для «двухканального» модуля:
  • микроконтроллер - atmega168 в корпусе TQFP32 - 1 шт.
  • транзистор - MMBT2222ALT1 в корпусе SOT23 - 2 шт.
  • диод - 1N4148WS в корпусе SOD323 - 2 шт.
  • стабилизатор - L78L33 в корпусе SOT89 - 1 шт.
  • реле - 833H-1C-C - 2 шт.
  • резистор - 10кОм, типоразмер 0805 - 1 шт. (подтяжка RESET к VCC)
  • резистор - 1кОм, типоразмер 0805 - 1 шт. (в цепь базы транзистора)
  • конденсатор - 0.1мкФ, типоразмер 0805 - 2 шт. (по питанию)
  • конденсатор - 0.33мкФ, типоразмер 0805 - 1 шт. (по питанию)
  • электролитический конденсатор - 47мкФ, типоразмер 0605 - 1 шт. (по питанию)
Дополнительно к этому потребуются клеммники (для подключения силовой нагрузки), колодка 2х4 (для подключения радиомодуля), разъем 2х3 (для ISP).

Тут я немного хитрю и подглядываю в свои «запасники» (просто выбираю то, что там уже есть в наличии). Вы можете выбирать компоненты по своему усмотрению (выбор конкретных компонентов выходит за пределы этого поста).

Поскольку вся схема уже практически «сформирована» (по крайней мере, в голове), можно приступать к проектированию нашего модуля.

Вообще неплохо было бы все сначала собрать на макетке (используя корпуса с выводными элементами), но поскольку у меня все описанные выше «узлы» уже неоднократно проверены и воплощены в других проектах - позволю себе этап макетирования пропустить.

Проектирование

Для этого воспользуемся замечательной программой - EAGLE .

На мой взгляд - очень простая, но в то же время - очень удобная программа для создания принципиальных схем и печатных плат по ним. Дополнительные «плюсы» в копилку EAGLE: мультиплатформенность (мне приходится работать как на Win-, так и на MAC-компьютерах) и наличие бесплатной версии (с некоторыми ограничениями, которые для большинства «самодельщиков» покажутся совершенно несущественными).

Научить вас пользоваться EAGLE в этом топике не входит в мои планы (в конце статьи есть ссылка на замечательный и очень простой для освоения учебник по пользованию EAGLE), я лишь расскажу, некоторые свои «хитрости» при создании платы.

Мой алгоритм создания схемы и платы был примерно следюущий (ключевая последовательность):

Схема :

  • Создаем новый проект, внутри которого добавляем «схему» (пустой файл).
  • Добавляем МК и необходимую «обвеску» (подтягивающий резистор на RESET, блокировочный конденсатор по питанию и т.п.). Обращаем внимание на корпуса (Package) при выборе элементов из библиотеки.
  • «Изображаем» ключ на транзисторе, который управляет реле. Копируем этот кусок схемы (для организации «второго канала»). Входы ключей - пока оставляем «болтаться в воздухе».
  • Добавляем на схему разъем ISP и колодку для подлючения радиомодуля (делаем соответствующие соединения в схеме).
  • Для питания радиомодуля добавляем в схему стабилизатор (с соответствующими конденсаторами).
  • Добавляем «разъемы» для подключения «кнопок» (один пин разъема сразу «заземляем», второй - «болтается в воздухе»).
После этих действий у нас получается полная схема, но пока остаются неподключенными к МК транзисторные ключи и «кнопки».
  • Размещаю клеммники для подключения силовой нагрузки.
  • Правее клеммников - реле.
  • Еще правее - элементы транзисторных ключей.
  • Стабилизатор питания для радиомодуля (с соответствующими конденсаторами) размещаю рядом с транзисторными ключами (в нижней части платы).
  • Размещаю колодку для подключения радиомодуля снизу справа (обращаем внимание на то, в каком положении окажется сам радиомодуль при паравильном подключении к этой колодке - по моей задумке он должен не выступать за пределы основной платы).
  • Разъем ISP размещаю рядом с разъемом радиомодуля (поскольку используются одни и те же «пины» МК - чтобы было проще разводить плату).
  • В оставшемся пространстве располагаю МК (корпус надо «покрутить», чтобы определить наиболее оптимальное его положение, чтобы обеспечить минимальную длинну дорожек).
  • Блокировочные конденсаторы размещаем максимально близко к соответствующим выводам (МК и радиомодуля).
После того, как элементы размещены на своих местах - делаю трассировку проводников. «Землю» (GND) - не развожу (позже сделаю полигон для этой цепи).

Теперь уже можно определиться с подключением ключей и кнопок (смотрю, какие пины ближе к соответствующим цепям и которые проще будет подключить на плате), для этого хорошо перед глазами иметь следующую картинку:


Расположение чипа МК на плате у меня как раз соответствует картинке выше (только повернут на 45 градусов по часовой стрелке), поэтому мой выбор следующий:
  • Транзисторные ключи подключаем на пины D3, D4.
  • Кнопки - на A1, A0.
Внимательный читатель увидит, что на схеме ниже фигурирует atmega8, в описании упоминается atmega168, а на картинке с чипом - вообще amega328. Пусть это вас не смущает - чипы имеют одинаковую распиновку и (конкретно для этого проекта) взаимозаменяемы и отличаются только количеством памяти «на борту». Выбираем то, что нравится/имеется (я в последствии в плату запаял 168 «камушек»: памяти побольше, чем у amega8 - можно будет побольше логики реализовать, но об этом во второй части).

Собственно, на этом этапе схема принимает финальный вид (делаем на схеме соответствующие изменения - «подключаем» ключи и кнопки на выбранные пины):


После этого уже доделываю последние соединения в проекте печатной платы, «набрасываю» полигоны GND (поскольку лазерный принтер плохо печатает сплошные полигоны, делаю его «сеточкой»), добавляю пару-тройку переходов (VIA) с одного слоя платы на другой и проверяю, что не осталось ни одной не разведенной цепи.


У меня получилась платка размером 56х35мм.
Архив со схемой и платой для Eagle версии 6.1.0 (и выше) находится по ссылке .

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

Изготовление печатной платы

Плату делаю методом ЛУТ (Лазерно-Утюжная Технология). В конце поста есть ссылка на материалы, которые мне очень помогли.

Приведу для порядка основны шаги по изготовлению платы:

  • Печатаю на бумаге Lomond 130 (глянцевая) нижнюю сторону платы.
  • Печатаю на такой же бумаге верхнюю сторону платы (зеркально!).
  • Складываю полученные распечатки изображениями внутрь и на просвет совмещаю (очень важно получить максимальную точность).
  • После этого степлером скрепляю листки бумаги (постоянно контролируя, чтобы совмещение не было нарушено) с трех сторон - получается «конверт».
  • Вырезаю подходящего размера кусок двустороннего стеклотекстолита (ножницами по металлу или ножевкой).
  • Стеклотекстолит нужно обработать очень мелкой шкуркой (убираем окислы) и обезжирить (я делаю это ацетоном).
  • Полученную заготовку (аккуратно, за края, не трогая очищенные поверхности) помещаю в полученный «конверт».
  • Разогреваю утюг «на полную» и тщательно утюжу заготовку с двух сторон.
  • Оставляю плату остыть (минут 5), после этого можно под струей воды отмачивать бумагу и удалять ее.
После того, как кажется, что вся бумага удалена - вытираю плату насухо и под светом настольной лампы рассматриваю на предмет дефектов. Обычно находится несколько мест, где остались кусочки глянцевого слоя бумаги (выглядят как белесые пятнышки) - обычно эти остатки находятся в наиболее узких местах между проводниками. Я их удаляю обычной швейной иглой (важна твердая рука, особенно при изготовлении плат под «мелкие» корпуса).

Тонер смываю ацетоном.

Совет : когда делаете мелкие платы, сделайте заготовку под нужное количество плат, просто разместив изображения верхней и нижней части платы в нескольких экземплярах - и уже это «комбинированное» изображение «накатывайте» на заготовку из стеклотекстолита. После травления достаточно будет разрезать заготовку на отдельные платы.
Только обязательно проверяйте размеры плат при вводе на бумагу: некоторые программы любят «чуть-чуть» изменить масштаб изображения при выводе, а это недопустимо.

Контроль качества

После этого делаю визуальный контроль (требуется хорошее освещение и лупа). Если есть какие-то подозрения, что имеется «залипуха» - контроль тестером «подозрительных» мест.

Для самоуспокоения - контроль тестером всех соседствующих проводников (удобно пользоваться режимом «прозвонка», когда при «коротком замыкании» тестер подает звуковой сигнал).

Если все-таки где-то обнаружен ненужный контакт - исправляю это острым ножом. Дополнительно обращаю внимание на возможные «микротрещины» (пока просто фиксирую их - исправлять буду на этапе лужения платы).

Лужение, сверление

Я предпочитаю плату перед сверлением залудить - так мягкий припой позволяет чуть проще сверлить и сверло на «выходе» из платы меньше «рвет» медные проводники.

Сначала изготовленную печатную плату необходимо обезжирить (ацетон или спирт), можно «пройтись» ластиком, чтобы убрать появившиеся окислы. После этого - покрываю плату обычным глицерином и дальше уже паяльником (температура где-то около 300 градусов) с небольшим количеством припоя «вожу» по дорожкам - припой ложится ровно и красиво (блестит). Лудить надо достаточно быстро, чтобы дорожки не поотваливались.

Когда все готово - отмываю плату с обычным жидким мылом.


После этого уже можно сверлить плату.
С отверстиями диаметром более 1мм все достаточно просто (просто сверлю и все - надо только вертикальность постараться соблюсти, тогда выходное отверстие попадет в отведенное ему место).


А вот с переходными отверстиями (я их делаю сверлом 0,6мм) несколько сложнее - выходное отверстие, как правило, получается немного «рваным» и это может приводить к нежелательному разрыву проводника.
Тут можно посоветовать делать каждое отверстие за два прохода: засверлить сначала с одной стороны (но так, чтобы сверло не вышло с другой стороны платы), а затем - аналогично с другой стороны. При таком подходе «соединение» отверстий произойдет в толще платы (и небольшая несоосность не будет проблемой).

Монтаж элементов

Сначала распаиваются межслойные перемычки.
Там где это просто переходные отверстия - просто вставляю кусочек медной проволоки и запаиваю его с двух сторон.
Если «переход» осуществляется через одно из отверстий для выводных элементов (разъемы, реле и т.п.): распускаю многожильный провод на тонкие жилы и аккуратно запаиваю кусочки этой жилы с двух сторон в тех отверстиях, где нужен переход, при этом минимально занимая пространство внутри отверстия. Это позволяет реализовать переход и отверстия остаются достаточно свободными для того, чтобы соответствующие разъемы нормально встали на свои места и были распаяны.

Тут опять следует вернуться к этапу «контроль качества» - прозваниваю тестером все подозрительные ранее и полученные в ходе лужения/сверления/создания переходов новые места.
Проверяю, что обнаруженные ранее микротрещины устранены припоем (или устраняю припаивая тонкий проводник поверх трещинки, если после лужения трещинка осталась).

Устраняю все «залипухи», если такие все-таки появились в процессе лужения. Это гораздо проще сделать сейчас, чем в процессе отладки уже полностью собранной платы.

Теперь можно приступать непосредственно к монтажу элементов.

Мой принцип: «снизу вверх» (сначала распаиваю наименее высокие компоненты, потом те, что «повыше» и те, что «высокие»). Такой подход позволяет с меньшими неудобствами разместить все элементы на плате.

Таким образом, сначала распаиваются SMD-компоненты (я начинаю с тех элементов, у которых «больше ног» - МК, транзисторы, диоды, резисторы, конденсаторы), потом дело доходит и до выводных компонентов - разъемов, реле и т.п.

Таким образом, получаем уже готовую плату.

Доброго времени суток, уважаемый читатель.

Немного лирики в начале. Идея «умного» выключателя света совсем не нова и, наверное, это первое, что приходит в голову тем, кто начал знакомство с платформой Arduino и элементами IoT. И я этому не исключение. Поэкспеременировав с элементами цепей, моторчиками и светодиодами хочется сделать нечто более прикладное, что востребовано в повседневной жизни и, самое главное, будет удобно в использовании, а не останется жертвой эксперимента в неугоду комфорту.

В этой статье я расскажу, как я сделал выключатель, который будет работать как обычный (т.е. что обычно закреплен на стене) и в то же время позволит управлять им через WiFi (или через Интернет, как это сделано в данном случае).

Итак, составим список того, что понадобится для осуществления задуманного. Сразу скажу, я намеревался не тратиться сильно на комплектующие и выбирал компоненты по отзывом на форумах и соотношению цены к качеству. Поэтому некоторые компоненты возможно покажутся тут неуместными для опытных электролюбителей, но прошу не судить строго, т.к. я только новичек в электромеханике и буду очень признателен за комментарии более опытных специалистов.

Так же мне понадобились: сервер, с помощью которого выключатель будет управляться через Интернет, Arduino Uno, с помощью которого я программировал ESP, роутер и расходные материалы как провода, клеммы и т.д., всё это может варироваться от вкусов и никак не повлияет на конечный результат.

Цены взяты из Ebay, где я их и покупал.

А вот как выглядят элементы из таблицы:

Теперь можно составить и схему подключения:

Как вы наверное заметили, схема очень простая. Все собиратся легко, быстро и без пайки. Эдакий рабочий прототип, с которым не нужно долго возиться. Всё связано проводами и клеммами. Единственный минус это то, что реле не влезло в гнездо выключателя. Да, изначально я планировал запихнуть всё это в стену за выключателем, чтобы смотрелось эстетично. Но к моему сожалению места в гнезде оказалось мало и реле просто напросто не влезло ни вдоль, ни поперек:

Поэтому временно я вынес реле за гнездо, до тех пор пока не найду подходящую коробку выключателя с розеткой чтобы спрятать железо внутрь. Но нет ничего более постоянного, чем временное, не правда ли? Поэтому все это выглядит сейчас вот так:

Изолента спасёт от удара током… надеюсь.

А теперь поговорим о програмной части.

И прежде чем приступать к разбору кода и деталей, я приведу общую схему реализации управления лампочкой.

Надеюсь, я когда нибудь все перепишу и связь будет основана на более быстром протоколе нежели HTTP, но для начала сойдет. Удаленно лампочка меняет свое состояние приблизительно за 1-1.5 секунды, а с выключателя моментально, как и подобает порядочному выключателю.

Программировании ESP8266-01

Самый простой способ сделать это - с помощью Arduino. Скачать необходимые библиотеки для Arduino IDE можно с GitHub . Там же все инструкции по установке и настройке.

Далее нам нужно подключить ESP к компьютеру, для этого понадобится либо USB to Serial Адаптер (типа FTDi , CH340 , FT232RL) либо любая Arduino платформа (у меня была Arduino Uno) с выходами RX и TX.

Стоит отметить, что ESP8266-01 питается от 3.3 Вольта, а значит ни в коем случае не подключайте его к питанию Arduino, которые (часто) питаются от 5 Вольт, напрямую иначе все сгорит к чертям. Можно использовать понижатель напряжения, который приведен в таблице выше.

Схема подключения проста: подключаем TX , RX и GND ESP к RX, TX и GND адаптера/Arduino соотвественно. После этого, собственно, подключение готово к использованию. Микроконтроллер можно программировать используя Arduino IDE.

Пара нюансов при использовании Arduino Uno:

  • На Uno есть выход для 3.3В, но его оказалось недостаточно. При подключении к нему ESP, все вроде работает, индикаторы горят, но связь с COM портом теряется. Поэтому я использовал другой источник питания на 3.3В для ESP.
  • К тому же у UNO не возникло никаких проблем при общении с ESP, с учетом того, что UNO питался от 5В, а ESP от 3В.
После нескольких экспериментов с ESP8266-01, выяснилось, что ESP чувствительны к подключенным к GPIO0 и GPIO2 напряжениям. В момент старта они ни в коем случае не должны быть заземлены, если вы намереваетесь запустить его в штатном режиме. Более подробно о старте микроконтроллера . Я этого не знал и мне пришлось слегка менять схему, т.к. в версии ESP-01 присутсвтуют только эти 2 пина и в моей схеме используются оба.

А вот и сама программа для ESP:

Показать код

#include #include #include #include #include extern "C" { // эта часть обязательна чтобы получить доступ к функции initVariant #include "user_interface.h" } const char* ssid = "WIFISSID"; // Имя WiFi const char* password = "***************"; // Пароль WiFi const String self_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // токен для минимальной безопасности связи const String serv_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // токен для минимальной безопасности связи const String name = "IOT_lamp"; // имя выключателя, читай лампочки const String serverIP = "192.168.1.111"; // внутренний IP WEB сервера bool lamp_on = false; bool can_toggle = false; int button_state; ESP8266WebServer server(80); // веб сервер HTTPClient http; // веб клиент const int lamp = 2; // Управляем реле через GPIO2 const int button = 0; // "Ловим" выключатель через GPIO0 // функция для пинга лампочки void handleRoot() { server.send(200, "text/plain", "Hello! I am " + name); } // функция для недействительных запросов void handleNotFound(){ String message = "not found"; server.send(404, "text/plain", message); } // Да будет свет void turnOnLamp(){ digitalWrite(lamp, LOW); lamp_on = true; } // Да будет тьма void turnOffLamp(){ digitalWrite(lamp, HIGH); lamp_on = false; } // Отправляем серверу события ручного вкл./выкл. void sendServer(bool state){ http.begin("http://"+serverIP+"/iapi/setstate"); String post = "token="+self_token+"&state="+(state?"on":"off"); // По токену сервер будет определять что это за устройство http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(post); http.end(); } // Изменяем состояние лампы void toggleLamp(){ if(lamp_on == true) { turnOffLamp(); sendServer(false); } else { turnOnLamp(); sendServer(true); } } // Получаем от сервера команду включить void handleOn(){ String token = server.arg("token"); if(serv_token != token) { String message = "access denied"; server.send(401, "text/plain", message); return; } turnOnLamp(); String message = "success"; server.send(200, "text/plain", message); } // Получаем от сервера команду выключить void handleOff(){ String token = server.arg("token"); if(serv_token != token) { String message = "access denied"; server.send(401, "text/plain", message); return; } turnOffLamp(); String message = "success"; server.send(200, "text/plain", message); } // Устанавливаем MAC чтобы давать одинаковый IP void initVariant() { uint8_t mac = {0x00, 0xA3, 0xA0, 0x1C, 0x8C, 0x45}; wifi_set_macaddr(STATION_IF, &mac); } void setup(void){ pinMode(lamp, OUTPUT); pinMode(button, INPUT_PULLUP); // Важно сделать INPUT_PULLUP turnOffLamp(); WiFi.hostname(name); WiFi.begin(ssid, password); // Ждем пока подключимся к WiFi while (WiFi.status() != WL_CONNECTED) { delay(500); } // Назначем функции на запросы server.on("/", handleRoot); server.on("/on", HTTP_POST, handleOn); server.on("/off", HTTP_POST, handleOff); server.onNotFound(handleNotFound); // Стартуем сервер server.begin(); } void loop(void){ server.handleClient(); // Проверяем нажатие выключателя button_state = digitalRead(button); if (button_state == HIGH && can_toggle) { toggleLamp(); can_toggle = false; delay(500); } else if(button_state == LOW){ can_toggle = true; } }


Пару замечаний по коду:
  • Очень важно объявить пин GPIO0 как pinMode(button, INPUT_PULLUP ), т.к. в схеме мы не используем резистор для этой кнопки. А у ESP есть свои «вшитые» для этих самых целей.
  • При отлове состояния кнопки желательно установить задержку при считывании чтобы избежать ложного срабатывания в момент нажатия.

Программировании WEB сервера

Тут можно дать волю своей фантазии и использовать любые доступные средства для создания сервиса который будет обрабатывать запросы присылаемые выключателем и отправлять запросы на включение/выключение.

Я использовал для этих целей