Мини-кейс 3: Умный дом

РАБОТА С ВЫСОКИМ НАПРЯЖЕНИЕМ ОПАСНА ДЛЯ ЗДОРОВЬЯ И ЖИЗНИ!

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

Если горит — реле включено. Если нет — выключено.

Продолжим использовать мощности Wi-Fi модуля на базе ESP8266 для обработки информации. Соберём выключатель света, управляемый из web-интерфейса.

TROYKA-МОДУЛЬ МИНИ-РЕЛЕ

Мини-реле замыкает и размыкает электрические цепи подобно выключателю света на стене. Правда, выключатель управляется вручную, а реле управляется программой с Arduino. Реле способно работать под напряжением 220 вольт.

Реле имеет 3 контакта на клеммах. В положении «выключено» (его ещё называют «нормальным» положением) реле замыкает правую пару контактов и размыкает левую. В состоянии «включено» всё наоборот: реле размыкает правую и замыкает левую пары контактов.

Это сделано для удобства и безопасности. Если на управляющих пинах (S-V-G) внезапно пропадёт питание, реле отключится и перейдёт в «нормальное» положение.

Представь, что в твоей комнате свет подключён к реле и Arduino Uno. Внезапно тёмным вечером Arduino Uno отключилась. Тебе хотелось бы, чтобы свет погас? Если ты хочешь, чтобы он остался гореть, нужно подключать лампочки к нормально замкнутой паре контактов. Если ты хочешь, чтобы свет потух, — к нормально разомкнутой. По правилам техники безопасности свет должен потухнуть.

Включать и выключать реле ты будешь прямо из браузера. Wi-Fi модуль снова выступит сервером, работающим по протоколу HTTP. A Arduino Uno будет передавать в модуль html-страницу с «выключателем» и управлять реле.

ЧТО ДЕЛАЕМ?

  1. Slot Shield установи на Arduino Uno, а Slot Shield установите модуль реле.

    Для начала стоит проверить, что Arduino правильно обрабатывает поступающие команды.

  2. Загрузи код в Arduino Uno.

    #include <SoftwareSerial.h>
    
    #define RELAY_PIN A4 // ПИН реле модуля
    
    void setup() {
      Serial.begin(115200);
      pinMode(RELAY_PIN, OUTPUT);
    }
    
    void loop() {
      // Встроенная функция readStringUntil будет читать все данные, пришедшие в UART до специального символа — '\n' (перенос строки).
      // Он появляется в паре с '\r' (возврат каретки) при передаче данных функцией Serial.println().
      // Эти символы удобно передавать для разделения команд, но не очень удобно обрабатывать. Удаляем их функцией trim().
      String command = Serial.readStringUntil('\n');
      command.trim();
      
      // Проверяем, подходит ли команда под одну из ожидаемых: "On" или "Off"
      // Если подходит, выполняем действие.
      if (command == "RelayOn") {
        digitalWrite(RELAY_PIN, HIGH);
      } else if (command == "RelayOff") {
        digitalWrite(RELAY_PIN, LOW);
      }
    }
  3. Программа должна реагировать на три команды, попробуй отправить их в Serial Monitor:

    • RelayOn — включить реле. Ты увидишь загоревшийся на реле светодиод.

    • RelayOff — выключить реле.

  4. Грузим html файл страницы в память esp8266 Troyka Module WI-Fi.

    1. Нужно скачать дополнительный инструмент (SPIFFS) для Arduino IDE, чтобы работать с файловой системой esp8266.

    2. Разархивируй папку ESP8266FS в C:\Program Files (x86)\Arduino\tools\ Вам может быть понадобятся права администратора. Полный путь будет следующий: C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar).

    3. Перезагрузи Arduino IDE и в Инструментах появится пункт "ESP8266 Sketch Data Upload".

    4. В папке с проектом создай папку "data" и туда добавь "home.html", скачав в конце этой странице.

    5. Переведи модуль в режиме программирования и в инструментах нажми на пункт "ESP8266 Sketch Data Upload". В память esp8266 загрузиться файл.

      При загрузке может возникнуть проблема. could not open port ‘COMNUM’: PermissionError(13, ‘Access is denied.’, None, 5) Нужно отключить порт порт в диспетчере устройств и снова включить. https://community.platformio.org/t/esp32-could-not-open-port-com5-permissionerror-13-access-is-denied-none-5/22396

    6. После успешной загрузки перезагрузи WI-FI модуль.

  5. Теперь запрограммируй WI-FI модуль.

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>
    #include "FS.h"
    
    #define WIFI_SSID "dimdimdim" // Указываем SSID и пароль Wi-Fi сети, с которой будем выходить в интернет
    #define WIFI_PASSWORD ""// Спрашиваем у препода
    
    ESP8266WebServer server(80);
    
    File htmlFile;
    String page;
    
    // Заведём функции handleOn() и handleOff().
    // Они будут обрабатывать нажатия кнопок включения и выключения света в браузере.
    void handleRoot() {
      server.send(200, "text/html", page);
    }
    void handleOn() {
      Serial.println("RelayOn"); // "turnOn"
      server.send(200, "text/plain", "turnOn");
    }
    void handleOff() {
      Serial.println("RelayOff"); // "turnOff"
      server.send(200, "text/plain", "turnOff");
    }
    
    void setup(void) {
      Serial.begin(115200);
      SPIFFS.begin(); // Инициализируем SPIFFS для работы с файловой системой
      WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
      while (WiFi.status() != WL_CONNECTED) delay(500);
      Serial.println();
      Serial.println(WiFi.localIP()); // Выводим в консоль IP адрес
      // Если на сервер приходит запрос на включение или выключение реле, вызываем соответствующую функцию
      server.on("/", handleRoot); // Дублирование главной страницы
      server.on("/home.htm", handleRoot); // Главная
      server.on("/turnOn", handleOn);
      server.on("/turnOff", handleOff);
    
      htmlFile = SPIFFS.open("/home.html", "r"); // Открываем html файл для чтения
      if (!htmlFile) Serial.println("Html file open failed!"); // Выводим ошибку чтения файлы, если файла нет
    
      server.begin(); // Запускаем сервер
    
      while(htmlFile.available()) { // Записываем в page код из html файла построчно
        String fileLine = htmlFile.readStringUntil('\n');
        page += fileLine;
      }
      htmlFile.close(); // Закрываем файл с esp8266
    }
    
    void loop() {
      server.handleClient();
    }
  6. Проверь, как работает сервер. Открой Serial Monitor, дождись строки с IP-адресом модуля. Скопируй его в адресную строку браузера (нужно зайти с устройства, который подключен к той же сети, что и WI-FI модуль) и допиши в конце "/turnOn".

  7. В Serial Monitor появится строка "On". Это значит, что Wi-Fi модуль отправил команду на включение реле. Попробуй команду "turnOff" — появится строка "Off".

  8. Теперь собери устройство целиком!

  9. Подключи сервер к питанию. Набери в браузере IP-адрес сервера и добавь к нему "/home.html". Ты увидишь интерфейс панели управления реле.

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

Вы научились заливать в память ESP8266 файлы и использовать их в проекте, работать с РЕЛЕ. Ура, теперь ты можешь собрать умный светильник!

Дополнительное задание:

Добавить Troyka модуль - датчик освещённости (фоторезистор) и когда станет темно включи лампочку автоматически!

Пример кода для считывания по Serial значения.

if (Serial.available()) {
    command = Serial.readStringUntil('\n');
    command.trim();
    sensorVal = command.toFloat();
}
Serial.println(dht.getTemperatureC());

53KB
sd-content.zip
archive

Last updated