WPS mit dem ESP8266 - AZ-Delivery

WPS o WiFi protected - Setup è un metodo per accedere ad un dispositivo sulla rete WLAN senza immettere un nome SSID e una password. Molti progetti WLAN definiscono l'SSID e la password nel codice del programma. Ciò significa che il programma deve essere ricompilato per ogni WLAN. Con WPS non è necessario e si può accedere ad un programma di controllo utilizzando un programma compilato una volta alle diverse wats.

L'ESP8266 può essere semplice. Abbiamo solo bisogno di un tasto di un Pin Pin contro la massa che ci permette di avviare il processo.

Codice:

 

" #include " <ESP8266WiFi.h>
" #define " WPS D4 // Pin per il tastiere WPS


// Avvia la configurazione di WPS
booli startWPS() {   Seriale.println("Configurazione WPS avviata");   booli wpsSuccess = WiFi.beginWPSConfig();   if(wpsSuccess) {       // Deve non avere sempre avuto esito positivo! L'SSID è vuoto dopo un timeout       String newSSID = WiFi.SSID();       if(newSSID.lunghezza() > 0) {         // Solo se è stato trovato un SSID, abbiamo avuto esito positivo          Seriale.printf(" WPS terminato. Login collegato correttamente a SSID '%s' \n ", newSSID.c_str());       } else {         wpsSuccess = false;       }   }   return wpsSuccess; 
}

// funzione di configurazione
void Impostazione() {   Seriale.begin(74880); // con 74880, inoltre, i messaggi sono visibili all'avvio   Seriale.setDebugOutput(true); // Se true, vengono emesse ulteriori informazioni di debug   delay(1000);   Seriale.printf("\nTentativi di connessione con SSID memorizzato '%s' \n", WiFi.SSID().c_str());   pinMode(WPS, INPUT_PULLUP); // Abilitare il tasto di accesso   WiFi.mode(WIFI_STA);   WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str()); // ultimi dati di accesso salvati   int cnt = 0;   // Si sta tentando di accedere   while ((WiFi.stato() == WL_DISCONNECTED) && (cnt < 10)){     delay(500);     Seriale.print(".");     cnt++;   }   wl_status_t stato = WiFi.stato();   if(stato == WL_CONNECTED) {     Seriale.printf("\nriuscito login a SSID '%s' \n", WiFi.SSID().c_str());   } else {     // Non è stato possibile avviare correttamente WPS     Seriale.printf(" \nImpossibile connettersi al WiFi. stato = '%d' \n ", stato);      Seriale.println("Utilizzare il tasto WPS sul router. \n tasto WPS premuto sul PSEP!");     while (diga digitale(WPS)!=0) {yield();}        if(!startWPS()) {        Seriale.println("Nessuna connessione da WPS producibile");       }   } 
}


void loop() {   // codice per il programma

}

 

 Un progetto esistente può essere facilmente ampliato con la funzione WPS.

Invece di SSID e password definite, utilizziamo i valori che l'ESP8266 ha rilevato nell'archivio Flash.

WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str());

Se non è possibile alcuna connessione, viene visualizzato un testo corrispondente che WPS deve essere avviato prima sul router e quindi premendo il pulsante di scelta. Ad esempio, si potrebbe accendere un LED anziché l'output del testo. Una volta rilevato che il tatto è stato premuto, chiamiamo la funzione startWPS, che esegue il resto.

Nell'IDE di Arduino, il menu Strumenti di Erase-Flash deve puntare su Sketch + WiFi Settings per consentire al prossimo riavvio di tornare ad un WPS. In caso contrario, i dati di accesso memorizzati vengono utilizzati dopo un WPS riuscito.

Erase Flash

Nota importante: Si è rilevato che il software ESP8266 corretto è installato. A tal fine, aprirà il custoio e scrollà verso il basso finche ' non avevate la colonna esp8266. Si consiglia di installare la versione 2.5 o successiva. Con la versione 2.4.2, la funzione WPS è stata disabilitata. Con le versioni precedenti, ha funzionato.

 

 

Esp-8266Projekte für anfänger

10 commenti

Gerald Lechner

Gerald Lechner

@Tim: Der ESP8266 sollte sich die Zugangsdaten merken, wenn eine Verbindung erfolgreich hergestellt wurde. Wenn das nicht funktioniert, könnten Sie die Zugangsdaten nach erfolgreicher Anmeldung im EEPROM Speicher des ESP8266 speichern. Eine Beschreibung dazu finden Sie unter dieser URL:
https://dillinger-engineering.de/esp8266-eeprom-richtig-verwenden/2020/10/?cn-reloaded=1

Tim

Tim

Moin zusammen,
das einloggen über WPS klappt bei mir. Allerdings werden die Zugangsdaten “WiFi.SSID,WiFi.psk().c_str())” nicht gespeichert und sind beim nächsten Start leer (“Erase-Flash:” beim 2. mal natürlich nur auf “only Sketch). D. h. die Werte sind leer (”") und er loggt sich dadurch wieder per WPS ein.
Ich frage im Code an anderer Stelle WiFi.localIP().toString().c_str() und ESP.getChipId() ab. Hier sind auch beide leer. In einem anderen Modul mit “manueller” Einwahl mit SSID und Passwort bekomme ich were zurück.
Ich habe es mit verschiedenen Baudraten versucht. Immer gleiches Ergebnis. Was mache ich falsch?

Gerald Lechner

Gerald Lechner

Das sollte kein Problem sein. Ich würde RXD benutzen, dann funktioniert die Ausgabe von Meldungen über die Serielle Schnittstelle weiterhin.

Jürgen Barnert

Jürgen Barnert

Vielen Dank für diesen schönen Artikel. Sehr clever. Ich habe aber ein Problem: D0 -D8 (GPIO 0,2,4,5,12,13,14,15,16) sind auf dem esp8266 belegt. Kann man für diesen Zweck (WPS) auch die GPIO 1 und 3 (RXD0 und TXDO) verwenden?

Juergen

Juergen

Und wer
#define WPS D3
nimmt, braucht nicht mal einen zusätzlichen Button sondern kann den Flash-Button des NodeMCU benutzen.

Ulrich Engel

Ulrich Engel

Hallo,
ich warte immer noch auf Unterstützung bei meinem Problem (s.o.)
MFG

4711engel

4711engel

Hi,
ich habe nun den Fehler gefunden und den Sketch hochgeladen.

Im Serial Monitor erhalte ich aber folgende Meldungen:
“WPS Konfiguration gestartet
wifi_wps_enable
wps scan
build public key start
build public key finish
scandone
scandone
scandone
scandone
scandone
wifi_wps_disable
Keine Verbindung über WPS herstellbar
"
Was mache ich falsch?

Gruß aus Berlin

4711engel

4711engel

Hi, interessantes Projekt. Dieses Neukompilieren in einem fremden Netz war immer lästig.

Ich habe Boards-Version 2.5.0 installiert und im Werkzeug-Menü beim Board “Erase-Flash:” auf Sketch + WiFi Settings gesetzt. Kompilieren läuft fehlerfrei durch. Nur beim Hochladen gibt eine Fehlermeldung.

“Arduino: 1.8.7 (Windows 7), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, 4M (3M SPIFFS), v2 Lower Memory, Disabled, None, Sketch + WiFi Settings, 115200”

Build-Optionen wurden verändert, alles wird neu kompiliert
Der Sketch verwendet 299420 Bytes (28%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
Globale Variablen verwenden 32428 Bytes (39%) des dynamischen Speichers, 49492 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
error: failed sending 0xC0
error: failed sending 8 bytes
error: failed sending 36 bytes
error: failed sending 0xC0
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_open failed
"

Habt Ihr einen Tip für mich
Vielen Dank und Gruß aus Berlin

Alex

Alex

Hallo,
geht das auch mit dem ESP8266-01 Modul, das Sie verkaufen?
Am besten nur mit den AT-Befehlen, ohne dass ich die Firmware des Moduls verändern muss?

DaMich

DaMich

Einfach genial!!!

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione