Problema para visualizar la SSID servidor ESP8266

Hola gracias por leer mi duda

Tengo unos módulos ESP8266 y quiero probar con ellos hacer un pulsador a distancia para encender un LED usando la metodología servidor- cliente. Para ello me he guiado del siguiente artículo de Jopapa:http://www.jopapa.me/cliseresp8266.html

El problema lo estoy teniendo al cargar el programa al ESP que va a ser el servidor, no me sale ningún error, pero tampoco me aparece la ssid que creo.

Para cargar el programa hago lo siguiente:

1º el pin GPIO0 está puesto a masa.

2º Introduzco el programador UART en el puerto USB, y subo el programa, no da ningún error.

3º Desconecto el GPIO0 de masa y desconecto el programador UART y vuelvo a introducirlo en el USB sin el GPIO0 a masa.

4º El GPIO2 no hago nada con el porque ya está a 3.3V.

https://programarfacil.com/podcast/como-configurar-esp01-wifi-esp8266/

He probado un primer código en el que montaba un servidor WEB y he modificado su SSID varias veces (para ver si carga el programa correctamente) y si que lo carga porque cambia el SSID.

El programa con el que tengo problemas es el siguiente:

#include <ESP8266WiFi.h>

const char ssid[] = "Server_ESP8266";  
const char password[] = "1234";
WiFiServer server(80);

int LED_PIN = 2; 
int val=0;

void setup() {
  Serial.begin(115200);
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
   server.begin();
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);  

}

void loop() 
{
  WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client) 
   { 
      return;
     }
Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum());
// Lee la primera linea de la petición del cliente
  String req = client.readStringUntil('\r');    
  if (req.indexOf("/led/0") != -1)
   {
    val=0;
  } 
  if (req.indexOf("/led/1") != -1)
    { 
  val=1;
  }
  digitalWrite(LED_PIN, val); 
  client.flush();
}

Y el programa con el que sí que visualizo el SSID es el siguiente:

#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "NodeMCU_ESP8266";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12345678";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
int PinLED = 2;                           //Definimos el pin de salida - GPIO2 / D4
int estado = LOW;                         //Definimos la variable que va a recoger el estado del LED
 
void setup() {
  Serial.begin(115200);
 
  pinMode(PinLED, OUTPUT);                //Inicializamos el GPIO2 como salida
  digitalWrite(PinLED, LOW);              //Dejamos inicialmente el GPIO2 apagado
 
  server.begin();                         //inicializamos el servidor
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,1);      //Red con clave, en el canal 3 y visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 
 
  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());
}
 
void loop() 
{
  // Comprueba si el cliente ha conectado
  WiFiClient client = server.available();  
  if (!client) 
  {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available())
  {
    delay(1);
  }
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Lee la petición
  String peticion = client.readStringUntil('r');
  Serial.println(peticion);
  client.flush();
 
  // Comprueba la petición
  if (peticion.indexOf('/LED=ON') != -1) 
    {
    estado = HIGH;
  } 
  if (peticion.indexOf('/LED=OFF') != -1)
  {
    estado = LOW;
  }
 
  //Enciende o apaga el LED en función de la petición
  digitalWrite(PinLED, estado);
 
  // Envía la página HTML de respuesta al cliente
  client.println("HTTP/1.1 200 OK");
  client.println("");                                     //No olvidar esta línea de separación
  client.println("<!DOCTYPE HTML>");
  client.println("<meta charset='UTF-8'>");               //para que en el servidor aparezcan tildes
  client.println("<html>");
 
      //Imprime el estado del led
  client.print("<h1>El LED está ahora: ");                 
  if(estado == HIGH) {
    client.print("ENCENDIDO</h1>");  
  } else {
    client.print("APAGADO</h1>");
  }
 
      //Se crean enlaces para modificar el estado del LED      
  client.println("Presiona <a href='/LED=ON'>AQUÍ</a> para encender el LED
");
  client.println("Presiona <a href='/LED=OFF'>AQUÍ</a> para apagar el LED

");
 
      //Se crean cajas de comprobación (checkbox) para modificar el estado del LED
  client.println("<input type='checkbox' onClick=location.href='/LED=ON'> ENCENDER </input>
");
  client.println("<input type='checkbox' onClick=location.href='/LED=OFF'> APAGAR </input>

");
 
      //Se crean botones para modificar el estado del LED
  client.println("<button type='button' onClick=location.href='/LED=ON'> ENCENDER </button>");
  client.println("<button type='button' onClick=location.href='/LED=OFF'> APAGAR </button>

");
 
      //Se crean botones con estilos para modificar el estado del LED
  client.println("<button type='button' onClick=location.href='/LED=ON' style='margin:auto; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:200;'><h2> ENCENDER</h2> </button>");
  client.println("<button type='button' onClick=location.href='/LED=OFF' style='margin:auto; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:200;'><h2> APAGAR</h2> </button>

");
 
      //Se crea un único botón para modificar el estado del LED
  if(estado == HIGH) {
    client.print("<button type='button' onClick=location.href='/LED=OFF'> APAGAR </button>

");  
  } else {
    client.print("<button type='button' onClick=location.href='/LED=ON'> ENCENDER </button>

");
  }
  client.println("</html>"); 
  delay(1);
  Serial.println("Petición finalizada");          // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
 
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();
}

He revisado el código y no entiendo por qué uno si que carga y el otro no.

Muchas gracias.

Bueno ya solucioné el problema. El problema era que la contraseña tiene que ser, si tiene, mayor o igual a 8 dígitos.

Ahora me funciona correctamente lo único que he hecho unas pruebas de si se apaga el servidor o el cliente y luego se vuelve a encender a ver si funciona correctamente, y no es así.

Si apago el cliente y lo vuelvo a encender: no vuelve a conectar a la red es necesario desconectar la entrada GPIO2 del pulsador volver a encender y volver a conectar la GPIO2 (ya que el pulsador está conectado con una resistencia a 0V para que si no se pulsara el pulsador leyera 0V).

Si apago el servidor: es necesario reiniciar el cliente (con todo lo anterior descrito).

No se ¿Hay alguna manera de que no sea necesario desconectar nada?

Aquí os dejo el código final del cliente y servidor:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid     = "Server ESP8266"; //La misma que la del servidor
const char* password = "12345678";  // clave
const char* host = "http://192.168.4.1";  //IP del esp8266 servidor AP
int val=0;
const int pulsador = 2; // pin digital de pulsador 
int est_pulsador=0;
int t1=0;
int t2=0;
HTTPClient http;

void setup() 
  {
   pinMode(pulsador,INPUT);
   
  Serial.begin(115200);
  delay(10);
  Serial.print("Conectando a ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
    {
    delay(500);
    Serial.println(".");
  }
 Serial.println("WiFi conectada"); 
 }

void loop()
{  
  if(WiFi.status() != WL_CONNECTED)
    {
    WiFi.begin(ssid, password);
    delay(500);
    t1=millis();
      if((t1-t2)>=1000)
        {
          Serial.println("conectando");
          t2=millis();
          }        
  }
  else
    {      
      t1=millis();
      if((t1-t2)>=2000)
        {
          Serial.println("Dispositivo conectado");
          t2=millis();
          } 
  est_pulsador=digitalRead(pulsador);
  Serial.println(est_pulsador);
  if (est_pulsador== HIGH) // enciende el LED del servidor
    {  
    val=1;
    Serial.println("pulsador ON");
    http.begin("192.168.4.1", 80, "/led/1"); //Se manda petición  /led/1
    int httpCode1 = http.GET();
  }
  else
    {
    val=0;
    Serial.println("pulsador OFF");
    http.begin("192.168.4.1", 80, "/led/0"); //Se manda petición /led/0
  int httpCode1 = http.GET();
  }
  //http.begin("192.168.4.1", 80, "/led/"+val); //Se manda petición /led/0 o /led/1
  //int httpCode1 = http.GET();
  //Serial.println(httpCode1);
  delay(100);  
  }
 }

Servidor:

#include <ESP8266WiFi.h>

const char ssid[] = "Server ESP8266";  
const char password[] = "12345678";
WiFiServer server(80);

int LED_PIN = 2;
int val=0;
int t1=0;
int t2=0;
void setup() {
  Serial.begin(115200);
  
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
   server.begin();
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);  

}

void loop()
{
  
  WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client)
   {  
      t1=millis();
      if((t1-t2)>=2000)
        {
      Serial.println("Esperandoclientes");
       t2=millis();
       }
      return;
     }
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum());
  String req = client.readStringUntil('\r');  // Lee la primera linea de la petición del cliente 
                                              //es como si leyera por serial: Serial.readStringUntil('\n')
  Serial.println(); 
  Serial.print("longitud cadena ");
  Serial.println(req.length());  
  Serial.print("contenido de cadena: ");
  Serial.println(req); 
  if (req.indexOf("/led/0") != -1)
   {
    val=0;
  }
  if (req.indexOf("/led/1") != -1)
    {
  val=1;
  }
  digitalWrite(LED_PIN, val);
  client.flush();
}

Gracias.

Un saludo.