• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Web сервер - ! нужна авторизация

Alex1

New member
Здравствуйте друзья. Я только начал осваивать программирование возникли сложности. Есть модуль управления реле через вэб, но хотелось бы добавить логин и пароль на вход на веб страницу.
Есть 2 скетча, оба работают без проблем, но совместить у меня не выходит.
Тот что на авторизацию - пароль и логин 000000 и 000000, меняется только програмно, но меня устраивает, хотя бы так. Образцов построения авторизации на ардуино и 8266 в нете не так уж и много, точнее Я нашёл один, тот что ниже, так что методом научного тыка разобраться мне не удалось. Спасибо заранее, кто поможет.

Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;

// Wi-Fi
const char* ssid = "****************************";
const char* password = "*************************";

byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192,168,1,170);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

ESP8266WebServer server(80);

int D0_pin = 16;

void setup(void){
  // preparing GPIOs
  pinMode(D0_pin, OUTPUT);
  digitalWrite(D0_pin, LOW);

  delay(100);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
 
  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());
 
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
 
  server.on("/", [](){
    server.send(200, "text/html", webPage());
  });
  server.on("/socket1On", [](){
    digitalWrite(D0_pin, HIGH);
    server.send(200, "text/html", webPage());
    delay(100);
 
  });
  server.on("/socket1Off", [](){
    digitalWrite(D0_pin, LOW);
    server.send(200, "text/html", webPage());
    delay(100);
 
 
  });
  server.begin();
  Serial.println("HTTP server started");
}
void loop(void){
  server.handleClient();
}

String webPage()
{
  String web;
  web += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/> <meta charset=\"utf-8\"><title>ESP 8266</title><style>button{color:red;padding: 10px 27px;}</style></head>";
  web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
  //++++++++++ LED-1  +++++++++++++
  web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 1----</p>";
  if (digitalRead(D0_pin) == 1)
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
  }
  else
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
  }
  web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></div>";
  // ++++++++ LED-1 +++++++++++++

 
  // ========REFRESH=============
  web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
  // ========REFRESH=============
 
 
  web += "</div>";
  return(web);
}

Код авторизации
Код:
// Авторизация на Web сервере микроконтроллера   https://it4it.club/topic/13-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BD%D0%B0-web-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0/    //





void loop() {
  WiFiClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString += c;
        if (c == '\n' && currentLineIsBlank) {
          if (readString.lastIndexOf(F("Authorization: Basic MDAwMDAwOjAwMDAwMA=="))>-1) {    // MDAwMDAwOjAwMDAwMA==  0000 0000 http://base64.ru/ через разделитель двоеточие ":" //
            if (readString.lastIndexOf(F("GET /favicon.ico"))>-1) {
              client.println(F("HTTP/1.0 404 Not Found"));
            }
            else {
              client.println(F("HTTP/1.0 200 OK"));
              client.println(F("Content-Type: text/html"));
              client.println(F("Pragma: no-cache\r\nRefresh: 30\r\n"));
              client.println(F("<html><head><meta charset=UTF-8\"><title>Arduino - iT4iT.CLUB</title>"));
              client.println(F("<style>body,table,tr,td{font-style:normal;font-family:verdana;font-size:11px;}body{background-color:#FFEBD5;}</style></head><body>"));
              client.print(F("Arduino on <a href=\"https://it4it.club\">iT4iT.CLUB</a>"));
              client.println(F("</body></html>"));
            }
          }
          else {
            client.println(F("HTTP/1.0 401 Unauthorized"));
            client.println(F("WWW-Authenticate: Basic realm=\"Arduino - iT4iT.CLUB\""));
          }
          break;
        }

        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(30);

    readString = "";
    client.stop();
  }
}
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
Судя по коду у вас должно что то возвращаться в http, или не возвращаться совсем. К сожалению никакой диагностики вы не приводите, поэтому совет простой - натыкайте сообщений в код типа client.println(F("sting 16 is go")); и по ним уже определяйте чего и как у вас отрабатывает.
 

Alex1

