WPS met de ESP8266

WPS of WiFi Protected Setup is een methode om een ​​apparaat op het WiFi-netwerk te registreren zonder de SSID en het wachtwoord in te voeren. Voor veel WLAN-projecten worden de SSID en het wachtwoord gedefinieerd in de programmacode. Dit betekent dat het programma voor elk WLAN opnieuw moet worden gecompileerd. Met WPS is dit niet nodig en kunt u een controller met een eenmaal gecompileerd programma op verschillende WLAN's registreren.

De ESP8266 kan dat heel gemakkelijk. We hebben slechts een knop nodig van elke GPIO-pin naar aarde om het proces te starten.

Code:

 

# opnemen <ESP8266WiFi.h>
#define WPS D4 // Pin voor de WPS-knop


// Start de WPS-configuratie
dwaas startWPS() {   Serie.println("WPS-configuratie gestart");   dwaas wpsSucces = WiFi.beginWPSConfig();   als(wpsSucces) {       // Hoeft niet altijd succesvol te betekenen! Na een time-out is de SSID leeg       String newSSID = WiFi.SSID();       als(newSSID.lengte() > 0) {         // We waren alleen succesvol als een SSID werd gevonden          Serie.printf("WPS klaar. Succesvol ingelogd op SSID '% s' \ n", newSSID.c_str());       } anders {         wpsSucces = fout;       }   }   terug wpsSucces; 
}

// setup-functie
nietig instellen() {   Serie.beginnen(74880); // met 74880 zijn de berichten ook zichtbaar bij het opstarten   Serie.setDebugOutput(waar); // Indien waar, wordt extra foutopsporingsinformatie uitgevoerd   vertraging(1000);   Serie.printf("\ nProbeer verbinding te maken met opgeslagen SSID '% s' \ n", WiFi.SSID().c_str());   pinMode(WPS, INPUT_PULLUP); // Activeer de invoerknop   WiFi.mode(WIFI_STA);   WiFi.beginnen(WiFi.SSID().c_str(),WiFi.psk().c_str()); // laatst opgeslagen inloggegevens   int cnt = 0;   // We proberen te registreren   terwijl ((WiFi.status() == WL_DISCONNECTED) && (cnt < 10)){     vertraging(500);     Serie.afdrukken(".");     cnt++;   }   wl_status_t status = WiFi.status();   als(status == WL_CONNECTED) {     Serie.printf("\ nSuccesvol ingelogd bij SSID '% s' \ n", WiFi.SSID().c_str());   } anders {     // We zijn er niet in geslaagd WPS te lanceren     Serie.printf("\ nKan geen wifi-verbinding tot stand brengen. Status = '% d' \ n", status);      Serie.println("Druk op de WPS-knop op de router. \ N Druk op de WPS-knop op de ESP!");     terwijl (digitaal lezen(WPS)!=0) {opbrengst();}        als(!startWPS()) {        Serie.println("Er kan geen verbinding tot stand worden gebracht via WPS");       }   } 
}


nietig lus() {   // code voor het programma

}

 

Een bestaand project kan heel eenvoudig worden uitgebreid met de WPS-functie.

In plaats van de vaste SSID en het wachtwoord gebruiken we de waarden die de ESP8266 in het flashgeheugen heeft opgeslagen.

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

Als hiermee geen verbinding mogelijk is, wordt een overeenkomstige tekst weergegeven dat WPS eerst op de router moet worden gestart en vervolgens door op onze knop te drukken. In plaats van de tekstuitvoer kan men b.v. laat een LED oplichten. Nadat is herkend dat de knop is ingedrukt, roepen we de startWPS-functie aan, die de rest doet.

In de Arduino IDE moet u "Erase-Flash:" instellen op Sketch + WiFi-instellingen in het toolmenu op het bord, zodat een WPS kan plaatsvinden de volgende keer dat u start. Anders worden de opgeslagen toegangsgegevens gebruikt na een succesvolle WPS.

Wis Flash

Belangrijke opmerking: Zorg ervoor dat de juiste ESP8266-software is geïnstalleerd. Open hiervoor de boardmanager en scrol naar beneden totdat je de esp8266 vindt. Versie 2.5 of hoger moet hier worden geïnstalleerd. In versie 2.4.2 was de WPS-functie uitgeschakeld. Het werkte ook met oudere versies.

 

 

Esp-8266Projekte für anfänger

6 Kommentare

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!!!

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert