Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Раздел для начинающих", создана пользователем Alex1, 26 авг 2017.

  1. Alex1

    Alex1 Новичок

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

    код управления реле (раскрыть)

    Код (Text):
    1.  
    2. #include <ESP8266WiFi.h>
    3. #include <WiFiClient.h>
    4. #include <ESP8266WebServer.h>
    5. #include <ESP8266mDNS.h>
    6.  
    7. MDNSResponder mdns;
    8.  
    9. // Wi-Fi
    10. const char* ssid = "****************************";
    11. const char* password = "*************************";
    12.  
    13. byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
    14. IPAddress ip(192,168,1,170);
    15. IPAddress gateway(192,168,1,1);
    16. IPAddress subnet(255,255,255,0);
    17.  
    18. ESP8266WebServer server(80);
    19.  
    20. int D0_pin = 16;
    21.  
    22. void setup(void){
    23.   // preparing GPIOs
    24.   pinMode(D0_pin, OUTPUT);
    25.   digitalWrite(D0_pin, LOW);
    26.  
    27.   delay(100);
    28.   Serial.begin(115200);
    29.   WiFi.begin(ssid, password);
    30.   WiFi.config(ip, gateway, subnet);
    31.  
    32.   Serial.println("");
    33.  
    34.   // Wait for connection
    35.   while (WiFi.status() != WL_CONNECTED) {
    36.     delay(500);
    37.    Serial.print(".");
    38.   }
    39.   Serial.println("");
    40.   Serial.print("Connected to ");
    41.   Serial.println(ssid);
    42.   Serial.print("IP address: ");
    43.   Serial.println(WiFi.localIP());
    44.  
    45.   if (mdns.begin("esp8266", WiFi.localIP())) {
    46.     Serial.println("MDNS responder started");
    47.   }
    48.  
    49.   server.on("/", [](){
    50.     server.send(200, "text/html", webPage());
    51.   });
    52.   server.on("/socket1On", [](){
    53.     digitalWrite(D0_pin, HIGH);
    54.     server.send(200, "text/html", webPage());
    55.     delay(100);
    56.  
    57.   });
    58.   server.on("/socket1Off", [](){
    59.     digitalWrite(D0_pin, LOW);
    60.     server.send(200, "text/html", webPage());
    61.     delay(100);
    62.  
    63.  
    64.   });
    65.   server.begin();
    66.   Serial.println("HTTP server started");
    67. }
    68. void loop(void){
    69.   server.handleClient();
    70. }
    71.  
    72. String webPage()
    73. {
    74.   String web;
    75.   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>";
    76.   web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
    77.   //++++++++++ LED-1  +++++++++++++
    78.   web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 1----</p>";
    79.   if (digitalRead(D0_pin) == 1)
    80.   {
    81.     web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
    82.   }
    83.   else
    84.   {
    85.     web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
    86.   }
    87.   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>";
    88.   // ++++++++ LED-1 +++++++++++++
    89.  
    90.  
    91.   // ========REFRESH=============
    92.   web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
    93.   // ========REFRESH=============
    94.  
    95.  
    96.   web += "</div>";
    97.   return(web);
    98. }
    99.  


    Код авторизации
    Код для авторизации на веб странице (раскрыть)

    Код (Text):
    1.  
    2. // Авторизация на 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/    //
    3.  
    4.  
    5.  
    6.  
    7.  
    8. void loop() {
    9.   WiFiClient client = server.available();
    10.   if (client) {
    11.     boolean currentLineIsBlank = true;
    12.     while (client.connected()) {
    13.       if (client.available()) {
    14.         char c = client.read();
    15.         readString += c;
    16.         if (c == '\n' && currentLineIsBlank) {
    17.           if (readString.lastIndexOf(F("Authorization: Basic MDAwMDAwOjAwMDAwMA=="))>-1) {    // MDAwMDAwOjAwMDAwMA==  0000 0000 http://base64.ru/ через разделитель двоеточие ":" //
    18.             if (readString.lastIndexOf(F("GET /favicon.ico"))>-1) {
    19.               client.println(F("HTTP/1.0 404 Not Found"));
    20.             }
    21.             else {
    22.               client.println(F("HTTP/1.0 200 OK"));
    23.               client.println(F("Content-Type: text/html"));
    24.               client.println(F("Pragma: no-cache\r\nRefresh: 30\r\n"));
    25.               client.println(F("<html><head><meta charset=UTF-8\"><title>Arduino - iT4iT.CLUB</title>"));
    26.               client.println(F("<style>body,table,tr,td{font-style:normal;font-family:verdana;font-size:11px;}body{background-color:#FFEBD5;}</style></head><body>"));
    27.               client.print(F("Arduino on <a href=\"https://it4it.club\">iT4iT.CLUB</a>"));
    28.               client.println(F("</body></html>"));
    29.             }
    30.           }
    31.           else {
    32.             client.println(F("HTTP/1.0 401 Unauthorized"));
    33.             client.println(F("WWW-Authenticate: Basic realm=\"Arduino - iT4iT.CLUB\""));
    34.           }
    35.           break;
    36.         }
    37.  
    38.         if (c == '\n') {
    39.           currentLineIsBlank = true;
    40.         }
    41.         else if (c != '\r') {
    42.           currentLineIsBlank = false;
    43.         }
    44.       }
    45.     }
    46.     delay(30);
    47.  
    48.     readString = "";
    49.     client.stop();
    50.   }
    51. }
     
    Последнее редактирование: 26 авг 2017
  2. Andy Korg

    Andy Korg Moderator Команда форума

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

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Авторизация получается нормально, без основного кода, но только как я пытаюсь вставить этот код в свой, не компилируется, пишет разные ошибки в строках, тонкостей не понимаю пока, где не состыковки
     
  4. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    416
    Симпатии:
    76
    Хотел прочитать список ошибок, но не смог пробиться через ментальное поле - сегодня большие помехи для телепатических связей. Шутка :)
    Нужен список ошибок компиляции, что бы что то советовать.
     
  5. Alex1

    Alex1 Новичок

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

    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <ESP8266WebServer.h>
    4. #include <ESP8266mDNS.h>
    5. #include <SPI.h>
    6.  
    7. MDNSResponder mdns;
    8. // Wi-Fi
    9. const char* ssid = "*******";
    10. const char* password = "******";
    11. byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
    12. IPAddress ip(192,168,1,170);
    13. IPAddress gateway(192,168,1,1);
    14. IPAddress subnet(255,255,255,0);
    15. ESP8266WebServer server(80);
    16.  
    17. String readString;         // Буфер для данных от пользователя Web сервера/*
    18.  
    19. int D0_pin = 16;
    20. void setup(void){
    21.   // preparing GPIOs
    22.   pinMode(D0_pin, OUTPUT);
    23.   digitalWrite(D0_pin, LOW);
    24.   delay(100);
    25.   Serial.begin(115200);
    26.   WiFi.begin(ssid, password);
    27.   WiFi.config(ip, gateway, subnet);
    28.   Serial.println("");
    29.   // Wait for connection
    30.   while (WiFi.status() != WL_CONNECTED) {
    31.     delay(500);
    32.    Serial.print(".");
    33.   }
    34.   Serial.println("");
    35.   Serial.print("Connected to ");
    36.   Serial.println(ssid);
    37.   Serial.print("IP address: ");
    38.   Serial.println(WiFi.localIP());
    39.   if (mdns.begin("esp8266", WiFi.localIP())) {
    40.     Serial.println("MDNS responder started");
    41.   }
    42.   server.on("/", [](){
    43.     server.send(200, "text/html", webPage());
    44.   });
    45.   server.on("/socket1On", [](){
    46.     digitalWrite(D0_pin, HIGH);
    47.     server.send(200, "text/html", webPage());
    48.     delay(100);
    49.   });
    50.   server.on("/socket1Off", [](){
    51.     digitalWrite(D0_pin, LOW);
    52.     server.send(200, "text/html", webPage());
    53.     delay(100);
    54.   });
    55.   server.begin();
    56.   Serial.println("HTTP server started");
    57. }
    58. void loop(void){
    59.  
    60. WiFiClient client = server.available();
    61.   if (client) {
    62.     boolean currentLineIsBlank = true;
    63.     while (client.connected()) {
    64.       if (client.available()) {
    65.         char c = client.read();
    66.         readString += c;
    67.         if (c == '\n' && currentLineIsBlank) {
    68.           if (readString.lastIndexOf(F("Authorization: Basic MDAwMDAwOjAwMDAwMA=="))>-1) {    // MDAwMDAwOjAwMDAwMA==  0000 0000 http://base64.ru/ через разделитель двоеточие ":" //
    69.             if (readString.lastIndexOf(F("GET /favicon.ico"))>-1) {
    70.               client.println(F("HTTP/1.0 404 Not Found"));
    71.             }
    72.             else {
    73.               client.println(F("HTTP/1.0 200 OK"));
    74.               client.println(F("Content-Type: text/html"));
    75.               client.println(F("Pragma: no-cache\r\nRefresh: 30\r\n"));
    76.               client.println(F("<html><head><meta charset=UTF-8\"><title>Arduino - iT4iT.CLUB</title>"));
    77.               client.println(F("<style>body,table,tr,td{font-style:normal;font-family:verdana;font-size:11px;}body{background-color:#FFEBD5;}</style></head><body>"));
    78.               client.print(F("Arduino on <a href=\"https://it4it.club\">iT4iT.CLUB</a>"));
    79.               client.println(F("</body></html>"));
    80.             }
    81.           }
    82.           else {
    83.             client.println(F("HTTP/1.0 401 Unauthorized"));
    84.             client.println(F("WWW-Authenticate: Basic realm=\"Arduino - iT4iT.CLUB\""));
    85.           }
    86.           break;
    87.         }
    88.  
    89.         if (c == '\n') {
    90.           currentLineIsBlank = true;
    91.         }
    92.         else if (c != '\r') {
    93.           currentLineIsBlank = false;
    94.         }
    95.       }
    96.     }
    97.     delay(30);
    98.  
    99.     readString = "";
    100.     client.stop();
    101.   }
    102. }
    103.   server.handleClient();
    104. }
    105. String webPage()
    106. {
    107.   String web;
    108.   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>";
    109.   web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
    110.   //++++++++++ LED-1  +++++++++++++
    111.   web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 1----</p>";
    112.   if (digitalRead(D0_pin) == 1)
    113.   {
    114.     web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
    115.   }
    116.   else
    117.   {
    118.     web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
    119.   }
    120.   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>";
    121.   // ++++++++ LED-1 +++++++++++++
    122.   // ========REFRESH=============
    123.   web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
    124.   // ========REFRESH=============
    125.   web += "</div>";
    126.   return(web);
    127. }
     
    Последнее редактирование: 26 авг 2017
  6. Andy Korg

    Andy Korg Moderator Команда форума

    Сообщения:
    416
    Симпатии:
    76
    Компилятор не может найти функцию webPage(), в то же время описание этой функции есть ниже в файле. Следовательно либо надо перенести описание этой функции выше строк в которых используется функция, либо объявить прототип функции webPage() вначале файла.
     
  7. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    993
    Симпатии:
    152
    Проверьте скобки в Loop
    у вас:
    } - здесь loop закончился
    server.handleClient(); ----- это уже за пределами loop
    } ------ и это тоже
     
  8. Alex1

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    'class ESP8266WebServer' has no member named 'available' ....следующая ошибка на строке... WiFiClient client = server.available();
    Переместил сюда, правильно?
    }
    delay(30);
    readString = "";
    client.stop();
    server.handleClient();
    }
     
    Последнее редактирование: 27 авг 2017
  9. kab

    kab Авторитетный участник сообщества

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

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Да конечно, Я не могу понять как после примера со входом *Login OK* перейти на основной код, а уроков в сети Я не нашёл к сожалению
     
  11. Alex1

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Подскажите после появления 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();
    }


    Код (Text):
    1.  #include <ESP8266WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <ESP8266WebServer.h>
    4. #include <ESP8266mDNS.h>
    5. #include <OneWire.h>
    6. #include <DallasTemperature.h>
    7. #include <Ticker.h>  // Мигание по вн. таймеру
    8. Ticker blinker;
    9. #define ONE_WIRE_BUS 2 /// GPIO02  НА ПЛАТЕ 201
    10. OneWire oneWire(ONE_WIRE_BUS);
    11. DallasTemperature sensors(&oneWire);
    12.  
    13. //const char *ssid = "Access Point home1";  // как точка доступа
    14. //const char *password = "12344321";        // как точка доступа
    15. const char *ssid = ***********        //  как клиент
    16. const char *password = ***********      //  как клиент
    17.  
    18.   byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
    19.   IPAddress ip(192, 168, 1, 100);
    20.   IPAddress gateway(192, 168, 1, 1);
    21.   IPAddress subnet(255, 255, 255, 0);
    22.   ESP8266WebServer server(80);
    23.   MDNSResponder mdns;
    24.  
    25.   int vcc;
    26.   ADC_MODE(ADC_VCC);
    27.  
    28.   int ledPin = 0;         // LED pin GPIO00 НА ПЛАТЕ 201.
    29.   uint8_t ledStatus = 0;
    30.   int counter = 0;
    31.  
    32.   const int buzzerPin = 10; // GPIO 010   D3 - на плате 201)
    33.   int led1 = 13;
    34.   int stateLED1 = LOW;
    35.   int led2 = 12;
    36.   int stateLED2 = LOW;
    37.   int led3 = 14;
    38.   int stateLED3 = LOW;
    39.   int led4 = 5;
    40.   int stateLED4 = LOW;
    41.  
    42.   int D5_pin = 16;  // GPIO 16 XPD  - на плате 201 rezerv
    43.   int key1=0;
    44.   int D6_pin = 4;  // GPIO 04
    45.   int key2=0;
    46. //R  int D7_pin = 15;  // GPIO 15
    47. //R  int key3=0;
    48.  
    49. void handleRoot()
    50. {
    51.     response();
    52.    
    53.    sensors.requestTemperatures();
    54.  
    55.     //******************** //Звук отработки  команды  - обновить F5
    56.   tone(buzzerPin, 1000);
    57.   delay(100);
    58.   tone(buzzerPin, 1200);
    59.   delay(200);
    60.   noTone(buzzerPin);
    61.   //********************
    62. }
    63. ////////////////////////////////
    64. void handleLed1On() {
    65.   stateLED1 = HIGH;
    66.   digitalWrite(led1, stateLED1);
    67. //******************** //Звук отработки  команд кнопка ON
    68.   tone(buzzerPin, 600);
    69.   delay(80);
    70.   tone(buzzerPin, 400);
    71.   delay(80);
    72.   tone(buzzerPin, 700);
    73.   delay(200);
    74.   noTone(buzzerPin);
    75.   //********************
    76.   response();
    77. }
    78. void handleLed1Off() {
    79.   stateLED1 = LOW;
    80.   digitalWrite(led1, stateLED1);
    81.   //******************** //Звук отработки  команд кнопка OFF
    82.   tone(buzzerPin, 400);
    83.   delay(80);
    84.   tone(buzzerPin, 600);
    85.   delay(80);
    86.   tone(buzzerPin, 500);
    87.   delay(200);
    88.   noTone(buzzerPin);
    89.   //********************
    90.   response();
    91. ////////////////////////////////
    92. }
    93. void handleLed2On() {
    94.   stateLED2 = HIGH;
    95.   digitalWrite(led2, stateLED2);
    96.   //******************** //Звук отработки  команд кнопка ON
    97.   tone(buzzerPin, 600);
    98.   delay(80);
    99.   tone(buzzerPin, 400);
    100.   delay(80);
    101.   tone(buzzerPin, 700);
    102.   delay(200);
    103.   noTone(buzzerPin);
    104.   //********************
    105.   response();
    106. }
    107. void handleLed2Off() {
    108.   stateLED2 = LOW;
    109.   digitalWrite(led2, stateLED2);
    110.   //******************** //Звук отработки  команд кнопка OFF
    111.   tone(buzzerPin, 400);
    112.   delay(80);
    113.   tone(buzzerPin, 600);
    114.   delay(80);
    115.   tone(buzzerPin, 500);
    116.   delay(200);
    117.   noTone(buzzerPin);
    118.   //********************
    119.   response();
    120. }
    121. void handleLed3On() {
    122.   stateLED3 = HIGH;
    123.   digitalWrite(led3, stateLED3);
    124.   //******************** //Звук отработки  команд кнопка ON
    125.   tone(buzzerPin, 600);
    126.   delay(80);
    127.   tone(buzzerPin, 400);
    128.   delay(80);
    129.   tone(buzzerPin, 700);
    130.   delay(200);
    131.   noTone(buzzerPin);
    132.   //********************
    133.   response();
    134. }
    135. void handleLed3Off() {
    136.   stateLED3 = LOW;
    137.   digitalWrite(led3, stateLED3);
    138.   //******************** //Звук отработки  команд кнопка OFF
    139.   tone(buzzerPin, 400);
    140.   delay(80);
    141.   tone(buzzerPin, 600);
    142.   delay(80);
    143.   tone(buzzerPin, 500);
    144.   delay(200);
    145.   noTone(buzzerPin);
    146.   //********************
    147.   response();
    148. }
    149. void handleLed4On() {
    150.   stateLED4 = HIGH;
    151.   digitalWrite(led4, stateLED4);
    152.   //******************** //Звук отработки  команд кнопка ON
    153.   tone(buzzerPin, 600);
    154.   delay(80);
    155.   tone(buzzerPin, 400);
    156.   delay(80);
    157.   tone(buzzerPin, 700);
    158.   delay(200);
    159.   noTone(buzzerPin);
    160.   //********************
    161.   response();
    162. }
    163. void handleLed4Off() {
    164.   stateLED4 = LOW;
    165.   digitalWrite(led4, stateLED4);
    166.   //******************** //Звук отработки  команд кнопка OFF
    167.   tone(buzzerPin, 400);
    168.   delay(80);
    169.   tone(buzzerPin, 600);
    170.   delay(80);
    171.   tone(buzzerPin, 500);
    172.   delay(200);
    173.   noTone(buzzerPin);
    174.   //********************
    175.   response();
    176. }
     
  12. Slacky

    Slacky Читатель

    Сообщения:
    202
    Симпатии:
    10
    @Alex1 в самом начале построения html страницы пишем что-то вроде

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

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

    поставить

    ESP8266WebServer webServer(80);

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

    Или Вы о чем?
     
    Последнее редактирование: 11 сен 2017
    Alex1 нравится это.
  13. kab

    kab Авторитетный участник сообщества

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

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

    kab Авторитетный участник сообщества

    Сообщения:
    635
    Симпатии:
    78
    Да, я про тот же вариант, что и @Slacky
     
  15. Alex1

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Здесь как то всё разбросано у вас. Для новичка собирать
    это уж перебор, может ссылки на уроки есть какие. что б суть понять как это работает, а не пальцем в небо
     
  16. Slacky

    Slacky Читатель

    Сообщения:
    202
    Симпатии:
    10
    @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();
    }

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

    Slacky Читатель

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

    Код (C):
    1. #include <ESP8266WiFi.h>
    2. #include <ESP8266mDNS.h>
    3. #include <ArduinoOTA.h>
    4. #include <ESP8266WebServer.h>
    5.  
    6. const char* ssid = "........";
    7. const char* password = "........";
    8.  
    9. ESP8266WebServer server(80);
    10.  
    11. const char* www_username = "admin";
    12. const char* www_password = "esp8266";
    13.  
    14. void setup() {
    15.   Serial.begin(115200);
    16.   WiFi.mode(WIFI_STA);
    17.   WiFi.begin(ssid, password);
    18.   if(WiFi.waitForConnectResult() != WL_CONNECTED) {
    19.     Serial.println("WiFi Connect Failed! Rebooting...");
    20.     delay(1000);
    21.     ESP.restart();
    22.   }
    23.   ArduinoOTA.begin();
    24.  
    25.   server.on("/", [](){
    26.     if(!server.authenticate(www_username, www_password))
    27.       return server.requestAuthentication();
    28.     server.send(200, "text/plain", "Login OK");
    29.   });
    30.   server.begin();
    31.  
    32.   Serial.print("Open http://");
    33.   Serial.print(WiFi.localIP());
    34.   Serial.println("/ in your browser to see it working");
    35. }
    36.  
    37. void loop() {
    38.   ArduinoOTA.handle();
    39.   server.handleClient();
    40. }
     
  18. Alex1

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Мне не очень понятно без примера что куда вставлять, например сюда
    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <ESP8266WebServer.h>
    4.  
    5. const char *ssid = "arduino-er";
    6. const char *password = "password";
    7. int stateLED = LOW;
    8.  
    9. ESP8266WebServer server(80);
    10.  
    11. void handleRoot() {
    12.     response();
    13. }
    14.  
    15. void handleLedOn() {
    16.   stateLED = LOW;
    17.   digitalWrite(LED_BUILTIN, stateLED);
    18.   response();
    19. }
    20.  
    21. void handleLedOff() {
    22.   stateLED = HIGH;
    23.   digitalWrite(LED_BUILTIN, stateLED);
    24.   response();
    25. }
    26.  
    27. const String HtmlHtml = "<html><head>"
    28.     "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /></head>";
    29. const String HtmlHtmlClose = "</html>";
    30. const String HtmlTitle = "<h1>Arduino-er: ESP8266 AP WebServer exercise</h1><br/>\n";
    31. const String HtmlLedStateLow = "<big>LED is now <b>ON</b></big><br/>\n";
    32. const String HtmlLedStateHigh = "<big>LED is now <b>OFF</b></big><br/>\n";
    33. const String HtmlButtons =
    34.     "<a href=\"LEDOn\"><button style=\"display: block; width: 100%;\">ON</button></a><br/>"
    35.     "<a href=\"LEDOff\"><button style=\"display: block; width: 100%;\">OFF</button></a><br/>";
    36.  
    37. void response(){
    38.   String htmlRes = HtmlHtml + HtmlTitle;
    39.   if(stateLED == LOW){
    40.     htmlRes += HtmlLedStateLow;
    41.   }else{
    42.     htmlRes += HtmlLedStateHigh;
    43.   }
    44.  
    45.   htmlRes += HtmlButtons;
    46.   htmlRes += HtmlHtmlClose;
    47.  
    48.   server.send(200, "text/html", htmlRes);
    49. }
    50.  
    51. void setup() {
    52.     delay(1000);
    53.     Serial.begin(9600);
    54.     Serial.println();
    55.  
    56.     WiFi.softAP(ssid, password);
    57.  
    58.     IPAddress apip = WiFi.softAPIP();
    59.     Serial.print("visit: \n");
    60.     Serial.println(apip);
    61.     server.on("/", handleRoot);
    62.     server.on("/LEDOn", handleLedOn);
    63.     server.on("/LEDOff", handleLedOff);
    64.     server.begin();
    65.     Serial.println("HTTP server beginned");
    66.     pinMode(LED_BUILTIN, OUTPUT);
    67.     digitalWrite(LED_BUILTIN, stateLED);
    68. }
    69.  
    70. void loop() {
    71.     server.handleClient();
    72. }
     
  19. Alex1

    Alex1 Новичок

    Сообщения:
    51
    Симпатии:
    2
    Этот пример Я пробовал, но дальше как "Login OK" ничего не продолжалось
     
  20. kab

    kab Авторитетный участник сообщества

    Сообщения:
    635
    Симпатии:
    78
    @Alex1

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


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

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

    Вот всё!!!

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

Поделиться этой страницей