简体   繁体   English

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

[英]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 ).我正在将我的 esp32 设为接入点,一旦客户端与接入点连接,它就会共享它的家庭 wifi 凭据( ssid密码)。 Then I use this ssid and password to connect the esp32 with Home wifi.然后我使用这个 ssid 和密码将 esp32 与家庭 wifi 连接。 But It is not connecting with Home wifi.但它没有与家庭 wifi 连接。 I try to disconnect/stop access point but got no luck.我尝试断开/停止接入点,但没有运气。

Arduino Code: 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);
  }
}

What am I doing wrong in disconnecting SoftAp or connecting with home wifi?断开 SoftAp 或连接家庭 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.无需断开接入点,更改模式,然后使用 WiFi.begin。 By using only WiFi.begin, we can connect to any WiFi.通过只使用 WiFi.begin,我们可以连接到任何 WiFi。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法使用 esp32 从 Arduino 中的 ReactJS 网页读取数据 - Unable to read data from ReactJS Webpage in Arduino using esp32 在具有 32 个字符文件名限制的 esp32 上部署反应 - Deploy react on an esp32 with 32 character file name limit 我无法从黑暗模式切换回正常模式 - I am not able to switch from dark mode back to normal mode 在开发模式和生产模式之间切换 - switch between dev and production mode 如果模式为暗,则将引导程序开关组件设置为“选中” - Set bootstrap switch component to 'checked' if mode is Dark React不会切换到生产模式 - React doesn't switch to production mode 当我在 React 中从深色模式切换到浅色模式时如何更改表单颜色 - How can I Change Form Colour When I switch from Dark to Light mode in React 无法使用 Express + Reactjs 在生产模式(在开发模式下工作)从 API 检索数据 - Cannot retrieve data from API in production mode (Works in dev mode) using Express + Reactjs 在 API 模式下使用 Rails Devise - Using Rails Devise in API mode 如何在使用 header 作为开关位置的同时将我的亮/暗模式主题包裹在 index.js 周围? - How can I wrap my light/dark mode theme around index.js while using my header as the switch location?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM