La configuration WPS ou WiFi-Protected est une méthode pour connecter un appareil sur le réseau Wi-Fi sans avoir à entrer SSID et mot de passe. Pour de nombreux projets WLAN, SSID et mot de passe sont définis dans le code du programme. Cela signifie que le programme doit être recompilé pour chaque Wlan. Avec WPS ce n’est pas nécessaire et vous pouvez vous connecter à un contrôleur avec un programme une fois compilé sur différents WLAN.
L’ESP8266 peut le faire facilement. Nous avons seulement besoin d’un bouton à partir d’une broche GPIO contre le sol avec lequel nous pouvons commencer le processus.
Code:
#include <ESP8266WiFi.H (en)> #define Wps D4 D4 Épingle pour le bouton WPS Démarre la configuration WPS Bool startWPS() { Série.println("WPS Configuration Started"); Bool wpsSuccess = Wifi.beginWPSConfig(); Si(wpsSuccess) { Il n’est pas toujours dû réussir! Après un délai d’attente, le SSID est vide String nouveauSSID = Wifi.Ssid(); Si(nouveauSSID.Longueur() > 0) { Ce n’est que lorsqu’un SSID a été trouvé que nous avons réussi Série.Printf("WPS fait. Enregistré avec succès dans SSID '%s', nouveauSSID.c_str()); } Autre { wpsSuccess = Faux; } } Retour wpsSuccess; } Fonction d’installation Vide Configuration() { Série.Commencer(74880); avec 74880, les messages sont également visibles au démarrage Série.setDebugOutput(Vrai); Si c’est vrai, des informations supplémentaires sur les débogés sont Retard(1000); Série.Printf("Connexion Atry à stockéS SSID '%s’n", Wifi.Ssid().c_str()); pinMode(Wps, INPUT_PULLUP); Activer l’entrée du bouton Wifi.Mode(WIFI_STA); Wifi.Commencer(Wifi.Ssid().c_str(),Wifi.Psk().c_str()); dernières données d’accès stockées Int Cnt = 0; Nous essayons de nous inscrire Tandis que ((Wifi.Statut() == WL_DISCONNECTED) && (Cnt < 10)){ Retard(500); Série.Imprimer("."); Cnt++; } wl_status_t Statut = Wifi.Statut(); Si(Statut == WL_CONNECTED) { Série.Printf("AnSuccessfully connecté à SSID '%'s-n", Wifi.Ssid().c_str()); } Autre { Nous n’avons pas réussi à démarrer donc WPS Série.Printf("NCan’t connect to WiFi. Statut '%d’n", Statut); Série.println("Appuyez sur le bouton WPS sur le routeur. Appuyez sur le bouton WPS sur l’ESP!"); Tandis que (digitalRead (en)(Wps)!=0) {Rendement();} Si(!startWPS()) { Série.println("Aucune connexion ne peut être faite via WPS"); } } } Vide Boucle() { Code pour le programme }
Un projet existant peut être facilement élargi avec la fonction WPS.
Au lieu du SSID défini et mot de passe, nous utilisons les valeurs dont l’ESP8266 s’est souvenu dans la mémoire flash.
Wifi.Commencer(Wifi.Ssid().c_str(),Wifi.Psk().c_str());
Si aucune connexion n’est possible, un texte correspondant est la sortie que WPS doit être commencé d’abord sur le routeur, puis en appuyant sur notre bouton. Au lieu de la sortie de texte, vous pouvez, par exemple, allumer une LED. Après avoir détecté que le bouton a été pressé, nous appelons la fonction startWPS, qui fait le reste.
Dans l’IDE Arduino, vous devez définir le panneau "Erase-Flash:" pour esquisser les paramètres WiFi dans le menu de l’outil afin qu’un WPS puisse reprendre au prochain départ. Dans le cas contraire, après un WPS réussi, les données d’accès stockées seront utilisées.
Note importante: Assurez-vous que le logiciel ESP8266 est installé. Pour ce faire, vous ouvrez le directeur du conseil et faites défiler vers le bas jusqu’à ce que vous trouviez l’esp8266. La version 2.5 ou plus tard devrait être installée ici. Dans la version 2.4.2, la fonction WPS a été désactivée. Il a également travaillé avec des versions plus anciennes.
8 commentaires
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
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
Und wer
#define WPS D3
nimmt, braucht nicht mal einen zusätzlichen Button sondern kann den Flash-Button des NodeMCU benutzen.
Ulrich Engel
Hallo,
ich warte immer noch auf Unterstützung bei meinem Problem (s.o.)
MFG
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
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
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
Einfach genial!!!