Мини-кейс 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 "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 для работы с файловой системой 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 = 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(); }
Проверь, как работает сервер. Открой 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?