ug2024finals/webserv/webserv.ino

113 lines
4.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);//Создадим веб сервер на 80 порту
bool LEDstatus = LOW;
byte led_brightness = 0;
void setup() {
Serial.begin(9600);// Настроим частоту Serial порта
delay(100);
pinMode(3, OUTPUT);// Настроим ножку светодиода на выход, чтобы управлять им
Serial.println("Connecting to ");
Serial.println("node");
//connect to your local wi-fi network
WiFi.mode(WIFI_STA);// Режим подключения к сторонней сети wi-fi
WiFi.begin("adm2", "98765432110");
// Ждем пока статус соеденения не будет равен WL_CONNECTED , что означает что еsp успешно подключена к сети
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: "); Serial.println(WiFi.localIP());// Вывод ip esp
//Настройка путей и их обработчиков
server.on("/status", handle_status);
server.on("/ledon", HTTPMethod::HTTP_POST, handle_ledon);
server.on("/ledoff", HTTPMethod::HTTP_POST, handle_ledoff);
//Настройка обработчика ненайденного пути
server.on("/slider", HTTPMethod::HTTP_POST, handle_slider);
server.onNotFound(handle_NotFound);
//Запуск сервера
server.begin();
Serial.println("HTTP server started");
}
void loop() {
//Обработка запросов
server.handleClient();
//Включение/Выключение светодиода. Помните у esp инвертированная логика светодиода на плате, поэтому LOW означает включить светодиод
/*if(LEDstatus)
{analogWrite(6, LOW);}
else
{analogWrite(6, HIGH);}
*/
}
void handle_status() {
Serial.println("LED: ");
Serial.println(LEDstatus);
//Отправка
server.send(200, "text/plain", String(not(LEDstatus))+" "+String(led_brightness));}
void handle_slider(){
if(!server.hasArg("brightness") or floor(atof(server.arg("brightness").c_str())) <= 0 or floor(atof(server.arg("brightness").c_str())) >= 256 ){
server.send(400, "texp/plain", "Brightness argument must be 0<br<256");
}else{
led_brightness = floor(atof(server.arg("brightness").c_str()));
analogWrite(3, led_brightness);
server.send(200, "texp/plain", "Changed brightness to "+String(led_brightness));
}
}
void handle_ledon() {
if( ! server.hasArg("timeout")){
LEDstatus = 0;
led_brightness = (server.hasArg("brightness") and floor(atof(server.arg("brightness").c_str())) < 256 and floor(atof(server.arg("brightness").c_str())) > 0) ? floor(atof(server.arg("brightness").c_str())) : 255;
analogWrite(3, led_brightness);
server.send(200, "text/plain", String(not(LEDstatus)));
}else{
Serial.println("LED: 1");
Serial.println(server.arg("timeout").c_str());
LEDstatus = 0;
analogWrite(3, 255);
delay(atof(server.arg("timeout").c_str())*1000);
//Отправка
LEDstatus = 1;
analogWrite(3, 0);
server.send(200, "text/plain", String(not(LEDstatus))); //
}
}
void handle_ledoff() {
if( ! server.hasArg("timeout")){
LEDstatus = 1;
led_brightness = 0;
analogWrite(3, led_brightness);
server.send(200, "text/plain", String(not(LEDstatus)));
}else{
Serial.println("LED: 0");
Serial.println(server.arg("timeout").c_str());
LEDstatus = 1;
analogWrite(3, 0);
delay(atof(server.arg("timeout").c_str())*1000);
//Отправка
LEDstatus = 0;
analogWrite(3, led_brightness);
server.send(200, "text/plain", String(not(LEDstatus))); //Код состояния 200 - OK, тип - text/plain, cами данные - String(LEDstatus)
}
}
//Код состояния 200 - OK, тип - text/plain, cами данные - String(LEDstatus)
void handle_NotFound(){
//Отправка
server.send(404, "text/plain", "Not found"); //Код состояния 404 - не найдено, тип - text/plain, cами данные - "Not found"
}