Беспроводный выключатель, что это такое и стоит ли его устанавливать. Устройство, принцип действия и подключение Wi-Fi выключателя Отключение света по wifi

  • Интернет вещей ,
  • DIY или Сделай сам
  • Доброго времени суток, уважаемый читатель.

    Немного лирики в начале. Идея «умного» выключателя света совсем не нова и, наверное, это первое, что приходит в голову тем, кто начал знакомство с платформой 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 сервера

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

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

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

    Немного лирики в начале. Идея «умного» выключателя света совсем не нова и, наверное, это первое, что приходит в голову тем, кто начал знакомство с платформой 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 сервера

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

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

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

    Сильные и слабые стороны устройства

    Wi-fi выключатель света имеет следующие достоинства:

    1. Нет необходимости прокладывать дополнительный кабель.
    2. Есть возможность централизованно осуществлять управление осветительными устройствами, то есть из одной командной точки. Для того, чтобы управлять беспроводным выключателем света можно использовать смартфон, планшет, компьютер, а также пульт дистанционного управления. Для планшетов и остальных электронных устройств следует установить необходимое программное обеспечение. Его можно загрузить с интернета либо установить с диска.
    3. Большая площадь покрытия сигнала. Несмотря на стены, цифровой радиосигнал проникает в нужное помещение.
    4. Данная система является очень безопасной. Даже если конструкция устройства будет повреждена, это не грозит жильцу сильным ударом тока, ведь у Wi-fi выключателя очень незначительная сила тока.
    5. Устройство нормально работает со всеми видами лампочек (светодиодные, накаливания, энергосберегающие).
    6. Можно устанавливать разные комбинации, а также режимы работы осветительных приборов.

    Если говорить о недостатках выключателей света, то их только несколько. Главные — цена намного выше обычных клавишных моделей и существует определенный риск разряда батареек в пульте, либо плохой сигнал Wi-fi.

    Конструктивные особенности

    В комплекте Wi-fi выключателей есть приемник и передатчик. Приемник – это реле на управлении. Можно осуществлять управление через смартфон с доступом к сети Wi-fi, либо с помощью пульта ДУ. Когда реле получает определенный сигнал, то оно замыкает цепь электропроводки. Установка реле производится возле или внутри светильника. Это возможно благодаря небольшим габаритам устройства. Причина установки прибора возле светильника заключается в том, чтобы он не выпадал из радиуса, в котором работает передатчик. Если в помещении точечное освещение, то приемник можно разместить в распределительной коробке или за подвесным потолком.

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

    Виды выключателей и лучшие производители

    На данное время ассортимент Wi-fi выключателей света не слишком большой. Однако продукция классифицируется по нескольким признакам:

    1. Аппарат может регулироваться электронными или механичными клавишами. В первом случае идет речь о сенсорном дисплее устройства. Клавиши находятся на дистанционном управлении (пульте).
    2. Также есть выключатели света как с , так и обычные клавишные. С помощью первых устройств можно осуществлять регулировку яркости освещения, тем самым меняя его интенсивность. Для настройки яркости следует или удерживать, или прокручивать соответствующую кнопку.
    3. Данный выключатель может обеспечивать полный контроль не только одной, но и двумя или тремя группами осветительных устройств. Однако цена на беспроводное устройство, которое может управлять целыми группами, достаточно высока.

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

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

    На видео ниже предоставлен обзор еще одной интересной модели Wi-fi выключателя света:

    Правильное подключение

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

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

    Процесс подключения состоит всего из двух этапов:

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

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

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

    • ноль подается на все осветительные приборы;
    • фаза разветвляется в Wi-fi выключателе;
    • фазу следует подать отдельно на каждую группу светильников.

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

    Нравится(0 ) Не нравится(0 )

    Технический прогресс принес новые, более продвинутые способы управления светом. На смену выключателям старого образца пришли беспроводные технологии. Наиболее современный способ передачи сигналов - по 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. Направляем фазу по отдельности к каждой группе светильников.

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


    Данная статья будет посвящена 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, так не будет большой нагрузки и все влезет в файловую систему, но мы становимся зависимыми от наличия интернета.