Auto connect to wifi with ESP8266

Kita mungkin menginginkan perangkat nodeMCU kita dapat mendeteksi wifi dengan otomatis, kemudian setelah wifi ditemukan NodeMcu akan otomatis terhubung, sehingga dengan cara kerja yang seperti ini, sistem yang kita buat terlihat lebih dinamis.

ada beberapa cara yang dapat kita gunakan, misalnya dengan menggunakan library Wifi Multi, dengan library ini terlebih dahulu kita harus menginputkan nama_nama SSid dan password nya pada bagian void setup, seperti kutipan program berikut


wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

cara seperti ini akan berguna pada lingkungan tertentu, jika kita tahu SSID-SSID dan password yang tersedia dilingkungan perangkat kita. dan cara ini saya rasa kurang dinamis juga, tetap saja kita harus menginput manual SSID dan passwordnya.

cara lain yang dapat digunakan adalah dengan menggunakan library wifi scan, dengan library ini perangkat kita (NodeMcu) akan otomatis mendeteksi wifi yang tersedia dilingkungannya, kemudian apabila wifi sudah terdeteksi, maka perangkat kita akan otomatis mengkoneksikan nya. dengan cara yang seperti ini, maka kita tidak perlu repot-repot memasukkan SSID dan Password, karena perangkat yang akan menentukannnya

Berikut adalah program yang saya buat
/*
* This sketch demonstrates how to scan WiFi networks.
* The API is almost the same as with the WiFi Shield library,
* the most obvious difference being the different file you need to include:
*
* Modified by :papermindvention 11 july 2019
*/
#include <ESP8266WiFi.h>
char ValStr[75];
char* ssid;
String ins;
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
scan();
}
void loop() {
if (WiFi.status() != WL_CONNECTED){
Serial.println("Disconnect, You are now Offline");
delay(1000);
Serial.println("try to connecting......");
scan();
}
}
void scan(){
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
Serial.println("no networks found");
else
{
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
if (WiFi.encryptionType(i) == ENC_TYPE_NONE){
ins += WiFi.SSID(i);
for (int i=0; i< ins.length(); i++){ ValStr[i] = ins.charAt(i); }
ssid = strtok(ValStr,".");
WiFi.begin(ssid);
Serial.print("Connecting To : ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
ins = "";
break;
}
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}


Comments