Aquest exemple detecta connexió WiFi, errors típics i si hi ha portal captatiu o internet real.
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "NomXarxa";
const char* password = "ContrasenyaGeneral";
unsigned long timeout = 15000;
// Internet real
bool hasInternet() {
HTTPClient http;
http.begin("http://clients3.google.com/generate_204");
int code = http.GET();
http.end();
return (code == 204);
}
// Portal captatiu
bool checkCaptivePortal() {
HTTPClient http;
http.begin("http://example.com");
int code = http.GET();
http.end();
return (code != 200 && code != 204);
}
// Connexió WiFi
bool connectWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connectant");
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() - start > timeout) {
Serial.println("\n❌ Timeout WiFi");
Serial.println("- Contrasenya incorrecta");
Serial.println("- Filtrat MAC (instituts)");
Serial.println("- Portal captatiu");
Serial.println("- Senyal dèbil");
return false;
}
}
Serial.println("\n✔ Connectat!");
Serial.println(WiFi.localIP());
return true;
}
// Diagnòstic
void diagnoseNetwork() {
Serial.println("\n--- DIAGNOSI ---");
if (WiFi.status() != WL_CONNECTED) {
Serial.println("❌ No connectat");
return;
}
if (hasInternet()) {
Serial.println("✔ Internet OK");
} else {
Serial.println("⚠ Sense internet real");
if (checkCaptivePortal()) {
Serial.println("🔐 Portal captatiu detectat");
} else {
Serial.println("📛 Bloqueig de xarxa");
}
}
}
void setup() {
Serial.begin(115200);
if (connectWiFi()) {
diagnoseNetwork();
}
}
void loop() {}
Aquest codi detecta automàticament si el problema és WiFi, internet o portal captatiu.