Как объединить 2 скетча. 1 скетч - авторизация при входе на свой веб сервер через браузер. 2 скетч - включение выключение 2-х светодиодов

Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h>             //библиотека для работы с SPI
#include <Ethernet.h>        //библиотека для работы с Ethernet 
#include <Base64.h>

boolean newInfo = 0;        //переменная для новой информации
//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     

//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192,168,100,177);    //пример МОЕГО IP адреса, вы вводите сюда СВОЙ

//инифиализация библиотеки Ethernet server library
EthernetServer server(80);

void setup()
{
  pinMode(8, OUTPUT);                               //инициализируем 8 пин как выход для светодиода                  
  pinMode(7, OUTPUT);                               //инициализируем 7 пин как выход для светодиода
  
  //запускаем сервер с указанными ранее MAC и вашим IP
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  //принимаем данные, посылаемые клиентом
  EthernetClient client = server.available();

if(client){                                       //если запрос оканчивается пустой строкой
  boolean currentLineIsBlank = true;                //ставим метку об окончании запроса (дословно: текущая линия чиста)
  while (client.connected()) {                      //пока есть соединение с клиентом
    if (client.available()) {                       //если клиент активен
      char c = client.read();                       //считываем посылаемую информацию в переменную "с"
                                                  
      if(newInfo && c == ' '){                      //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
        newInfo = 0;                                //то обнуляем переменную поступления новой информации
      }
      
      if(c == '$'){                                 //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
                                                    //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
        newInfo = 1;                                //то пришла новая информация, ставим метку новой информации в 1
      }

      /************************************************************************************************
      Примечание:
      Символ $ используется как обычный символ, который разделяет 1 от 2
      На практике применяют символ &, который разделяет новые переменные от последующих
      Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
      client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value);
      как видите, знак & разделяет значение переменной - ID и переменную type     
      ***************************************************************************************************/
      
                                                     //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);
          
          if(c == '1'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
          }
          
          if(c == '2'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
          }    
      } 

                                                         //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);
          if(c == '3'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(7, HIGH);                    //то зажигаем светодиодна 7 пине
          }
          
          if(c == '4'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(7, LOW);                     //гасим светодиодна 7 пине
          }    
      } 

      
      if (c == '\n') {                              //если "с" равен символу новой строки
        currentLineIsBlank = true;                  //то начинаем новую строку
      } 
      else if (c != '\r') {                         //иначе, если "с" не равен символу возврата курсора на начало строки
        currentLineIsBlank = false;                 //то получаем символ на текущей строке
      }

      if (c == '\n' && currentLineIsBlank) {        //выводим HTML страницу
        
        client.println("HTTP/1.1 200 OK");          //заголовочная информация
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 30");              //автоматическое обновление каждые 30 сек
        client.println();
        client.println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");          //HTML тип документа
        client.println("<html><head>");        //открытие тега HTML 
        client.println("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">");
        client.print("<title>My web Server</title>");                  //название страницы
        client.print("<H1>Мой веб сервер</H1>");                        //заголовок на странице
  
       client.print("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>");       //кнопка включить 8 пин
       client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
       client.print("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>");      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
       client.print("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>");       //кнопка включить 7 пин
       client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
       client.print("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>");      //кнопка выключить 7 пин
       
        client.println("<br />");       
        client.println("</html>");                  //закрываем тег HTML
        break;                                      //выход
      }
    
    }
    
  }
  delay(1);                                          //время на получение новых данных
  client.stop();                                     //закрываем соединение 
}
}


/*
Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h> //библиотека для работы с SPI
#include <Ethernet.h> //библиотека для работы с Ethernet
#include <Base64.h>
/*
Настройки сети
*/

boolean newInfo = 0; //переменная для новой информации

//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192, 168, 100, 177);

EthernetServer server(80); //инифиализация библиотеки Ethernet server library

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

void setup()
{
pinMode(8, OUTPUT); //инициализируем 8 пин как выход для светодиода
pinMode(7, OUTPUT); //инициализируем 7 пин как выход для светодиода

Serial.begin(9600);
// Поднимаем сеть
Ethernet.begin(mac, ip);
server.begin();
Serial.println(Ethernet.localIP());
}

void loop() {
EthernetClient client = server.available();

if(client){ //если запрос оканчивается пустой строкой
boolean currentLineIsBlank = true; //ставим метку об окончании запроса (дословно: текущая линия чиста)
while (client.connected()) { //пока есть соединение с клиентом
if (client.available()) { //если клиент активен
char c = client.read(); //считываем посылаемую информацию в переменную “с”

readString += c;

  if(newInfo && c == ' '){         //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
     newInfo = 0;                  //то обнуляем переменную поступления новой информации
  } 
  
  if(c == '$'){                    //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
  newInfo = 1;                     //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
  }                                //то пришла новая информация, ставим метку новой информации в 1

/************************************************************************************************
Примечание:
Символ $ используется как обычный символ, который разделяет 1 от 2
На практике применяют символ &, который разделяет новые переменные от последующих
Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
client.print(“GET /controlbar/wp-content/data.php?uid=” + ID + “&type=” + type + “&value=” + value);
как видите, знак & разделяет значение переменной - ID и переменную type
***************************************************************************************************/

                                     //Проверяем содержание URL - присутствует $1 или $2
  if(newInfo == 1){                              //если есть новая информация
      Serial.println(c);


      if(c == '1'){                              //и "с" содержит 1
      Serial.println("ON");
      digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
      }

      if(c == '2'){                              //если "с" содержит 2
      Serial.println("OFF");
      digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
      }  
      }



                                                 //Проверяем содержание URL - присутствует $1 или $2
  if(newInfo == 1){                              //если есть новая информация
      Serial.println(c);

      if(c == '3'){                              //и "с" содержит 3
      Serial.println("ON");
      digitalWrite(7, HIGH);                    //то зажигаем светодиод на 8 пине
      }

   if(c == '4'){                                //если "с" содержит 4
      Serial.println("OFF");
      digitalWrite(7, LOW);                     //гасим светодиод на 8 пине
      }  
      }

if (c == ‘\n’ && currentLineIsBlank) {
if (readString.lastIndexOf(F(“Authorization: Basic Tmljb2xhaV82MzpOaU5hRXY3NTMx”))>-1) {
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.print(F("<title>My web Server</title>"));                  //название страницы
    client.print(F("<H1>Мой веб сервер</H1>"));                        //заголовок на странице
    client.println(F("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">"));


        
   client.print(F("Yandex Яндекс <a href=\"https://esp8266.ru\">esp8266.ru</p>"));
   client.println(F("</body></html>"));





   client.print(F("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>"));       //кнопка включить 8 пин
   client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
   client.print(F("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>"));      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
   
   
   client.print(F("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>"));       //кнопка включить 7 пин
   client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
   client.print(F("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>"));      //кнопка выключить 7 пин









          
        }
      }
      else {
        client.println(F("HTTP/1.0 401 Unauthorized"));
        client.println(F("WWW-Authenticate: Basic realm=\"esp8266.ru\""));
      }
      break;
    }

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

readString = "";
client.stop();

}
}

Почините вставку кода, так невозможно.

Невозможно, тут нет “двух скетчей”, вы вставили один и тот же код дважды.

Видимо требуется объединить два одинаковых скетча.

Соединять вдоль или поперек?

Так?

Спойлер
Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h>             //библиотека для работы с SPI
#include <Ethernet.h>        //библиотека для работы с Ethernet 
#include <Base64.h>

boolean newInfo = 0;        //переменная для новой информации
//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     

//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192,168,100,177);    //пример МОЕГО IP адреса, вы вводите сюда СВОЙ

//инифиализация библиотеки Ethernet server library
EthernetServer server(80);

void setup()
{
  pinMode(8, OUTPUT);                               //инициализируем 8 пин как выход для светодиода                  
  pinMode(7, OUTPUT);                               //инициализируем 7 пин как выход для светодиода
  
  //запускаем сервер с указанными ранее MAC и вашим IP
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  //принимаем данные, посылаемые клиентом
  EthernetClient client = server.available();

if(client){                                       //если запрос оканчивается пустой строкой
  boolean currentLineIsBlank = true;                //ставим метку об окончании запроса (дословно: текущая линия чиста)
  while (client.connected()) {                      //пока есть соединение с клиентом
    if (client.available()) {                       //если клиент активен
      char c = client.read();                       //считываем посылаемую информацию в переменную "с"
                                                  
      if(newInfo && c == ' '){                      //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
        newInfo = 0;                                //то обнуляем переменную поступления новой информации
      }
      
      if(c == '$'){                                 //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
                                                    //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
        newInfo = 1;                                //то пришла новая информация, ставим метку новой информации в 1
      }

      /************************************************************************************************
      Примечание:
      Символ $ используется как обычный символ, который разделяет 1 от 2
      На практике применяют символ &, который разделяет новые переменные от последующих
      Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
      client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value);
      как видите, знак & разделяет значение переменной - ID и переменную type     
      ***************************************************************************************************/
      
                                                     //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);
          
          if(c == '1'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
          }
          
          if(c == '2'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
          }    
      } 

                                                         //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);
          if(c == '3'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(7, HIGH);                    //то зажигаем светодиодна 7 пине
          }
          
          if(c == '4'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(7, LOW);                     //гасим светодиодна 7 пине
          }    
      } 

      
      if (c == '\n') {                              //если "с" равен символу новой строки
        currentLineIsBlank = true;                  //то начинаем новую строку
      } 
      else if (c != '\r') {                         //иначе, если "с" не равен символу возврата курсора на начало строки
        currentLineIsBlank = false;                 //то получаем символ на текущей строке
      }

      if (c == '\n' && currentLineIsBlank) {        //выводим HTML страницу
        
        client.println("HTTP/1.1 200 OK");          //заголовочная информация
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 30");              //автоматическое обновление каждые 30 сек
        client.println();
        client.println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");          //HTML тип документа
        client.println("<html><head>");        //открытие тега HTML 
        client.println("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">");
        client.print("<title>My web Server</title>");                  //название страницы
        client.print("<H1>Мой веб сервер</H1>");                        //заголовок на странице
  
       client.print("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>");       //кнопка включить 8 пин
       client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
       client.print("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>");      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
       client.print("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>");       //кнопка включить 7 пин
       client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
       client.print("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>");      //кнопка выключить 7 пин
       
        client.println("<br />");       
        client.println("</html>");                  //закрываем тег HTML
        break;                                      //выход
      }
    
    }
    
  }
  delay(1);                                          //время на получение новых данных
  client.stop();                                     //закрываем соединение 
}
}
/*
Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h> //библиотека для работы с SPI
#include <Ethernet.h> //библиотека для работы с Ethernet
#include <Base64.h>
/*
Настройки сети
*/

boolean newInfo = 0; //переменная для новой информации

//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192, 168, 100, 177);

EthernetServer server(80); //инифиализация библиотеки Ethernet server library

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

void setup()
{
pinMode(8, OUTPUT); //инициализируем 8 пин как выход для светодиода
pinMode(7, OUTPUT); //инициализируем 7 пин как выход для светодиода

Serial.begin(9600);
// Поднимаем сеть
Ethernet.begin(mac, ip);
server.begin();
Serial.println(Ethernet.localIP());
}

void loop() {
EthernetClient client = server.available();

if(client){ //если запрос оканчивается пустой строкой
boolean currentLineIsBlank = true; //ставим метку об окончании запроса (дословно: текущая линия чиста)
while (client.connected()) { //пока есть соединение с клиентом
if (client.available()) { //если клиент активен
char c = client.read(); //считываем посылаемую информацию в переменную “с”

readString += c;

if(newInfo && c == ' '){         //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
     newInfo = 0;                  //то обнуляем переменную поступления новой информации
  } 
  
  if(c == '$'){                    //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
  newInfo = 1;                     //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
  }                                //то пришла новая информация, ставим метку новой информации в 1
/************************************************************************************************
Примечание:
Символ $ используется как обычный символ, который разделяет 1 от 2
На практике применяют символ &, который разделяет новые переменные от последующих
Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
client.print(“GET /controlbar/wp-content/data.php?uid=” + ID + “&type=” + type + “&value=” + value);
как видите, знак & разделяет значение переменной - ID и переменную type
***************************************************************************************************/

//Проверяем содержание URL - присутствует $1 или $2
  if(newInfo == 1){                              //если есть новая информация
      Serial.println(c);


      if(c == '1'){                              //и "с" содержит 1
      Serial.println("ON");
      digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
      }

      if(c == '2'){                              //если "с" содержит 2
      Serial.println("OFF");
      digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
      }  
      }



                                                 //Проверяем содержание URL - присутствует $1 или $2
  if(newInfo == 1){                              //если есть новая информация
      Serial.println(c);

      if(c == '3'){                              //и "с" содержит 3
      Serial.println("ON");
      digitalWrite(7, HIGH);                    //то зажигаем светодиод на 8 пине
      }

   if(c == '4'){                                //если "с" содержит 4
      Serial.println("OFF");
      digitalWrite(7, LOW);                     //гасим светодиод на 8 пине
      }  
      }
if (c == ‘\n’ && currentLineIsBlank) {
if (readString.lastIndexOf(F(“Authorization: Basic Tmljb2xhaV82MzpOaU5hRXY3NTMx”))>-1) {
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.print(F("<title>My web Server</title>"));                  //название страницы
    client.print(F("<H1>Мой веб сервер</H1>"));                        //заголовок на странице
    client.println(F("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">"));


        
   client.print(F("Yandex Яндекс <a href=\"https://esp8266.ru\">esp8266.ru</p>"));
   client.println(F("</body></html>"));





   client.print(F("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>"));       //кнопка включить 8 пин
   client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
   client.print(F("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>"));      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
   
   
   client.print(F("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>"));       //кнопка включить 7 пин
   client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
   client.print(F("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>"));      //кнопка выключить 7 пин









          
        }
      }
      else {
        client.println(F("HTTP/1.0 401 Unauthorized"));
        client.println(F("WWW-Authenticate: Basic realm=\"esp8266.ru\""));
      }
      break;
    }

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

readString = "";
client.stop();
}
}

Спасибо за ответ. Вы правы, просто я не совсем корректно объяснил суть проблемы Во втором скетче я объединил 2 скетча, скетч с паролем и скетч с включением и выключением 2 светодиодов. Но проблема в том, что после загрузки 2-го скетча, светодиоды включаются и выключаются только после 2 или 3 раза. Стабилизировать чёткую работу включения и выключения светодиодов так и не смог. Подозреваю, что проблема в неправильном написании кода переменных. Но это мнение дилетанта, не обессудьте.

Не совсем так. Отвечу как и “b707”. Просто я не совсем корректно объяснил суть проблемы Во втором скетче я объединил 2 скетча, скетч с паролем и скетч с включением и выключением 2 светодиодов. Но проблема в том, что после загрузки 2-го скетча, светодиоды включаются и выключаются только после 2 или 3 раза. Стабилизировать чёткую работу включения и выключения светодиодов так и не смог. Подозреваю, что проблема в неправильном написании кода переменных. Но это мнение дилетанта, не обессудьте.

Ценю Ваше чувство юмора, но если говорить серьёзно, то проблема в следующем. Объединены 2 скетча, один отвечает за вход на свой веб сервер через браузер, второй – отвечает за включение и отключение 2 светодиодов. Всё работает, но светодиоды включаются и выключаются только после 2 или 3 раза. Как это решить? Подозреваю, что проблема в неправильном написании кода переменных. Но это мнение дилетанта, не обессудьте.

том, что Ваши скетчи невозможно читать. Вставьте их, наконец, нормально.

Вот мой объединённый скетч, проверил у меня компилируется без ошибок.
Всё работает, проверил прямо сейчас. Но светодиоды включаются и выключаются только после 2 или 3 раза. Как это решить? Подозреваю, что проблема в неправильном написании кода переменных. Но это мнение дилетанта, не обессудьте.
Ваш скетч загрузил в среду Ардуино, но он при проверке выдаёт ошибку. Может я ошибся, написав ранее опубликованный скетч с ошибкой.

Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h>           //библиотека для работы с SPI
#include <Ethernet.h>      //библиотека для работы с Ethernet
#include <Base64.h>
/*
  Настройки сети
*/


boolean newInfo = 0;        //переменная для новой информации


//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192, 168, 100, 177);                        

EthernetServer server(80); //инифиализация библиотеки Ethernet server library

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




void setup() 
{
pinMode(8, OUTPUT);                               //инициализируем 8 пин как выход для светодиода                  
pinMode(7, OUTPUT);                               //инициализируем 7 пин как выход для светодиода
  
  
  
  
  Serial.begin(9600);
  // Поднимаем сеть  
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.println(Ethernet.localIP());
}



void loop() {
  EthernetClient client = server.available();
  
  
  
  
   if(client){                                       //если запрос оканчивается пустой строкой
  boolean currentLineIsBlank = true;                //ставим метку об окончании запроса (дословно: текущая линия чиста)
  while (client.connected()) {                      //пока есть соединение с клиентом
    if (client.available()) {                       //если клиент активен
      char c = client.read();                       //считываем посылаемую информацию в переменную "с"
        
 readString += c;






      if(newInfo && c == ' '){         //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
         newInfo = 0;                  //то обнуляем переменную поступления новой информации
      } 
      
      if(c == '$'){                    //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
      newInfo = 1;                     //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
      }                                //то пришла новая информация, ставим метку новой информации в 1
      



  /************************************************************************************************
      Примечание:
      Символ $ используется как обычный символ, который разделяет 1 от 2
      На практике применяют символ &, который разделяет новые переменные от последующих
      Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
      client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value);
      как видите, знак & разделяет значение переменной - ID и переменную type     
      ***************************************************************************************************/

                                         //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);

  
          if(c == '1'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
          }

          if(c == '2'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
          }  
          }



                                                     //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);

          if(c == '3'){                              //и "с" содержит 3
          Serial.println("ON");
          digitalWrite(7, HIGH);                    //то зажигаем светодиод на 8 пине
          }

       if(c == '4'){                                //если "с" содержит 4
          Serial.println("OFF");
          digitalWrite(7, LOW);                     //гасим светодиод на 8 пине
          }  
          }
        



  


  if (c == '\n' && currentLineIsBlank) {
  if (readString.lastIndexOf(F("Authorization: Basic Tmljb2xhaTpOaWMxMjM0"))>-1) {
  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.print(F("<title>My web Server</title>"));                  //название страницы
        client.print(F("<H1>Мой веб сервер</H1>"));                        //заголовок на странице
        client.println(F("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">"));


            
       client.print(F("Yandex Яндекс <a href=\"https://esp8266.ru\">esp8266.ru</p>"));
       client.println(F("</body></html>"));





       client.print(F("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>"));       //кнопка включить 8 пин
       client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
       client.print(F("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>"));      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
       
       
       client.print(F("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>"));       //кнопка включить 7 пин
       client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
       client.print(F("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>"));      //кнопка выключить 7 пин









              
            }
          }
          else {
            client.println(F("HTTP/1.0 401 Unauthorized"));
            client.println(F("WWW-Authenticate: Basic realm=\"esp8266.ru\""));
          }
          break;
        }

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

    readString = "";
    client.stop();
  }
}

Вот мой объединённый скетч, проверил у меня компилируется без ошибок.
Возможно плохо читается, потому, что делал большие пробелы в коде, сейчас сократил.
Всё работает, проверил прямо сейчас. Но светодиоды включаются и выключаются только после 2 или 3 раза. Как это решить? Подозреваю, что проблема в неправильном написании кода переменных. Но это мнение дилетанта, не обессудьте.

/*
Ethernet Web Server
Управление светодиодом при нажатии кнопки on/off (вводе разных URL адресов) в браузере

Адрес включения светодиода:
IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter

http://IP-АДРЕС/$1

Для того, чтобы выключить:
http://IP-АДРЕС/$2

*/

#include <SPI.h>           //библиотека для работы с SPI
#include <Ethernet.h>      //библиотека для работы с Ethernet
#include <Base64.h>
/*
  Настройки сети
*/


boolean newInfo = 0;        //переменная для новой информации


//MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой
//или оставьте тот, что в примере
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


//указываем IP адрес
//будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter
IPAddress ip(192, 168, 100, 177);                        

EthernetServer server(80); //инифиализация библиотеки Ethernet server library

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

void setup() 
{
pinMode(8, OUTPUT);                               //инициализируем 8 пин как выход для светодиода                  
pinMode(7, OUTPUT);                               //инициализируем 7 пин как выход для светодиода
  
  
  
  
  Serial.begin(9600);
  // Поднимаем сеть  
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.println(Ethernet.localIP());
}

void loop() {
  EthernetClient client = server.available();
  
  
   if(client){                                       //если запрос оканчивается пустой строкой
  boolean currentLineIsBlank = true;                //ставим метку об окончании запроса (дословно: текущая линия чиста)
  while (client.connected()) {                      //пока есть соединение с клиентом
    if (client.available()) {                       //если клиент активен
      char c = client.read();                       //считываем посылаемую информацию в переменную "с"
        
 readString += c;


      if(newInfo && c == ' '){         //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
         newInfo = 0;                  //то обнуляем переменную поступления новой информации
      } 
      
      if(c == '$'){                    //если переменная "с", несущая отправленный нам запрос, содержит символ $ 
      newInfo = 1;                     //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов)
      }                                //то пришла новая информация, ставим метку новой информации в 1
      
  /************************************************************************************************
      Примечание:
      Символ $ используется как обычный символ, который разделяет 1 от 2
      На практике применяют символ &, который разделяет новые переменные от последующих
      Это использьуется, например, в GET-запросах, которые выглядят подобным образом:
      client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value);
      как видите, знак & разделяет значение переменной - ID и переменную type     
      ***************************************************************************************************/

                                         //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);

  
          if(c == '1'){                              //и "с" содержит 1
          Serial.println("ON");
          digitalWrite(8, HIGH);                    //то зажигаем светодиод на 8 пине
          }

          if(c == '2'){                              //если "с" содержит 2
          Serial.println("OFF");
          digitalWrite(8, LOW);                     //гасим светодиод на 8 пине
          }  
          }

                                                     //Проверяем содержание URL - присутствует $1 или $2
      if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);

          if(c == '3'){                              //и "с" содержит 3
          Serial.println("ON");
          digitalWrite(7, HIGH);                    //то зажигаем светодиод на 8 пине
          }

       if(c == '4'){                                //если "с" содержит 4
          Serial.println("OFF");
          digitalWrite(7, LOW);                     //гасим светодиод на 8 пине
          }  
          }
        

  if (c == '\n' && currentLineIsBlank) {
  if (readString.lastIndexOf(F("Authorization: Basic Tmljb2xhaTpOaWMxMjM0"))>-1) {
  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.print(F("<title>My web Server</title>"));                  //название страницы
        client.print(F("<H1>Мой веб сервер</H1>"));                        //заголовок на странице
        client.println(F("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">"));


            
       client.print(F("Yandex Яндекс <a href=\"https://esp8266.ru\">esp8266.ru</p>"));
       client.println(F("</body></html>"));


       client.print(F("<a href=\"/$1\"><button><h3>Включить1</h3></button></a>"));       //кнопка включить 8 пин
       client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел) 
       client.print(F("<a href=\"/$2\"><button><h3>Выключить1</h3></button></p>"));      //кнопка выключить 8 пин, в конце поставлен атрибут параграфа </p>, который переносит текст на следующую строку.
       
       
       client.print(F("<a href=\"/$3\"><button><h3>Включить2</h3></button></a>"));       //кнопка включить 7 пин
       client.print(F("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));                               // добавляем 5 пробелов между кнопками,(&nbsp; - один пробел)
       client.print(F("<a href=\"/$4\"><button><h3>Выключить2</h3></button></a>"));      //кнопка выключить 7 пин
    
            }
          }
          else {
            client.println(F("HTTP/1.0 401 Unauthorized"));
            client.println(F("WWW-Authenticate: Basic realm=\"esp8266.ru\""));
          }
          break;
        }

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

    readString = "";
    client.stop();
  }
}