25 апреля, 2024

Как все контролировать с помощью беспроводного (Wi-Fi) управляющего реле, используя aRest

Содержание:

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

Как работает электрическое реле

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

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

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

Подключение платы ESP8266

У нас есть реле, способное реагировать на какой-нибудь датчик. Но мы можем управлять им точнее, если подключим к нему специальный микроконтроллер. Когда такой микроконтроллер, к которому мы подключаем наше реле, подключается к Wi-Fi, то у нас появляется возможность удаленного управления нашим реле с любого устройства, подключенного к той же сети. ESP8266 — это популярный чипсет для создания прототипов IoT-устройств («Интернета вещей») для Arduino, который идеально подходит для этого применения.

Чип ESP8266 очень легко запрограммировать. Для более удобного подключения его к нашему силовому реле можно взять специальную плату для разработки, например, D1 Mini или NodeMCU. Эти платы на базе ESP8266 недороги и с ними легко работать. Если покупать их у китайских онлайн-ретейлеров, то их стоимость может составить около $2,50. Если вы готовы ждать доставки из Китая, то добавление к вашему проекту «Умного дома» Wi-Fi функциональности обойдется сравнительно недорого. Если покупать их на Amazon и других похожих площадках, то цены на них будут также доступными.

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

Использование aRest для удаленного управления

Одна из лучших бесплатных платформ для удаленного управления устройствами Arduino — это aRest. Этот проект, написанный на Arduino для беспроводных чипсетов ESP8266, содержит REST API, который позволяет легко обмениваться данными с любым пином микроконтроллера. Это означает, что вы можете записать некоторый код на ваше ESP8266-устройство, найти его в вашей Wi-Fi сети, а затем отправлять ему команды из браузера, подключенного к той же Wi-Fi сети.

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

Если в сети есть устройство с aRest, то мы можем отправлять на любой пин этого устройства цифровые или аналоговые команды. Чтобы управлять реле, мы подключим сигнальный контакт от Arduino, а затем подключимся к нему через Wi-Fi. Затем нужно его активировать, с помощью аналоговой команды установив в режим вывода. Как только этот контакт будет поставлен в режим вывода, то установив его в 1 или 0, мы сможем отправить цифровые команды на этот контакт для включения или выключения реле.

Читать также:  Как удаленно вести прослушку микрофона на взломанном компьютере

Что вам понадобится

Собрать все это вместе на удивление легко. Вам нужно будет соединить все вместе на плате или на мини-плате с пятью джемперами, реле и устройством на базе ESP8266. Для второго варианта мы будем использовать плату D1 Mini, но NodeMCU или другое устройство на базе ESP8266 тоже вполне подойдут. Для подключения реле на самой плате должно быть одноканальное силовое реле. Вот что вам понадобится, чтобы собрать все вместе (на полной, половинной или мини-плате).

Вот список того, что мы в конечном итоге использовали:

  • NodeMCU на базе ESP8266 CP2102 или D1 Mini (~ $6 за штуку)
  • Набор макетов без припоя с джемперами (~ $10, но вы, вероятно, cможете найти одну плату с несколькими джемперами и за меньшие деньги)
  • Плата одноканального релейного модуля (~ $9)
  • RGB LED (~ $9 за целую упаковку, в пересчете на 1 штуку — это копейки)
  • Кабель Micro-USB (наверняка у вас уже есть такой)
  • Модуль питания 5В (возможно, что он входит в комплект с платой)
  • Адаптер питания
  • Резисторы (необязательно, но если вы хотите, чтобы светодиод работал дольше, то желательно)

Шаг 1. Установите Arduino IDE

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

Шаг 2. Установите драйвер CH340G (если нужно)

Вам потребуется установить драйвер CH340G. Он необходим для подключения D1 Mini к USB-интерфейсу. Сам процесс довольно несложен. Чтобы упростить себе задачу, можно использовать ссылки ниже, они приведут вас прямо к нужной версии драйвера (которые на момент написания этой статьи были новейшими):

CH340G Драйвер для Windows

CH340G Драйвер для MacOS

Шаг 3. Добавьте правильную плату

