简体   繁体   中英

Switch from Wifi Access Point mode to station mode using esp32

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM