I am making my esp32 an access point and once the client connects with access point, it shares it's Home wifi credentials (ssid and password). Then I use this ssid and password to connect the esp32 with Home wifi. But It is not connecting with Home wifi. I try to disconnect/stop access point but got no luck.
Arduino Code:
#include <WiFi.h>
#include "aWOT.h"
#include "StaticFiles.h"
#define LED_BUILTIN 2
const char* ssid = "SSID";
const char* password = "Password";
WiFiServer server(80);
Application app;
String CompleteSSID="";
String CompletePassword="";
//Read SSID from web
void readSSID(Request &req, Response &res) {
res.print(CompleteSSID);
}
void updateSSID(Request &req, Response &res) {
while(req.available())
{
char currentword=req.read();
CompleteSSID+=currentword;
}
Serial.println(CompleteSSID);
//digitalWrite(LED_BUILTIN, '1');
return readSSID(req, res);
}
void readPassword(Request &req, Response &res) {
res.print(CompletePassword);
}
void updatePassword(Request &req, Response &res) {
while(req.available())
{
char currentword=req.read();
CompletePassword+=currentword;
}
Serial.println(CompletePassword);
//digitalWrite(LED_BUILTIN, '1');
ConnectToHomeWiFi();
return readPassword(req, res);
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.println(IP);
app.get("/ssid", &readSSID);
app.put("/ssid", &updateSSID);
app.get("/password", &readPassword);
app.put("/password", &updatePassword);
app.route(staticFiles());
server.begin();
}
void ConnectToHomeWiFi()
{
char* ssid_n;
char* pass_n;
CompleteSSID.toCharArray(ssid_n, CompleteSSID.length());
CompletePassword.toCharArray(pass_n, CompletePassword.length());
//WiFi.softAPdisconnect();
WiFi.disconnect(true);
WiFi.persistent(false);
//WiFi.setAutoConnect(false);
//WiFi.mode(WIFI_OFF);
//WiFi.setOutputPower(0);
//WiFi.reconnect();
WiFi.mode(WIFI_STA);
delay(100);
WiFi.begin(ssid_n, pass_n);
Serial.print("Connecting to ");
Serial.println(CompleteSSID);
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED)
{
Serial.print('.');
delay(500);
if ((++i % 16) == 0)
{
Serial.println(F(" still trying to connect"));
}
}
Serial.print(F("Connected. My IP address is: "));
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient client = server.available();
if (client.connected()) {
app.process(&client);
}
}
What am I doing wrong in disconnecting SoftAp or connecting with home wifi?
Thanks!
Here is the solution of this issue:
void setup(){
.....
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.println(IP);
....
server.begin();
}
void ConnectToHomeWiFi()
{
....
WiFi.begin(ssid_n,pass_n);
....
}
There is no need of disconnecting Access point, changing the mode and then using WiFi.begin. By using only WiFi.begin, we can connect to any WiFi.