===== Эксперимент 62. Управление цветом через веб-форму ===== Мы уже научились создавать простой веб-сервер, отправлять веб-страницы в браузер клиента и отправлять данные из формы на странице обратно на сервер. Теперь мы сделаем ночник с полноцветным светодиодом, цветом и яркостью которого можно управлять по Wi-Fi через веб-интерфейс. Для управления RGB светодиодом необходимо передавать на сервер 3 параметра — яркость красного, синего и зеленого цветов. Соберем схему с RGB светодиодом ==== Схема эксперимента ==== {{ :products:esp-iot:exp35_mont.png?direct&600 |}} //Рисунок 1. Монтажная схема эксперимента// ==== Программный код эксперимента ====
Red:
Green:
Blue:
Теперь наша форма имеет три текстовых поля с именами ''r'', ''g'' и ''b'' для ввода яркости красного, зеленого и синего цветов соответственно. Также мы вставили три метки, чтобы подменять их на текущее значение яркости перед отправкой страницы пользователю. Код программы: #include #include #define WIFI_NAME "WiFi_Name" #define WIFI_PASSWORD "WiFi_Password" #define PIN_LED_R 13 #define PIN_LED_G 14 #define PIN_LED_B 15 ESP8266WebServer server(80); void indexPage() { int duty_r = 128; int duty_g = 128; int duty_b = 128; if (server.hasArg("r")) duty_r = server.arg("r").toInt(); if (server.hasArg("g")) duty_g = server.arg("g").toInt(); if (server.hasArg("b")) duty_b = server.arg("b").toInt(); analogWrite(PIN_LED_R, 255 - duty_r); analogWrite(PIN_LED_G, 255 - duty_g); analogWrite(PIN_LED_B, 255 - duty_b); String page = ""; page += ""; page += ""; page += ""; page += ""; page += R"(
)"; page += R"(Red:
)"; page += R"(Green:
)"; page += R"(Blue:
)"; page += R"()"; page += "
"; page += ""; page += ""; page.replace("<=VALUE=R=>", String(duty_r)); page.replace("<=VALUE=G=>", String(duty_g)); page.replace("<=VALUE=B=>", String(duty_b)); server.send(200, "text/html", page); } void setup() { Serial.begin(9600); Serial.println(); pinMode(PIN_LED_R, OUTPUT); pinMode(PIN_LED_G, OUTPUT); pinMode(PIN_LED_B, OUTPUT); analogWriteRange(256); analogWrite(PIN_LED_R, 128); analogWrite(PIN_LED_G, 128); analogWrite(PIN_LED_B, 128); Serial.print("Connecting to WiFi"); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_NAME, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on("/", indexPage); server.begin(); } void loop() { server.handleClient(); }
Первым делом в коде программы нужно заменить ''WiFi_Name'' на имя нужной сети, а ''WiFi_Password'' на пароль от нее. Следует обратить внимание, что перед установкой яркости светодиода мы вычитаем полученные данные из числа 255. Это сделано потому, что наш RGB светодиод с общим анодом (имеет общий плюс) и мы установили диапазон аналогового выходов на 256. analogWriteRange(256);