Мини-кейс 3: Умный дом
РАБОТА С ВЫСОКИМ НАПРЯЖЕНИЕМ ОПАСНА ДЛЯ ЗДОРОВЬЯ И ЖИЗНИ!
Если тебе ни разу не приходилось работать с напряжением 220 вольт, оставь зелёные клеммы неподключёнными. Вместо этого используй светодиод на реле.
Если горит — реле включено, не горит — выключено.
Продолжим использовать мощности Wi-Fi модуля на базе ESP8266 для обработки информации. Соберём выключатель света, управляемый из web-интерфейса.
TROYKA-МОДУЛЬ МИНИ-РЕЛЕ
Мини-реле замыкает и размыкает электрические цепи подобно выключателю света на стене. Правда, выключатель управляется вручную, а реле управляется программой с Arduino. Реле способно работать под напряжением 220 вольт.

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

Это сделано для удобства и безопасности. Если на управляющих пинах (S-V-G) внезапно пропадёт питание, реле отключится и перейдёт в «нормальное» положение.
Представь, что в твоей комнате свет подключён к реле и Arduino Uno. Внезапно тёмным вечером Arduino Uno отключилась. Тебе хотелось бы, чтобы свет погас? Если ты хочешь, чтобы он остался гореть, нужно подключать лампочки к нормально замкнутой паре контактов. Если ты хочешь, чтобы свет потух, — к нормально разомкнутой. По правилам техники безопасности свет должен потухнуть.
Включать и выключать реле ты будешь прямо из браузера. Wi-Fi модуль снова выступит сервером, работающим по протоколу HTTP. A Arduino Uno будет передавать в модуль html-страницу с «выключателем» и управлять реле.

ЧТО ДЕЛАЕМ?
- Slot Shield установи на Arduino Uno, а Slot Shield установите модуль реле.  - Для начала стоит проверить, что Arduino правильно обрабатывает поступающие команды. 
- Загрузи код в 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); } }
- Программа должна реагировать на три команды, попробуй отправить их в Serial Monitor: - RelayOn— включить реле. Ты увидишь загоревшийся на реле светодиод.
- RelayOff— выключить реле.
 
- Грузим html файл страницы в память esp8266 Troyka Module WI-Fi. - Если версия Arduino 1.x: - Нужно скачать дополнительный инструмент (SPIFFS) для Arduino IDE, чтобы работать с файловой системой esp8266. 
- Разархивируй папку ESP8266FS в - C:\Program Files (x86)\Arduino\tools\Вам может быть понадобятся права администратора. Полный путь будет следующий:- C:\Program Files (x86)\Arduino\tools\ESP8266FS\tool\esp8266fs.jar).
- Перезагрузи Arduino IDE и в Инструментах появится пункт - "ESP8266 Sketch Data Upload". 
- В папке с проектом создай папку - "data"и туда добавь- "home.html", скачав в конце этой странице.
- Переведи модуль в режиме программирования и в инструментах нажми на пункт - "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
- После успешной загрузки перезагрузи WI-FI модуль. 
 
- Если вы используете версию Arduino IDE 2.x: - Перейдите на страницу LittleFS Uploader релизов и нажмите на файл .vsix для загрузки. 
- На вашем компьютере перейдите по следующему пути: - C:\Users\<имя пользователя>\.arduinoIDE\. Создайте новую папку под названием- plugins, если её ещё нет.
- Переместите загруженный ранее файл .vsix в папку плагинов (удалите все предыдущие версии этого плагина). 
- Перезапустите или откройте Arduino IDE 2.x. Чтобы проверить, был ли плагин успешно установлен, нажмите [ Ctrl ] + [ Shift ] + [ P ], чтобы открыть палитру команд. Там должна быть инструкция под названием - «Upload Little FS to Pico/ESP8266/ESP32»(просто прокрутите вниз или найдите такое название).
- В папке с проектом создай папку - "data"и туда добавь- "home.html", скачав в конце этой странице.
- Убедитесь, что выбрана правильная плата ( Инструменты > Плата ) и COM-порт ( Инструменты > Порт ). 
- В зависимости от выбранной платы ESP вам может потребоваться выбрать желаемый размер флэш-памяти. В Arduino IDE, в Tools > Flash size выберите желаемый размер флэш-памяти (это будет зависеть от размера ваших файлов). 
- Затем загрузите файлы на плату ESP. Нажмите [ Ctrl ] + [ Shift ] + [ P ] в Windows, чтобы открыть палитру команд. Найдите команду - «Upload LittleFS to Pico/ESP8266/ESP32»и щелкните по ней. Убедитесь, что Serial Monitor закрыт. В противном случае загрузка не удастся.
- Через несколько секунд вы должны получить сообщение «Completed upload». Файлы успешно загружены в файловую систему ESP. 
 
 
- Теперь запрограммируй WI-FI модуль. - #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include "LittleFS.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); LittleFS.begin(); // Инициализируем LittleFS для работы с файловой системой Serial.println(); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (millis() > 20000) ESP.restart(); } Serial.println(); Serial.println(WiFi.localIP()); // Выводим в консоль IP адрес // Если на сервер приходит запрос на включение или выключение реле, вызываем соответствующую функцию server.on("/", handleRoot); // Дублирование главной страницы server.on("/home.htm", handleRoot); // Главная server.on("/turnOn", handleOn); server.on("/turnOff", handleOff); htmlFile = LittleFS.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(); }
- Проверь, как работает сервер. Открой Serial Monitor, дождись строки с IP-адресом модуля. Скопируй его в адресную строку браузера (нужно зайти с устройства, который подключен к той же сети, что и WI-FI модуль) и допиши в конце - "/turnOn".
- В Serial Monitor появится строка - "On". Это значит, что Wi-Fi модуль отправил команду на включение реле. Попробуй команду- "turnOff"— появится строка- "Off".
- Теперь собери устройство целиком!  
- Подключи сервер к питанию. Набери в браузере IP-адрес сервера и добавь к нему - "/home.html". Ты увидишь интерфейс панели управления реле.
- Переключай реле кнопками «Включить» и «Выключить». При переключении реле должно издавать щелчки. Это звук работы металлической пластины внутри чёрного корпуса, которая замыкает то одну, то другую пару контактов. 
Вы научились заливать в память ESP8266 файлы и использовать их в проекте, работать с РЕЛЕ. Ура, теперь ты можешь собрать умный светильник!
Дополнительное задание:
Добавить Troyka модуль - датчик освещённости (фоторезистор) и когда станет темно включи лампочку автоматически!
Пример кода для считывания по Serial значения.
if (Serial.available()) {
    command = Serial.readStringUntil('\n');
    command.trim();
    sensorVal = command.toFloat();
}
Serial.println(dht.getTemperatureC());Last updated
Was this helpful?


