使用esp32从Wifi接入点模式切换到站模式

Switch from Wifi Access Point mode to station mode using esp32

我正在让我的 esp32 成为一个 接入点 ,一旦客户端连接到接入点,它就会共享它的家庭 wifi 凭据(ssid密码)。然后我使用这个 ssid 和密码将 esp32 连接到家庭 wifi。 但它没有连接家庭 wifi。我尝试 disconnect/stop 访问点但没有成功。

Arduino 代码:

#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);
  }
}

我在断开 SoftAp 或连接家庭 wifi 时做错了什么?

谢谢!

这里是这个问题的解决方案:

void setup(){
  .....
  WiFi.softAP(ssid, password);
  IPAddress IP = WiFi.softAPIP();
  Serial.println(IP);
  ....
  server.begin();
}

void ConnectToHomeWiFi()
{
  ....
  WiFi.begin(ssid_n,pass_n);
  ....
}

不需要断开接入点,改变模式,然后使用WiFi.begin。通过仅使用 WiFi.begin,我们可以连接到任何 WiFi。