使用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。
我正在让我的 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。