WPS mit dem ESP8266 - AZ-Delivery

La configuración protegida WPS o WiFi es un método para registrar un dispositivo en la red WiFi sin tener que ingresar el SSID y la contraseña. Para muchos proyectos de WLAN, el SSID y la contraseña se definen en el código del programa. Esto significa que el programa debe ser recompilado para cada WLAN. Con WPS esto no es necesario y puede registrar un controlador con un programa compilado una vez en diferentes WLAN.

El ESP8266 puede hacer eso muy fácilmente. Solo necesitamos un botón de cualquier pin GPIO a tierra para comenzar el proceso.

Código:

 

#include <ESP8266WiFi.h>
#definir WPS D4 // Pin para el botón WPS


// Inicia la configuración de WPS
bool startWPS() {   De serie.println("Configuración WPS iniciada");   bool wpsSuccess = WiFi.beginWPSConfig();   si(wpsSuccess) {       // ¡No siempre tiene que significar exitoso! Después de un tiempo de espera, el SSID está vacío       Cadena nuevoSSID = WiFi.SSID();       si(nuevoSSID.longitud() > 0) {         // Tuvimos éxito solo cuando se encontró un SSID          De serie.printf("WPS listo. Se inició sesión correctamente en SSID '% s' \ n", nuevoSSID.c_str());       } otra cosa {         wpsSuccess = falso;       }   }   volver wpsSuccess; 
}

// función de configuración
nulo configuración() {   De serie.comenzar(74880); // con 74880, los mensajes también son visibles al inicio   De serie.setDebugOutput(cierto); // Si es verdadero, se genera información de depuración adicional   retrasar(1000);   De serie.printf("\ n Intenta conectarte al SSID guardado '% s' \ n", WiFi.SSID().c_str());   pinMode(WPS, INPUT_PULLUP); // Activa el botón de entrada   WiFi.la moda(WIFI_STA);   WiFi.comenzar(WiFi.SSID().c_str(),WiFi.psk().c_str()); // últimos datos de inicio de sesión guardados   int cnt = 0;   // Estamos intentando registrarnos   mientras que ((WiFi.estado() == WL_DISCONNECTED) && (cnt < 10)){     retrasar(500);     De serie.imprimir(".");     cnt++;   }   wl_status_t estado = WiFi.estado();   si(estado == WL_CONECTADO) {     De serie.printf("\ nInició sesión correctamente en SSID '% s' \ n", WiFi.SSID().c_str());   } otra cosa {     // No tuvimos éxito en el lanzamiento de WPS     De serie.printf("\ nNo se puede establecer una conexión WiFi. Estado = '% d' \ n", estado);      De serie.println("Presione el botón WPS en el enrutador. \ N ¡Presione el botón WPS en el ESP!");     mientras que (digitalRead(WPS)!=0) {ceder();}        si(!startWPS()) {        De serie.println("No se puede establecer una conexión a través de WPS");       }   } 
}


nulo bucle() {   // código para el programa

}

 

Un proyecto existente se puede ampliar muy fácilmente con la función WPS.

En lugar del SSID y la contraseña fijos, utilizamos los valores que el ESP8266 ha memorizado en la memoria flash.

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

Si no es posible una conexión con esto, se genera el texto correspondiente que WPS debe iniciarse primero en el enrutador y luego presionando nuestro botón. En lugar de la salida de texto, uno podría, p. deje que se encienda un LED. Después de reconocer que se ha presionado el botón, llamamos a la función startWPS, que hace el resto.

En el IDE de Arduino, debe establecer la configuración de Sketch + WiFi en el menú de herramientas en el tablero "Erase-Flash:" para que un WPS pueda tener lugar la próxima vez que comience. De lo contrario, los datos de acceso guardados se usarán después de un WPS exitoso.

Erase Flash

Nota importante: Asegúrese de que esté instalado el software ESP8266 correcto. Para hacer esto, abra el administrador de la junta y desplácese hacia abajo hasta encontrar el esp8266. La versión 2.5 o superior debe instalarse aquí. En la versión 2.4.2, la función WPS estaba deshabilitada. Funcionó con versiones anteriores también.

 

 

Esp-8266Projekte für anfänger

10 comentarios

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

Deja un comentario

Todos los comentarios son moderados antes de ser publicados