WEB сервер на ESP8266

CoolBoy
Offline
Зарегистрирован: 11.01.2018

Всем привет! Делаю на ESP8266 простой веб сервер, но постепенно дорабатываю. Сейчас я уже могу включать и выключать светодиод через инет. Т.к создавать интерфейс на ардуино было лень, сделал его в графическом редакторе и код html конвертировал в одну линию. Программа:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>

const char* ssid = "A1-2796BA";
const char* password = "Ne_skazhu";
const char* www_username = "admin";
const char* www_password = "esp8266";
String ip = "";
const char index_html[] PROGMEM={"<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>Web Server</title>\n<meta name=\"generator\" content=\"WYSIWYG Web Builder 12 - http://www.wysiwygwebbuilder.com\">\n<link href=\"Untitled1.css\" rel=\"stylesheet\">\n<link href=\"index.css\" rel=\"stylesheet\">\n</head>\n<body>\n<div id=\"wb_Text1\" style=\"position:absolute;left:34px;top:41px;width:570px;height:23px;z-index:0;\">\n<span style=\"color:#000000;font-family:Arial;font-size:20px;\">TURN ON:</span></div>\n<div id=\"wb_Text2\" style=\"position:absolute;left:34px;top:85px;width:570px;height:23px;z-index:1;\">\n<span style=\"color:#000000;font-family:Arial;font-size:20px;\">TURN OFF:</span></div>\n<input type=\"submit\" id=\"Button1\" onclick=\"window.location.href=' ./on';return false;\" name=\"\" value=\"Submit\" style=\"position:absolute;left:146px;top:40px;width:96px;height:25px;z-index:2;\">\n<input type=\"submit\" id=\"Button2\" onclick=\"window.location.href='./off';return false;\" name=\"\" value=\"Submit\" style=\"position:absolute;left:146px;top:84px;width:96px;height:25px;z-index:3;\">\n</body>\n</html>"};
ESP8266WebServer server(80);

const int led = D4;

void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, HIGH);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA); // режим клиента
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.on("/", [](){
    if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
      server.send_P(200, "text/html", index_html);
      String addy = server.client().remoteIP().toString();
      if(ip != addy){
      Serial.print(addy);
      Serial.println(" is on the web");
      ip = addy;
      }
  });
  
  server.on("/on", [](){
    if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
    digitalWrite(led, LOW);
    server.send(200, "text/html", "<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>LED ON</title>\n<meta name=\"generator\" content=\"WYSIWYG Web Builder 12 - http://www.wysiwygwebbuilder.com\">\n<meta http-equiv=\"refresh\" content=\"3;http://188.22.183.190/\"> \n<link href=\"Untitled1.css\" rel=\"stylesheet\">\n<link href=\"on.css\" rel=\"stylesheet\">\n</head>\n<body>\n<div id=\"wb_Text1\" style=\"position:absolute;left:20px;top:19px;width:250px;height:24px;z-index:0;\">\n<span style=\"color:#000000;font-family:Arial;font-size:21px;\">The LED is now ON</span></div>\n</body>\n</html>");
    Serial.println("The LED is now ON");
  });
    server.on("/off", [](){
      if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
    digitalWrite(led, HIGH);
    server.send(200, "text/html", "<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>LED OFF</title>\n<meta name=\"generator\" content=\"WYSIWYG Web Builder 12 - http://www.wysiwygwebbuilder.com\">\n<meta http-equiv=\"refresh\" content=\"3;http://188.22.183.190/\"> \n<link href=\"Untitled1.css\" rel=\"stylesheet\">\n<link href=\"off.css\" rel=\"stylesheet\">\n</head>\n<body>\n<div id=\"wb_Text1\" style=\"position:absolute;left:20px;top:19px;width:250px;height:24px;z-index:0;\">\n<span style=\"color:#000000;font-family:Arial;font-size:21px;\">The LED is now OFF</span></div>\n</body>\n</html>");
    Serial.println("The LED is now OFF");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
  ArduinoOTA.begin();
  Serial.println(ip);
}

void loop(void){
  ArduinoOTA.handle();
  server.handleClient();
}

Можете сами на Nodemcu протестить (в коде ещё задавался статический ип, если будут ошибки, значит я что-то лишнее убрал).

Вопрос такой: как под кнопками выводить данные с датчиков (температура, влажность...). Ну или подскажите, как менять текст html обьекта с помощью nodemcu. Если надо будет, отправлю и html код. Я знаю, что это ардуино форум, но на другом регистрироваться не хотелось. Помогите пж!!!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

CoolBoy пишет:
как под кнопками выводить данные с датчиков (температура, влажность...). 

http://arduino.ru/forum/programmirovanie/microajax-dlya-arduino