Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)

Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Из этой статьи мы с вами узнаем, как сделать собственный коммутатор WiFi с модулем ESP и как управлять любым устройством с его помощью.
В настоящее время мы живем в эпоху Интернета вещей, и коммутаторы Wi-Fi являются его основой. Это устройства, которые могут включать, выключать бытовую технику, такую как освещение, вентиляторы и т. д. Удаленно или автономно, управляемые мобильными телефонами, голосом, температурой в помещении или даже прогнозами погоды.
Их работа основана на беспроводной связи (обычно известной как Wi-Fi), которая позволяет им подключаться к Интернету и обрабатывать данные, чтобы они могли принимать меры в соответствии с определенными условиями, установленными пользователем.
Инструменты и материалы:-Модуль ESP8266 (ESP-01);
-Печатная плата;
-Макетная плата;-Провода;-Ардуино нано;-Три резистора по 1 кОм 1/4 Вт;-Два резистора по 470 Ом 1/2 Вт;
-Двухрядный гнездовой разъем (U3);
-MOC3010 (опто-симистор);
-Симистор BTA24;
-Конденсатор 100нФ 400В;
-Источник питания 3,3 В;
-Клеммная колодка 2p;
-Клеммная колодка 3p;
Шаг первый: схема и печатная плата
Печатную плату можно делать самостоятельно или заказать на специализированном сайте.
Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Шаг второй: устройство Ubidots и создание переменных
Ubidots — это конструктор приложений Интернета вещей (IoT) с аналитикой и визуализацией данных. Для работы устройства необходимо создать на сервисе учетную запись.
После регистрации переходим в раздел «Устройство» учетной записи Ubidots и создаем новое устройство под названием «wifiswitch».
Внутри вашего устройства «wifiswitch» создаем переменную с именем «light».
Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Шаг третий: создание панели инструментов и виджета Ubidots
После того, как устройство и переменная созданы, нужно создать информационную панель и виджет для управления светом с веб-панели или мобильной панели управления. Чтобы создать новую информационную панель, нажимаем «Данные> Информационная панель». Затем нажимаем значок плюса и завершаем настройку приборной панели по своему желанию.
Теперь создаем виджет управления, чтобы установить состояние лампочки, связанной с переменной «свет». Чтобы создать виджет управления, выбираем значок плюса, расположенный в правом верхнем углу страницы. Затем нажимаем «Переключить». В качестве типа виджета, выбираем переменную, которой нужно управлять, и завершаем настройку виджета по своему желанию.
Теперь все готово для программирования и тестирования проекта.
Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Шаг четвертый: программирование с помощью Arduino IDE
Загружаем Arduino IDE.
Открываем IDE Arduino и выбираем Файлы -> Настройки.
Добавляем приведенный ниже URL-адрес в поле Дополнительные URL-адреса Board Manager. Можно добавить несколько URL-адресов, разделив их запятыми.
http://arduino.esp8266.com/stable/package_esp8266…
Открываем и устанавливаем плату ESP8266 в диспетчере плат: Инструменты -> Плата -> Диспетчер плат.
Быстро найти плату можно набрав «ESP8266» в строке поиска.
Дальше выбираем Generic ESP8266 board в меню Инструменты -> Платы.
Переходим в Инструменты -> Порт: -> Выберите порт.
Убеждаемся, что скорость загрузки IDE составляет 115200, перейдя в Инструменты -> Скорость загрузки -> 115200
Загружаем библиотеку UbidotsESPMQTT. Кликаем Эскиз –> Включить библиотеку –>> Добавить .ZIP — библиотеку и выбираем библиотеку Ubidots ESP8266 MQTT.
Перегружаем Arduino IDE.
Шаг пятый: программирование ESP8266
После того, как ESP8266 настроен, можно начать публикацию и подписку данных от / на Ubidots для управления коммутатором Wi-Fi.
Копируем и вставляем следующий код в среду разработки Arduino. Настраиваем SSID и пароль Wi-Fi, а также свой токен Ubidots.
Загружаем код:

Как улучшить зрение за короткий срок
7 часов назад
Как улучшить зрение за короткий срок
9 часов назад

Магнитная щетка для мытья окон: что это...
6 часов назад
Средство способное обновить любую деревянную поверхность
8 часов назад

/****************************************     * Libraries     ****************************************/    #include "UbidotsESPMQTT.h"    /****************************************     * Define constants      ****************************************/    #define TOKEN "..........................." // Your Ubidots TOKEN    #define WIFINAME "........." //Your SSID    #define WIFIPASS "........." // Your Wifi Pass    #define DEVICE_LABEL "wifiswitch"   // Name of the device    #define VARIABLE_LABEL1  "light"  // Name of the Ubidots variable    const int ERROR_VALUE = 65535;  // Error value     const uint8_t NUMBER_OF_VARIABLES = 2; // Cantidad de variables a las que el programa se va a suscribir  char * variable_labels[NUMBER_OF_VARIABLES] = {"light"}; // Variables names    #define luz  0  #define boton  2    int seguro=0;    int ledState = LOW;         // the current state of the output pin  int buttonState;             // the current reading from the input pin  int lastButtonState = HIGH;   // the previous reading from the input pin  int reading;  unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled  unsigned long debounceDelay = 50;     float estadoluz; // Variable to be used in the code    float value; // Variable to store input data  uint8_t variable; // To use with the switch case    Ubidots ubiClient(TOKEN);    WiFiClient client;    /****************************************     * Auxiliar functions     ****************************************/    void callback(char* topic, byte* payload, unsigned int length) {    char* variable_label = (char *) malloc(sizeof(char) * 30);    get_variable_label_topic(topic, variable_label);    value = btof(payload, length);    set_state(variable_label);    execute_cases();    free(variable_label);    /////////////////Light////////////////////      digitalWrite(luz, estadoluz);       /////////////////Light////////////////////      }    // Parse topic to extract the variable label which changed value  void get_variable_label_topic(char * topic, char * variable_label) {    Serial.print("topic:");    Serial.println(topic);    sprintf(variable_label, "");    for (int i = 0; i < NUMBER_OF_VARIABLES; i++) {      char * result_lv = strstr(topic, variable_labels[i]);      if (result_lv != NULL) {        uint8_t len = strlen(result_lv);              char result[100];        uint8_t i = 0;        for (i = 0; i < len - 3; i++) {           result[i] = result_lv[i];        }        result[i] = '';        Serial.print("Label is: ");        Serial.println(result);        sprintf(variable_label, "%s", result);        break;      }    }  }    // cast from an array of chars to float value.  float btof(byte * payload, unsigned int length) {    char * demo = (char *) malloc(sizeof(char) * 10);    for (int i = 0; i < length; i++) {      demo[i] = payload[i];    }    float value = atof(demo);    free(demo);    return value;  }    // State machine to use switch case  void set_state(char* variable_label) {    variable = 0;    for (uint8_t i = 0; i < NUMBER_OF_VARIABLES; i++) {      if (strcmp(variable_label, variable_labels[i]) == 0) {        break;      }      variable++;    }    if (variable >= NUMBER_OF_VARIABLES) variable = ERROR_VALUE; // Not valid      }    // Function with switch case to determine which variable changed and assigned the value accordingly to the code variable  void execute_cases() {      switch (variable) {      case 0:        estadoluz = value;        Serial.print("Luz: ");        Serial.println(estadoluz);        Serial.println();        break;      case ERROR_VALUE:        Serial.println("error");        Serial.println();        break;      default:        Serial.println("default");        Serial.println();    }    }  /****************************************     * Funcion principal     ****************************************/    void setup() {      // put your setup code here, to run once:    pinMode(luz, OUTPUT);      pinMode(boton, INPUT);     ubiClient.ubidotsSetBroker("industrial.api.ubidots.com"); // Sets the broker properly for the business account    ubiClient.setDebug(true); // Pass a true or false bool value to activate debug messages    Serial.begin(115200);    ubiClient.wifiConnection(WIFINAME, WIFIPASS);    ubiClient.begin(callback);    if(!ubiClient.connected()){      ubiClient.reconnect();    }      char* deviceStatus = getUbidotsDevice(DEVICE_LABEL);      if (strcmp(deviceStatus, "404") == 0) {      ubiClient.add("light", 0); //Insert your variable Labels and the value to be sent      ubiClient.ubidotsPublish(DEVICE_LABEL);      ubiClient.loop();    }      ubiClient.ubidotsSubscribe(DEVICE_LABEL,VARIABLE_LABEL1); //Insert the Device and Variable's Labels    Serial.println(variable_labels[1]);    }    void loop() {    // put your main code here, to run repeatedly:    if(!ubiClient.connected()){      ubiClient.reconnect();      ubiClient.ubidotsSubscribe(DEVICE_LABEL,VARIABLE_LABEL1); //Insert the Device and Variable's Labels    }    ubiClient.loop();            Read();      Debounce();      // save the reading. Next time through the loop, it'll be the lastButtonState:    lastButtonState = reading;              }    void Read(){    // read the state of the switch into a local variable:    reading = digitalRead(boton);    if (reading != lastButtonState) {      // reset the debouncing timer      lastDebounceTime = millis();    }  }    void Debounce(){    if ((millis() - lastDebounceTime) > debounceDelay) {      // whatever the reading is at, it's been there for longer than the debounce      // delay, so take it as the actual current state:        // if the button state has changed:      if (reading != buttonState) {        buttonState = reading;        Toggle();              }    }  }    void Toggle(){    // only toggle the LED if the new button state is LOW    if (buttonState == LOW) {      ledState = !ledState;      // set the LED:      digitalWrite(luz, ledState);      ubiClient.add("light", ledState); //Insert your variable Labels and the value to be sent      ubiClient.ubidotsPublish(DEVICE_LABEL);    }    }    char* getUbidotsDevice(char* deviceLabel) {    char* data = (char *) malloc(sizeof(char) * 700);    char* response = (char *) malloc(sizeof(char) * 400);    sprintf(data, "GET /api/v1.6/devices/%s/", deviceLabel);    sprintf(data, "%s HTTP/1.1rn", data);    sprintf(data, "%sHost: industrial.api.ubidots.comrnUser-Agent:wifiswitch/1.0rn", data);    sprintf(data, "%sX-Auth-Token: %srnConnection: closernrn", data, TOKEN);    char* data1 = data;    free(data);       if (client.connect("industrial.api.ubidots.com", 80)) {      client.println(data1);    }     else {      free(data);      return "e";    }    int timeout = 0;    while(!client.available() && timeout < 5000) {      timeout++;      if (timeout >= 4999){        free(data);        return "e";      }      delay(1);      }      int i = 0;    while (client.available()) {      response[i++] = (char)client.read();      if (i >= 399){        break;      }    }    char * pch;    char * statusCode;    int j = 0;    pch = strtok (response, " ");    while (pch != NULL) {      if (j == 1 ) {        statusCode = pch;      }        pch = strtok (NULL, " ");      j++;    }    free(response);    return statusCode;    }

Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Шаг шестой: настройка голосовых команд с помощью Google Assistant
Чтобы управлять «коммутатором WiFi» с помощью Google Home, сначала нужно настроить промежуточную платформу под названием IFTTT. Это позволит связать коммутатор с Google Assistant. Для правильной настройки нужно выполнить следующие действия:
Если нет учетной записи, нужно зарегистрироваться.
Кликаем «Мои апплеты». Затем «Новый апплет».
Кликаем «+ this», чтобы настроить триггер.
Находим службу «Google Ассистент» и кликаем на нее.
Кликаем «Произнесите простую фразу».
Заполняем поля триггера фразами, которые мы хотим использовать для управления светом, затем нажимаем «Создать триггер».
Нажимаем “+that”, чтобы настроить действие.
Находим службу действий «Webhooks».
Кликаем «Сделать веб-запрос».
Заполняем поля:
URL—-> http://things.ubidots.com/api/v1.6/devices/wifisw… goes your Ubidots Token)
Method—-> POST
Content Type—-> application/json
Body—-> To turn on {“light”:1}, to turn off {“light”:0}
Наконец, нажимаем «Готово».
Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Шаг седьмой: тестирование
Согласно схеме, показанной на рисунке, правильно подключаем модуль к устройству переменного тока.
Линия —> L
Нейтральный —> N
Световая линия ‘—> B
Добавляем желаемую кнопку мгновенного действия в клеммную колодку под названием SW.
Определяем линейный, нейтральный и световой провода.
Делаем монтаж, устанавливаем выключатель.
Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Коммутатор WiFi для бытовой техники с ESP8266 (умный дом)Все готово. Из этого руководства мы только что узнали, как создать коммутатор Wi-Fi, которым можно управлять через Интернет с помощью голоса, приложения для мобильного телефона или ПК. Это устройство можно применять для управления множеством различных устройств, таких как вентиляторы, двигатели, шторы, фонари, светодиодные ленты и многое другое.

Развивающий детский конструктор с шуруповертом + 2 подарка
9 часов назад
Как улучшить зрение за короткий срок
8 часов назад

Читайте также