Voeg WPS toe aan je project
Leestijd: 2 MinutenOp het moment dat je jouw Wifi netwerk kom je er achter hoeveel apparaten je op wifi hebt aangesloten. Voor de meeste apparaten is het geen probleem om dit opnieuw in te stellen. Voor al die DIY projecten ligt het iets anders. Je kan kiezen voor hetzelfde SSID en wachtwoord, maar je kan ook WPS toevoegen aan je wireless projecten.
Door middel van WPS kan je makkelijker jouw projecten opnieuw verbinden met een wifi netwerk. Voor mijn DIY projecten gebruik ik vaak een NodeMCU. Het voordeel van dit bordje is dat deze gebruik maakt van een ESP8266, maar dan met iets meer output pins.
Bij een succesvolle connectie worden de juiste gegevens opgeslagen in memory. In je setup kan je dus het volgende gebruiken.
1 |
WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str()); |
Heb je geen verbinding dan roep begin je met het configureren via WPS. Heel simpel gezegd stuurt de router de SSID en de PSK op naar de client, welke deze gegevens dan kan gebruiken om verbinding te maken. De valkuil van dit was dat je de Wifi module station mode moet zetten, anders werkt het WPS niet.
1 2 3 4 5 6 |
// WPS works only in STA (Station mode) WiFi.mode(WIFI_STA); delay(1000); WiFi.beginWPSConfig(); // Another long delay required. delay(3000); |
Je kan dit in je setup plaatsen of bijvoorbeeld achter een knop.
1 2 3 4 5 6 7 8 |
void setup() { //Code attachInterrupt(digitalPinToInterrupt(D2), callback, RISING); } void callback(){ connectWifi(); } |
De volledige code vind je hier of hieronder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #ifdef __AVR__ #include <avr/power.h> #endif void setup() { Serial.begin(115200); Serial.println("Starting up."); attachInterrupt(digitalPinToInterrupt(D2), callback, RISING); //Nodemcu saves the last succesfull connection in memory //To delete the saved connection use //WiFi.disconnect(); WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str()); // Long delay required especially soon after power on. delay(4000); if (WiFi.status() != WL_CONNECTED) { connectWifi(); } if (WiFi.status() == WL_CONNECTED) { Serial.printf("Use this URL to connect: http://%s/", WiFi.localIP().toString().c_str()); } } void loop() { // put your main code here, to run repeatedly: } void connectWifi() { Serial.println("WPS config start"); // WPS works only in STA (Station mode) WiFi.mode(WIFI_STA); delay(1000); WiFi.beginWPSConfig(); // Another long delay required. delay(3000); if (WiFi.status() == WL_CONNECTED) { // WPSConfig connected succesfull Serial.printf("WPS finished. Connected successfull to SSID '%s'", WiFi.SSID().c_str()); Serial.println(""); Serial.printf("Use this URL to connect: http://%s/", WiFi.localIP().toString().c_str()); }else{ Serial.println("WPS failed."); } } void callback(){ connectWifi(); } |