Reiniciar automaticamente el WiFi de un ESP8266

Buenas a todos. Tengo un ESP8266 en casa para controlar una instalación de domotica, pero a veces se le va el wifi porque llega un poco justito. Si voy y le doy a RST vuelve a iniciar el codigo otra vez y se conecta sin problemas hasta que pasa otro par de días y se vuelve a ir a la mierda.

He estado mirando en internet y la gente lo que recomienda es ponerlo en Sleep mientras no lo utilice pero en mi caso esta mandando datos continuamente.

Mi idea es que si falla durante 5-6 min se reinicie automáticamente el wifi, pero solamente el Wifi, no el Sketch entero ya que perdería los datos y tarda en volver a ponerse al día .

  WiFiClient client = server.available();
  if (client) {

    process(client);

    client.flush();   //Limpiar cache cliente
    client.stop();

  }
  else          //Reinicio de Wifi si no hay cliente en 6min (Debug de desconexion)
  {
      if (millis() > (Wificheck + 60000))
      {
        Wificheck = millis();
        DesconexionWifi++;
      }
      if (DesconexionWifi >= 6)
      {
          DesconexionWifi=0;

          //Codigo Reiniciar Wifi.
          
      }
  }

Y no es mas fácil poner un mejorador de señal que levante el nivel WIFI en el entorno que mencionas?

surbyte:
Y no es mas fácil poner un mejorador de señal que levante el nivel WIFI en el entorno que mencionas?

Sí en teoría si, pero si puedo arreglarlo por software tampoco merece la pena que ande comprando repetidores wifi :confused:

Empecé a investigar y la verdad es que ahora me gustaría averiguar como se hace, encontré la función WiFi.mode(WIFI_OFF) pero eso no apaga el wifi, simplemente lo deja en pause. Yo quiero apagarlo por completo y volver a encenderlo. :confused:

Trabajo con un Gateway LoRa basado en ESP8266 que usa este firmware:GitHub-LoRaGoDOCK-Gateway.ino. A partir de la línea 434 tienes la función de conexión wifi, creo que te servirá de buena base. Funciona muy bien, pero tienes que tener en cuenta en ella que, si no consigue conectar, crea un punto de acceso wifi propio para cambiar manualmente el ssid / pass (que presupongo que a ti eso no te vale...)

un saludo

Podrias por ejemplo hacer un ping a un sitio o al mismo router y cuando ese ping supere el timout sabras que no tienes conexión, y entonces indicarle que se reinicie.

Yo tengo en mis nodos un ping que me avisa si estan o no conectados. De ese modo me entero.
Además ellos envían un dato que es justamente millis() desde el momento que se energizaron, ese valor va creciendo, si lo envias a tu server y en algun momento no lo recibes o es igual al anterior también será una indicación de que tu nodo no esta enviando datos.

Buenas, al final lo solucione como lo tenia encaminado. Encontré la funcion WiFi.reconnect(); y listo.

Un saludo, y gracias por la info.

  WiFiClient client = server.available();
  
  if (client) {

    process(client);

    client.flush();   //Limpiar cache cliente
    client.stop();
    
    ReconexionWifi=0;

  }
  else          //Reinicio de Wifi si no hay cliente en 5min (Debug de Reconexion)
  {
      if (millis() > (Wificheck + 60000))
      {
        Wificheck = millis();
        ReconexionWifi++;

      }
      if (ReconexionWifi >= 4)
      {
          ReconexionWifi=0;

          WiFi.reconnect ();
          delay(1000);
          
      }
  }

Bueno te felicito!!