ESP32 verbinden met WiFi (met failover)

In dit voorbeeld laat ik zien hoe je een ESP32 verbindt met een WiFi-netwerk, inclusief een eenvoudige failover-logica waarmee het apparaat automatisch opnieuw verbinding probeert te maken bij netwerkproblemen.

Wat doet dit?

Bij het opstarten probeert de ESP32 verbinding te maken met het opgegeven WiFi-netwerk. Daarna controleert het programma periodiek of de verbinding nog actief is. Als de verbinding is weggevallen, wordt automatisch een nieuwe poging gedaan. Mocht de verbinding niet hersteld kunnen worden, dan kan aan het einde van de loop een herstart gegeven worden aan de ESP32. Dit is niet altijd wenselijk.

Tip

Gebruik deze WiFi-basiscode als fundament voor je Home Assistant-integratie via MQTT, Voeg eventueel LED-feedback toe voor het visueel weergeven van de status.

WiFi

Benodigdheden

  • ESP32-board
  • Arduino IDE (of PlatformIO)
  • SSID en wachtwoord van je WiFi-netwerk

Arduino-code

    
    
    
       

        /*
         *     Maker      :Matteman-Automation                
         *     Project    : Connect to WiFi 
         *     Version    : 1.0
         *     Date       : 08-2024
         *     Programmer : Ap Matteman
         */    

        #include <WiFi.h>
        

        int iWiFiTry = 0;          
        
        String sClient_id;
        const char* ssid = YourSSID;
        const char* password = YourWiFiPassWord;
        const char* HostName = "WiFi_DEMO";

        

        

        void setup()   {   
          Serial.begin(115200);
          while (!Serial) {
            ; // wait for serial port to connect. Needed for native USB port only
          }             
          Connect2WiFi();
         
          iCount = 0;
        }

        void Connect2WiFi() { 
          //Connect to WiFi
          iWiFiTry = 0;
          WiFi.begin(ssid, password);
          WiFi.setHostname(HostName);
          Serial.print("Connecting to WiFi ");
          while (WiFi.status() != WL_CONNECTED && iWiFiTry < 11) { //Try to connect to WiFi for 11 times
            ++iWiFiTry;
            Serial.print(".");
            delay(500);
          }
          Serial.println("");
          Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

          //Unique MQTT Device name
          sClient_id = "esp-client-" + String(WiFi.macAddress());
          Serial.print("ESP Client name: "); Serial.println(sClient_id);
        }
        void loop() {

          if (WiFi.status() != WL_CONNECTED) { 
              Connect2WiFi; 
          }
          Serial.println(iCount);
          ++iCount;

          if(iCount>99) {
            iCount = 0;
          }


          delay(1000);


          // If you want to reboot your device when WiFi is not working
          if (iWiFiTry > 10){
            Serial.println("REBOOTING");
            Serial.println(" Reboot in 2 seconds");
            Serial.println(""); 
            delay(2000);
            ESP.restart(); 
          }

 
        }


}