После того, как вы установите его и откроете, нужно нажать на выпадающее меню «Arduino», а затем выбрать «Настройки» («Preferences»). Затем вставьте следующий URL-адрес в поле «URL-адреса менеджера дополнительных плат» («Additional Boards Manager URLs») и нажмите «ОК», чтобы продолжить.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Далее нужно добавить NodeMCU в Менеджер Плат. Для этого нажмите «Инструменты» («Tools»), а затем наведите курсор на раздел «Плата» («Board»). Вы увидите выпадающий список поддерживаемых плат. Вверху кликните по «Менеджер плат» («Boards Manager»), откроется окно, в котором можно добавить больше плат.

Когда откроется окно Менеджера плат, введите «esp8266» в строку поиска. Выберите «esp8266» от «ESP8266 Community» и кликните «Установить» («Install»), чтобы добавить поддержку D1 Mini, NodeMCU или другого устройства ESP8266. Нажмите «Закрыть» («Close») когда закончите.

Как только это будет сделано, вы должны быть готовы запрограммировать вашу ESP8266-плату. Подключите D1 Mini, NodeMCU или аналогичный микроконтроллер к компьютеру с помощью Micro-USB кабеля. Когда вы кликните «Инструменты» («Tools»), вы должны увидеть, что нужное устройство было уже выбрано автоматически. Если нет, наведите курсор на «Платы» («Boards»), затем выберите «WeMod D1 RS & mini» или «NodeMCU 1.0 (модуль ESP-12E)» в зависимости от используемой вами платы.

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

Шаг 4. Скачайте пример кода

Ниже приведен полный код для управления реле Wi-Fi. Это адаптированный код, из примеров из репозитория aRest на GitHub. И хотя вы не найдете этот код в репозиториях aRest, вы сможете найти его в репозиториях пользователя Skickar на GitHub.

/*
  This a simple example of the aREST Library for the ESP8266 WiFi chip.
  This example illustrate the cloud part of aREST that makes the board accessible from anywhere
  See the README file for more details.

  Written in 2015 by Marco Schwartz under a GPL license and forked by Skickar
*/

// Import required libraries
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <aREST.h>

// Clients
WiFiClient espClient;
PubSubClient client(espClient);

// Create aREST instance
aREST rest = aREST(client);

// Unique ID to identify the device for cloud.arest.io
char* device_id = "unique_device_id";

// WiFi parameters
const char* ssid = "NetworkName";
const char* password = "Password";

// Variables to be exposed to the API
int temperature;
int humidity;
String local_ip = "";

// The port to listen for incoming TCP connections
#define LISTEN_PORT           80

// Create an instance of the server
WiFiServer server(LISTEN_PORT);

// Functions
void callback(char* topic, byte* payload, unsigned int length);

void setup(void)
{
  // Start Serial
  Serial.begin(115200);

  // Set callback
  client.setCallback(callback);

  // Init variables and expose them to REST API
  temperature = 24;
  humidity = 40;
  rest.variable("temperature", &temperature);
  rest.variable("humidity", &humidity);
  rest.variable("local_ip", &local_ip);

  // Give name & ID to the device (ID should be 6 characters long)
  rest.set_id(device_id);
  rest.set_name("esp8266");

  // Connect to WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Local server started on IP:");

  // Print the IP address
  Serial.println(WiFi.localIP());
  local_ip = ipToString(WiFi.localIP());

}

void loop() {

  // Connect to the cloud
  rest.handle(client);

  // Handle Local aREST calls
  WiFiClient clientLocal = server.available();
  if (!clientLocal) {
    return;
  }
  while(!clientLocal.available()){
    delay(1);
  }
  rest.handle(clientLocal);

}

// Handles message arrived on subscribed topic(s)
void callback(char* topic, byte* payload, unsigned int length) {

  rest.handle_callback(client, topic, payload, length);

}

// Convert IP address to String
String ipToString(IPAddress address)
{
  return String(address[0]) + "." +
    String(address[1]) + "." +
    String(address[2]) + "." +
    String(address[3]);
}

Этот код создаст сервер aRest на вашем ESP8266-устройстве, который будет ждать HTTP-команды на 80-м порту по IP-адресу, назначенному вашим маршрутизатором после того, как оно подключится к Wi-Fi сети. Кроме того, этот код выведет IP-адрес вашего устройства через последовательное соединение, что позволит легко найти его в сети.

Читать также:  Chainalysis: вирусы-вымогатели уйдут в небытие

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

Теперь осталась только одна вещь, которую нужно сделать, чтобы скрипт заработал.

Шаг 5. Измените в коде ваши учетные данные для Wi-Fi

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

// WiFi parameters
const char* ssid = "NetworkName";
const char* password = "Password";

Измените эту часть, заменив «NetworkName» и «Password» на имя и пароль вашей Wi-Fi сети. Как только вы это сделаете, ваш код должен позволить ESP8266-устройству подключаться к Wi-Fi сети и отправлять ему команды.

Шаг 6. Подключите реле и Esp8266-плату

Теперь поместите D1 Mini или NodeMCU на вашу плату. Чтобы все заработало, нам нужно кое-что подключить.

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

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

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

Теперь, когда сигнал от D2 включает реле, питание от D3 будет поступать на светодиод и обратно на контакт заземления на ESP8266-плате. Теперь, когда все подключено, пришло время загрузить наш код на устройство.

Шаг 7. Загрузите код и включите устройство

Подключите ESP8266-плату с помощью Micro-USB кабеля и убедитесь, что вы выбрали правильную плату и порт в Arduino IDE. Затем кликните по кнопке проверки («Check»), чтобы убедиться, что все работает нормально, и если код успешно скомпилируется, то кликните по кнопке со стрелкой, чтобы отправить код в ESP8266.

Если вы получаете какие-либо предупреждения о том, что какая-нибудь библиотека не найдена, то кликните кнопку «Эскиз» («Sketch»), затем «Подключить библиотеку» («Include Library»), а затем «Управление библиотеками» («Manage Libraries»). Это должно открыть окно поиска библиотек, где вы можете ввести название той библиотеки, которую Arduino считает отсутствующей. Как только вы установите нужную библиотеку, код должен скомпилироваться и будет готов к загрузке в ESP8266.

Читать также:  Как создать загрузочную USB-флешку из Терминала Ubuntu

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

Шаг 8. Получите IP-адрес от последовательного соединения

Теперь, когда мы залили код на устройство, давайте посмотрим, как идут дела на последовательном мониторе. Чтобы получить доступ к нему, нажмите «Инструменты» («Tools»), затем «Последовательный монитор» («Serial Monitor»). Установите скорость передачи в 115200, и вы должны увидеть сообщение, похожее на то, которое показано на скриншоте ниже, при условии, что ваше устройство сумело подключиться к Wi-Fi.

Теперь, когда у нас есть IP-адрес (в нашем примере это 192.168.0.87), можно отдавать команды для активации реле и подачи напряжения на контакты.

Шаг 9. Включите выходные контакты

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

http://192.168.0.87/analog/2/1

Что она делает? Мы отправляем HTTP-запрос на прослушивающее устройство, расположенное по адресу 192.168.0.87, сообщая ему, что мы отправляем аналоговый запрос на контакт № 2, чтобы установить его аналоговое значение в 2 из максимально возможного 255. Это включит его питание на низкий уровень и установит его в режим вывода.

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

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

http://192.168.0.87/analog/2/20

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

http://192.168.0.87/analog/3/1

Мы должны увидеть ответ, подобный этому.

Реле должно быть готово переключить питание, которое мы только что включили, с контакта D2 на светодиод одной завершающей командой.

Шаг 10. Запустите реле из веб-браузера

Прекрасно, теперь момент истины! Давайте отправим цифровой, а не аналоговый сигнал на реле по контакту D3, чтобы полностью включить его. Это должно выключить реле, при этом вы услышите звук щелчка — это электромагнит завершит соединение. В этот момент светодиод должен включиться, потому что питание от контакта D2 теперь идет через реле и через светодиод.

http://192.168.0.87/digital/3/1

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

Wi-Fi реле дает вам контроль над питанием любых устройств

Его можно использовать для беспроводного управления выключателем от простой домашней автоматизации (типа «Умный дом») до удаленного отключения питания критически важного компьютера в нужный момент. И хотя создание помех Wi-Fi может блокировать выполнение этих запросов, но сама возможность быстро настроить дистанционно управляемое реле в любом месте, где есть доступ к Wi-Fi, всегда полезна для любого хакера. Если вам больше по душе иметь доступ к вашему устройству из любого места с доступом в Интернет, то aRest предлагает полноценную панель управления подключенными устройствами и автоматизации отправки команд через Интернет.

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

Надеемся вам понравилась эта статья по управлению электрическим реле с помощью ESP8266-устройства через Wi-Fi. Если у вас есть какие-либо вопросы, не стесняйтесь, пишите их в комментариях.

Добавить комментарий