New member
Судя по коду у вас должно что то возвращаться в http, или не возвращаться совсем. К сожалению никакой диагностики вы не приводите, поэтому совет простой - натыкайте сообщений в код типа client.println(F("sting 16 is go")); и по ним уже определяйте чего и как у вас отрабатывает.
Авторизация получается нормально, без основного кода, но только как я пытаюсь вставить этот код в свой, не компилируется, пишет разные ошибки в строках, тонкостей не понимаю пока, где не состыковки
 

Andy Korg

Moderator
Команда форума
...пишет разные ошибки в строках
Хотел прочитать список ошибок, но не смог пробиться через ментальное поле - сегодня большие помехи для телепатических связей. Шутка :)
Нужен список ошибок компиляции, что бы что то советовать.
 

Alex1

New member
Хотел прочитать список ошибок, но не смог пробиться через ментальное поле - сегодня большие помехи для телепатических связей. Шутка :)
Нужен список ошибок компиляции, что бы что то советовать.
'webPage' was not declared in this scope - на строке server.send(200, "text/html", webPage());
Код авторизации был взят из проекта Ethernet модуля на чипе W5100, а с другой стороны причём тут способ подключения по воздуху или по кабелю или не так?

Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>

MDNSResponder mdns;
// Wi-Fi
const char* ssid = "*******";
const char* password = "******";
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192,168,1,170);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);

String readString;         // Буфер для данных от пользователя Web сервера/*

int D0_pin = 16;
void setup(void){
  // preparing GPIOs
  pinMode(D0_pin, OUTPUT);
  digitalWrite(D0_pin, LOW);
  delay(100);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  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());
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  server.on("/", [](){
    server.send(200, "text/html", webPage());
  });
  server.on("/socket1On", [](){
    digitalWrite(D0_pin, HIGH);
    server.send(200, "text/html", webPage());
    delay(100);
  });
  server.on("/socket1Off", [](){
    digitalWrite(D0_pin, LOW);
    server.send(200, "text/html", webPage());
    delay(100);
  });
  server.begin();
  Serial.println("HTTP server started");
}
void loop(void){
 
WiFiClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString += c;
        if (c == '\n' && currentLineIsBlank) {
          if (readString.lastIndexOf(F("Authorization: Basic MDAwMDAwOjAwMDAwMA=="))>-1) {    // MDAwMDAwOjAwMDAwMA==  0000 0000 http://base64.ru/ через разделитель двоеточие ":" //
            if (readString.lastIndexOf(F("GET /favicon.ico"))>-1) {
              client.println(F("HTTP/1.0 404 Not Found"));
            }
            else {
              client.println(F("HTTP/1.0 200 OK"));
              client.println(F("Content-Type: text/html"));
              client.println(F("Pragma: no-cache\r\nRefresh: 30\r\n"));
              client.println(F("<html><head><meta charset=UTF-8\"><title>Arduino - iT4iT.CLUB</title>"));
              client.println(F("<style>body,table,tr,td{font-style:normal;font-family:verdana;font-size:11px;}body{background-color:#FFEBD5;}</style></head><body>"));
              client.print(F("Arduino on <a href=\"https://it4it.club\">iT4iT.CLUB</a>"));
              client.println(F("</body></html>"));
            }
          }
          else {
            client.println(F("HTTP/1.0 401 Unauthorized"));
            client.println(F("WWW-Authenticate: Basic realm=\"Arduino - iT4iT.CLUB\""));
          }
          break;
        }

        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(30);

    readString = "";
    client.stop();
  }
}
  server.handleClient();
}
String webPage()
{
  String web;
  web += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/> <meta charset=\"utf-8\"><title>ESP 8266</title><style>button{color:red;padding: 10px 27px;}</style></head>";
  web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
  //++++++++++ LED-1  +++++++++++++
  web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 1----</p>";
  if (digitalRead(D0_pin) == 1)
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
  }
  else
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
  }
  web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></div>";
  // ++++++++ LED-1 +++++++++++++
  // ========REFRESH=============
  web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
  // ========REFRESH=============
  web += "</div>";
  return(web);
}
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
'webPage' was not declared in this scope - на строке server.send(200, "text/html", webPage());
Компилятор не может найти функцию webPage(), в то же время описание этой функции есть ниже в файле. Следовательно либо надо перенести описание этой функции выше строк в которых используется функция, либо объявить прототип функции webPage() вначале файла.
 

Alex1

New member
Проверьте скобки в Loop
у вас:
} - здесь loop закончился
server.handleClient(); ----- это уже за пределами loop
} ------ и это тоже
'class ESP8266WebServer' has no member named 'available' ....следующая ошибка на строке... WiFiClient client = server.available();
Переместил сюда, правильно?
}
delay(30);
readString = "";
client.stop();
server.handleClient();
}
 
Последнее редактирование:

kab

New member
@Alex1
Вопрос еще актуален? Недавно я аналогично доработал свой скетч аутентификацией существенно более простым способом. Если интересно - могу подробнее.
 

Alex1

New member
@Alex1
Вопрос еще актуален? Недавно я аналогично доработал свой скетч аутентификацией существенно более простым способом. Если интересно - могу подробнее.
Да конечно, Я не могу понять как после примера со входом *Login OK* перейти на основной код, а уроков в сети Я не нашёл к сожалению
 

Alex1

New member
Подскажите после появления Login OK, от этого примера, какая ключевая команда для перехода на мою основную программу


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

const char* ssid = "*************";
const char* password = "***************";

ESP8266WebServer server(80);

const char* www_username = "0000";
const char* www_password = "0000";

void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Connect Failed! Rebooting...");
delay(1000);
ESP.restart();
}
ArduinoOTA.begin();

server.on("/", [](){
if(!server.authenticate(www_username, www_password))
return server.requestAuthentication();
server.send(200, "text/plain", "Login OK");
});
server.begin();

Serial.print("Open http://");
Serial.print(WiFi.localIP());
Serial.println("/ in your browser to see it working");
}

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


Код:
 #include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ticker.h>  // Мигание по вн. таймеру
Ticker blinker;
#define ONE_WIRE_BUS 2 /// GPIO02  НА ПЛАТЕ 201
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//const char *ssid = "Access Point home1";  // как точка доступа
//const char *password = "12344321";        // как точка доступа
const char *ssid = ***********        //  как клиент
const char *password = ***********      //  как клиент

  byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
  IPAddress ip(192, 168, 1, 100);
  IPAddress gateway(192, 168, 1, 1);
  IPAddress subnet(255, 255, 255, 0);
  ESP8266WebServer server(80);
  MDNSResponder mdns;

  int vcc;
  ADC_MODE(ADC_VCC);
 
  int ledPin = 0;         // LED pin GPIO00 НА ПЛАТЕ 201.
  uint8_t ledStatus = 0;
  int counter = 0; 

  const int buzzerPin = 10; // GPIO 010   D3 - на плате 201)
  int led1 = 13;
  int stateLED1 = LOW;
  int led2 = 12;
  int stateLED2 = LOW;
  int led3 = 14;
  int stateLED3 = LOW;
  int led4 = 5;
  int stateLED4 = LOW;

  int D5_pin = 16;  // GPIO 16 XPD  - на плате 201 rezerv
  int key1=0;
  int D6_pin = 4;  // GPIO 04
  int key2=0;
//R  int D7_pin = 15;  // GPIO 15
//R  int key3=0;

void handleRoot()
{
    response();
   
   sensors.requestTemperatures();
  
    //******************** //Звук отработки  команды  - обновить F5
  tone(buzzerPin, 1000);
  delay(100);
  tone(buzzerPin, 1200);
  delay(200);
  noTone(buzzerPin);
  //********************
}
////////////////////////////////
void handleLed1On() {
  stateLED1 = HIGH;
  digitalWrite(led1, stateLED1);
//******************** //Звук отработки  команд кнопка ON
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 700);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed1Off() {
  stateLED1 = LOW;
  digitalWrite(led1, stateLED1);
  //******************** //Звук отработки  команд кнопка OFF
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 500);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
////////////////////////////////
}
void handleLed2On() {
  stateLED2 = HIGH;
  digitalWrite(led2, stateLED2);
  //******************** //Звук отработки  команд кнопка ON
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 700);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed2Off() {
  stateLED2 = LOW;
  digitalWrite(led2, stateLED2);
  //******************** //Звук отработки  команд кнопка OFF
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 500);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed3On() {
  stateLED3 = HIGH;
  digitalWrite(led3, stateLED3);
  //******************** //Звук отработки  команд кнопка ON
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 700);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed3Off() {
  stateLED3 = LOW;
  digitalWrite(led3, stateLED3);
  //******************** //Звук отработки  команд кнопка OFF
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 500);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed4On() {
  stateLED4 = HIGH;
  digitalWrite(led4, stateLED4);
  //******************** //Звук отработки  команд кнопка ON
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 700);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
void handleLed4Off() {
  stateLED4 = LOW;
  digitalWrite(led4, stateLED4);
  //******************** //Звук отработки  команд кнопка OFF
  tone(buzzerPin, 400);
  delay(80);
  tone(buzzerPin, 600);
  delay(80);
  tone(buzzerPin, 500);
  delay(200);
  noTone(buzzerPin);
  //********************
  response();
}
 

Slacky

Member
@Alex1 в самом начале построения html страницы пишем что-то вроде

Код:
  if (wmConfig.fullSecurity) {
    if (!webServer.authenticate(wmConfig.webAdminLogin, wmConfig.webAdminPassword))
    return webServer.requestAuthentication();
  }
mvConfig - это уже мои прибабахи из конфига.

Ну и где-то после #include <>

поставить

ESP8266WebServer webServer(80);

Все это я спокойно нашел в примерах в сети.

Или Вы о чем?
 
Последнее редактирование:

kab

New member
@Alex1
попозже вечером я доберусь до домашнего компьютера, освежу в памяти, как я сделал это и отпишу. Пока могу сообщить, что в моем варианте в исходную программу добавляется существенно меньше строк и смысл добавок более ясный.

Arduino Ide у меня 1.8.3. Это на всякий случай...
 

Alex1

New member
@Alex1 в самом начале построения html страницы пишем что-то вроде

Код:
  if (wmConfig.fullSecurity) {
    if (!webServer.authenticate(wmConfig.webAdminLogin, wmConfig.webAdminPassword))
    return webServer.requestAuthentication();
  }

Ну и где-то после #include <>

поставить

ESP8266WebServer webServer(80);

Все это я спокойно нашел в примера в сети.

Или Вы о чем?
Здесь как то всё разбросано у вас. Для новичка собирать
mvConfig - это уже мои прибабахи из конфига.
это уж перебор, может ссылки на уроки есть какие. что б суть понять как это работает, а не пальцем в небо
 

Slacky

Member
@Alex1 это не пальцем в небо, это и есть пример.

if (wmConfig.fullSecurity) {

Если wmConfig.fullSecurity true, то нужна аутентификация. Это вообще можно убрать.

if (!webServer.authenticate(wmConfig.webAdminLogin, wmConfig.webAdminPassword))
return webServer.requestAuthentication();
}

wmConfig.webAdminLogin и wmConfig.webAdminPassword это соответственно логин и пароль, попавшие в конфиг ранее в программе.

А вот

if (!webServer.authenticate(ВашЛогин, ВашПароль))
return webServer.requestAuthentication();
}

и есть то, что Вам нужно ...
 

Slacky

Member
@Alex1 держите Вам пример из либ ардуиновских. Не понимаю, почему Вы сами туда не заглянули

Код:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>

const char* ssid = "........";
const char* password = "........";

ESP8266WebServer server(80);

const char* www_username = "admin";
const char* www_password = "esp8266";

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if(WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Connect Failed! Rebooting...");
    delay(1000);
    ESP.restart();
  }
  ArduinoOTA.begin();

  server.on("/", [](){
    if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
    server.send(200, "text/plain", "Login OK");
  });
  server.begin();

  Serial.print("Open http://");
  Serial.print(WiFi.localIP());
  Serial.println("/ in your browser to see it working");
}

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

Alex1

New member
@Alex1 это не пальцем в небо, это и есть пример.

if (wmConfig.fullSecurity) {

Если wmConfig.fullSecurity true, то нужна аутентификация. Это вообще можно убрать.

if (!webServer.authenticate(wmConfig.webAdminLogin, wmConfig.webAdminPassword))
return webServer.requestAuthentication();
}

wmConfig.webAdminLogin и wmConfig.webAdminPassword это соответственно логин и пароль, попавшие в конфиг ранее в программе.

А вот

if (!webServer.authenticate(ВашЛогин, ВашПароль))
return webServer.requestAuthentication();
}

и есть то, что Вам нужно ...
Мне не очень понятно без примера что куда вставлять, например сюда
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

const char *ssid = "arduino-er";
const char *password = "password";
int stateLED = LOW;

ESP8266WebServer server(80);

void handleRoot() {
    response();
}

void handleLedOn() {
  stateLED = LOW;
  digitalWrite(LED_BUILTIN, stateLED);
  response();
}

void handleLedOff() {
  stateLED = HIGH;
  digitalWrite(LED_BUILTIN, stateLED);
  response();
}

const String HtmlHtml = "<html><head>"
    "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /></head>";
const String HtmlHtmlClose = "</html>";
const String HtmlTitle = "<h1>Arduino-er: ESP8266 AP WebServer exercise</h1><br/>\n";
const String HtmlLedStateLow = "<big>LED is now <b>ON</b></big><br/>\n";
const String HtmlLedStateHigh = "<big>LED is now <b>OFF</b></big><br/>\n";
const String HtmlButtons =
    "<a href=\"LEDOn\"><button style=\"display: block; width: 100%;\">ON</button></a><br/>"
    "<a href=\"LEDOff\"><button style=\"display: block; width: 100%;\">OFF</button></a><br/>";

void response(){
  String htmlRes = HtmlHtml + HtmlTitle;
  if(stateLED == LOW){
    htmlRes += HtmlLedStateLow;
  }else{
    htmlRes += HtmlLedStateHigh;
  }

  htmlRes += HtmlButtons;
  htmlRes += HtmlHtmlClose;

  server.send(200, "text/html", htmlRes);
}

void setup() {
    delay(1000);
    Serial.begin(9600);
    Serial.println();

    WiFi.softAP(ssid, password);

    IPAddress apip = WiFi.softAPIP();
    Serial.print("visit: \n");
    Serial.println(apip);
    server.on("/", handleRoot);
    server.on("/LEDOn", handleLedOn);
    server.on("/LEDOff", handleLedOff);
    server.begin();
    Serial.println("HTTP server beginned");
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, stateLED);
}

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

Alex1

New member
@Alex1 держите Вам пример из либ ардуиновских. Не понимаю, почему Вы сами туда не заглянули

Код:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>

const char* ssid = "........";
const char* password = "........";

ESP8266WebServer server(80);

const char* www_username = "admin";
const char* www_password = "esp8266";

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if(WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Connect Failed! Rebooting...");
    delay(1000);
    ESP.restart();
  }
  ArduinoOTA.begin();

  server.on("/", [](){
    if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
    server.send(200, "text/plain", "Login OK");
  });
  server.begin();

  Serial.print("Open http://");
  Serial.print(WiFi.localIP());
  Serial.println("/ in your browser to see it working");
}

void loop() {
  ArduinoOTA.handle();
  server.handleClient();
}
Этот пример Я пробовал, но дальше как "Login OK" ничего не продолжалось
 

kab

New member
@Alex1

Всё существенней проще:
- берем первоначальный код из поста №1
- после каждой
Код:
  ", [](){
в общем, в начале каждой функции-обработчика (их у Вас вроде 3 штуки) надо вставить такие строки


Код:
     if(!server.authenticate("esp", "123"))
          {
            server.requestAuthentication();
            return;
          }
"esp" - логин -поставить свой

"123" - пароль -поставить свой

Вот всё!!!

ЗЫ. Возможно такой вариант тоже работает:
Код:
if(!server.authenticate(www_username, www_password))
      return server.requestAuthentication();
 
Последнее редактирование:
Сверху Снизу