【问题标题】:Switch from Wifi Access Point mode to station mode using esp32使用 esp32 从 Wifi 接入点模式切换到站模式
【发布时间】:2020-01-05 08:04:55
【问题描述】:

我正在使我的 esp32 成为 接入点,一旦客户端与接入点连接,它就会共享它的家庭 wifi 凭据(ssid密码 >)。然后我使用这个 ssid 和密码将 esp32 与 Home wifi 连接起来。 但它没有与家庭 wifi 连接。我尝试断开/停止接入点,但没有成功。

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 时我做错了什么?

谢谢!

【问题讨论】:

  • 你需要使用WiFi.mode(WIFI_AP_STA),并用WiFi.softAP(assid, apassword)设置AP,然后用WiFi.begin(ssid, password)建立STA连接
  • 试过了。不工作!
  • @KainatAltaf 你解决了吗?如果是的话,你能用答案更新这篇文章吗?因为我有同样的问题?

标签: reactjs arduino wifi esp32


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2013-02-20
    • 2015-08-03
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多