![Контрол на RGB осветление с ESP8266 и Arduino IDE през WEB интерфейс](http://ardudevelop.eu/wp-content/uploads/2025/01/Управление-на-RGB-осветление-с-ESP8266-и-Arduino-IDE-с-уеб-интерфейс.jpg)
Въведение
В тази статия ще създадем проект за управление на RGB LED лента, предназначена за осветление на (е в моя случай на огледало). Проектът използва микроконтролера ESP8266, който осигурява връзка към WiFi мрежа и уеб страница за управление на цветовете и яркостта. Освен това проектът включва използване на LDR (Light Dependent Resistor), за да се изключва осветлението автоматично при наличие на достатъчно околна светлина (тестовете на прототипа без закачен LDR), той е включен само в софтуерната част.
Схематично решение
RGB LED лентата е свързана към ESP8266 чрез три пина за червено (redPin), зелено (greenPin) и синьо (bluePin). LDR сензорът е свързан към вторичен пин за разпознаване на нивото на светлина. ESP8266 осигурява WiFi свързаност и работи като уеб сървър, който показва интерфейс за управление на осветлението.
Схема на връзките:
ESP8266-WEB-RGB-LED-LDR-scheme- redPin (D1-GPIO 5) – свързан към червения канал на RGB лентата.
- greenPin (D2-GPIO 4) – свързан към зеления канал.
- bluePin (D3-GPIO 0) – свързан към синия канал.
- LDRpin (D4-GPIO 2) – свързан към LDR сензора.
За да видите пин-диаграмата на процесора ESP8266 D1 mini, както и неговите характеристики разгледайте страницата ни с ревю за него: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер.
Примерна платка за управление на RGB led с ESP8266 D1 mini
За изпълнението на проекта е използвана примерна платка, създадена във Fritzing. Тя е специално проектирана за управление на RGB LED лента чрез ESP8266 D1 Mini. Дизайнът е интуитивен и лесен за адаптиране към индивидуалните нужди на потребителя. Платката включва всички необходими връзки между ESP8266, RGB LED лентата и LDR сензора, като осигурява стабилност и удобство при монтаж.
Тази схема е подходяща за хора, които искат да пресъздадат проекта у дома или да разработят персонализирана версия. Fritzing предлага възможност за модификация на платката, така че потребителите да могат лесно да добавят или променят компоненти според своите изисквания. Интегрирането на всички елементи на една платка улеснява както монтажа, така и бъдещата поддръжка на системата.
![Контрол на RGB осветление с ESP8266 и Arduino IDE през WEB интерфейс Fritzing PCB](http://ardudevelop.eu/wp-content/uploads/2025/01/Платка-за-управление-на-RGB-led-с-ESP8266-D1-mini.png)
WEB интерфейс на управлението на RGB led с ESP8266 D1 mini
Уеб интерфейсът е основен компонент от проекта за управление на RGB LED лентата с ESP8266 D1 Mini. Той осигурява лесен и удобен начин за взаимодействие с осветлението чрез всеки браузър. Интерфейсът е създаден с помощта на HTML и предоставя бутони за избор на цвят, регулиране на яркостта и изключване на осветлението. Визуалният дизайн е изчистен и функционален, като гарантира, че потребителите могат бързо да намерят необходимите контроли. Всеки бутон е свързан със специфичен маршрут в уеб сървъра, който задейства съответното действие, като например промяна на цвета на лентата или регулиране на нейната яркост. Този интерфейс не изисква допълнителни приложения и може да се използва директно през локалната WiFi мрежа.
![Контрол на RGB осветление с ESP8266 и Arduino IDE през WEB интерфейс WEB part](http://ardudevelop.eu/wp-content/uploads/2025/01/WEB-интерфейс-на-управлението-на-RGB-led-с-ESP8266-D1-mini-1024x272.png)
Код на проекта за управление на RGB осветление с ESP8266 и Arduino IDE
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <RGBMood.h>
MDNSResponder mdns;
const char* ssid = "XXXXXXXX"; // WiFi SSID
const char* password = "XXXXXXXX"; // WiFi Password
ESP8266WebServer server(80);
String webPage = "";
const int redPin = 5;
const int greenPin = 4;
const int bluePin = 0;
RGBMood m(redPin, greenPin, bluePin);
int color = 0; // for changing colors
int fadeLed = 50;
const int LDRpin = 2; // LDR pin
void setup() {
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
// Инициализация на RGB
m.setMode(RGBMood::RAINBOW_HUE_MODE);
m.setFadingSteps(300);
m.setFadingSpeed(35);
m.setHoldingTime(0);
m.fadeHSB(0, 255, 255);
// Свързване с WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
Serial.println(WiFi.localIP());
// Start mDNS
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
// Стартиране OTA
ArduinoOTA.begin();
// Настройка на web сървъра
server.on("/", HTTP_GET, []() {
server.send(200, "text/html", webPage);
});
// Define web page content
buildWebPage();
// Define color control routes
setupColorRoutes();
server.begin();
Serial.println("HTTP server started");
}
void buildWebPage() {
webPage = "<body bgcolor=white>";
webPage += "<center><br>";
webPage += "<font size=12 color=black><p><b> RGB LED LIGHT. </b></p></font>";
// Първи ред с цветни бутони
webPage += createColorButton("red", "Red");
webPage += createColorButton("green", "Green");
webPage += createColorButton("blue", "Blue");
// Втори ред с цветни бутони
webPage += createColorButton("cyan", "Cyan");
webPage += createColorButton("yellow", "Yellow");
webPage += createColorButton("violet", "Violet");
// Трети ред с цветни бутони
webPage += createColorButton("white", "White");
webPage += createColorButton("change", "Change");
// Четвърти ред с бутоните UP, DOWN и LED OFF
webPage += "<br><br>";
webPage += "<a href=\"UP\"><button tape=button><font size=6 color=black> UP </font></button></a> ";
webPage += "<a href=\"DOWN\"><button tape=button><font size=6 color=black> DOWN </font></button></a> ";
webPage += "<a href=\"off\"><button tape=button><font size=6 color=black> LED OFF </font></button></a>";
webPage += "<p><font color=#3399ff size=3> designed by: </font></p>";
webPage += "<p><font color=#3399ff size=3> www.ardudevelop.eu </font></p>";
webPage += "</center>";
}
String createColorButton(const String& color, const String& label) {
return "<a href=\"" + color + "\"><button tape=button ><font size=6 color=" + color + ">" + label + "</font></button></a> ";
}
void setupColorRoutes() {
server.on("/UP", []() {
fadeLed = constrain(fadeLed + 25, 0, 255);
Serial.println(fadeLed);
server.send(200, "text/html", webPage);
});
server.on("/DOWN", []() {
fadeLed = constrain(fadeLed - 25, 0, 255);
Serial.println(fadeLed);
server.send(200, "text/html", webPage);
});
// Color routes
server.on("/red", []() { color = 1; server.send(200, "text/html", webPage); });
server.on("/green", []() { color = 2; server.send(200, "text/html", webPage); });
server.on("/blue", []() { color = 3; server.send(200, "text/html", webPage); });
server.on("/cyan", []() { color = 4; server.send(200, "text/html", webPage); });
server.on("/yellow", []() { color = 5; server.send(200, "text/html", webPage); });
server.on("/violet", []() { color = 6; server.send(200, "text/html", webPage); });
server.on("/white", []() { color = 7; server.send(200, "text/html", webPage); });
server.on("/off", []() { color = 9; server.send(200, "text/html", webPage); });
server.on("/change", []() { color = 8; server.send(200, "text/html", webPage); });
}
void colorLight() {
int LDRstatus = digitalRead(LDRpin);
if (LDRstatus == LOW) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
} else {
fadeLed = constrain(fadeLed, 0, 255);
switch (color) {
case 1: analogWrite(redPin, fadeLed); analogWrite(greenPin, 0); analogWrite(bluePin, 0); break; // RED
case 2: analogWrite(redPin, 0); analogWrite(greenPin, fadeLed); analogWrite(bluePin, 0); break; // GREEN
case 3: analogWrite(redPin, 0); analogWrite(greenPin, 0); analogWrite(bluePin, fadeLed); break; // BLUE
case 4: analogWrite(redPin, 0); analogWrite(greenPin, fadeLed); analogWrite(bluePin, fadeLed); break; // CYAN
case 5: analogWrite(redPin, fadeLed); analogWrite(greenPin, fadeLed); analogWrite(bluePin, 0); break; // YELLOW
case 6: analogWrite(redPin, fadeLed); analogWrite(greenPin, 0); analogWrite(bluePin, fadeLed); break; // VIOLET
case 7: analogWrite(redPin, fadeLed); analogWrite(greenPin, fadeLed); analogWrite(bluePin, fadeLed); break; // WHITE
case 8: m.tick(); break; // RAINBOW
case 9: analogWrite(redPin, 0); analogWrite(greenPin, 0); analogWrite(bluePin, 0); break; // OFF
}
}
}
void loop() {
colorLight();
ArduinoOTA.handle();
server.handleClient();
}
Обяснение на кода
- Дефиниране на библиотеки:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <RGBMood.h>
Импортиране на библиотеки за работа с WiFi, уеб сървър, MDNS (мрежов отговор), OTA (обновления през WiFi) и управление на RGB ленти. Тези билиотеки са основни за ESP8266 и са инсталирани с добавянето на процесора в Arduino IDE. Ако все още не сте добавили ESP8266 във вашето Arduino IDE, научете как става това в статиите ни: Arduino IDE бърз преглед и Добавяне на ESP8266 в Arduino IDE: Стъпка по стъпка.
Библиотеката “RGBMood.h” може да свалите от GitHub: Arduino-RGB-Mood или да свалите от тук.
2. Настройки за WiFi и сървър:
const char* ssid = "ХХХХХХХХХХ"; // WiFi SSID
const char* password = "ХХХХХХХХХХ"; // WiFi Password
Конфигуриране на WiFi мрежата със SSID и парола.
3. Дефиниране на пинове и обекти:
ESP8266WebServer server(80);
String webPage = "";
const int redPin = 5;
const int greenPin = 4;
const int bluePin = 0;
RGBMood m(redPin, greenPin, bluePin);
int color = 0;
int fadeLed = 50;
const int LDRpin = 2;
Установяване на пиновете за RGB лентата, сървър на порт 80, обект за RGB контрол, променливи за цвета и интензитета, както и LDR сензор.
4. Инициализация в setup()
:
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Започва серийна комуникация и настройка на пиновете като изходи.
Инициализация на RGBMood:
m.setMode(RGBMood::RAINBOW_HUE_MODE);
m.setFadingSteps(300);
m.setFadingSpeed(35);
m.setHoldingTime(0);
m.fadeHSB(0, 255, 255);
Настройка на RGB лентата в режим “дъга” с дефинирани параметри за скорост и яркост.
5. WiFi връзка:
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
Свързване към WiFi и отпечатване на статус в серийния монитор.
MDNS и OTA:
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
ArduinoOTA.begin();
Настройка на мрежово име и възможност за обновления през WiFi.
Уеб сървър:
server.on("/", HTTP_GET, []() {
server.send(200, "text/html", webPage);
});
buildWebPage();
setupColorRoutes();
server.begin();
Дефиниране на основния път за уеб страницата, създаване на съдържание и стартиране на сървъра.
5. Функция buildWebPage()
:
webPage = "<body bgcolor=white>";
webPage += "<center><br>";
webPage += "<font size=12 color=black><p><b> Our first project. </b></p></font>";
Създава HTML страница с бутони за управление на цветовете и яркостта.
6. Функция createColorButton()
:
String createColorButton(const String& color, const String& label) {
return "<a href=\"" + color + "\"><button tape=button ><font size=6 color=" + color + ">" + label + "</font></button></a> ";
}
Създава бутон с избран цвят и етикет.
7. Функция setupColorRoutes()
:
server.on("/UP", []() {
fadeLed = constrain(fadeLed + 25, 0, 255);
Serial.println(fadeLed);
server.send(200, "text/html", webPage);
});
Дефинира маршрути за управление на интензитета и цветовете.
8. Функция colorLight()
:
int LDRstatus = digitalRead(LDRpin);
if (LDRstatus == LOW) {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
Управлява LED лентата според избрания цвят и състоянието на LDR сензора.
10. Функция loop()
:
colorLight();
ArduinoOTA.handle();
server.handleClient();
Основен цикъл, който обработва осветлението, OTA заявките и уеб клиентите.
Обобщение
В тази статия разгледахме процеса на изграждане на RGB осветление (при мен за огледало) с помощта на ESP8266. Проектът демонстрира как можем да използваме микроконтролера като уеб сървър, който позволява лесно управление на осветлението чрез уеб интерфейс. Включването на LDR сензор добавя автоматизация, като осветлението се адаптира към нивото на околната светлина. Кодът показва как да съчетаем хардуерни и софтуерни елементи за реализиране на интелигентно осветление.
Видео как работи управлението на RGB LED с ESP8266 и WEB интерфейс
Кратко видео на проекта:
Заключение
Този проект е чудесно начало за разработване на интелигентно осветление с ESP8266 и RGB LED ленти. Той осигурява лесен за използване интерфейс и разширени функции за управление на осветлението. Надстройките могат да включват интеграция с MQTT или “endpoints” за управление от скриптове на Python или Shell, което дава възможност за интеграция с други системи или разширени функции за автоматизация.