NodeMCU(Lolin v3)ボードを、ハードウェアコードを使用せずにWiFi設定を構成できるようにプログラミングしようとしています。私はWiFiManagerライブラリがあることを知っていますが、自分の実装を行う必要があるので、ライブラリを提供するUIを使用する必要はありません。ユーザーが提供する認証情報は、SPIFFSを使用してファイルに保存され、AP_STAモードまたはSTAモードでのみボードを起動するかどうかを確認するために使用されます。以下はWEFI_AP_STAモードのWiFiをESP8266で設定する
は、私が使用するロジックです:私は新鮮なブートを行うとき
void connectWiFi(String ssid, String password, boolean staOnly = false) {
boolean state = true;
int i = 0;
if(staOnly)
WiFi.mode(WIFI_STA);
WiFi.begin(ssid.c_str(), password.c_str());
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if (i > 10) {
state = false;
break;
}
i++;
}
return state;
}
void join() {
String ssid = setupServer.arg("ssid");
String password = setupServer.arg("password");
result = connectWifi(ssid, password);
if(result) {
Serial.println("Connected");
// **THIS IS THE PROBLEMATIC PART**
setupServer.send(200, "text/plain", WiFi.localIP().toString());
// save credentials to a file
Serial.println("Conf saved");
delay(2000);
ESP.restart();
} else
setupServer.send(200, "text/plain", "fail");
}
void setup() {
Serial.begin(115200);
WiFi.disconnect(true);
boolean fileExists = SPIFFS.exists(WIFI_CONF_FILE);
if(!fileExists) {
WiFi.mode(WIFI_AP_STA);
WiFi.softAP("AP", "password");
IPAddress myIP = WiFi.softAPIP();
setupServer = ESP8266WebServer(myIP, 8888);
setupServer.on("/join", join);
setupServer.begin();
} else {
// read file contents for ssid and password
connectWifi(ssid, password, true);
// do some work here
}
}
void loop() {
setupServer.handleClient();
}
はだから今、ボードはAP_STAモードに入り、SSID APから始まります。私はそれに接続し、ブラウザでhttp://192.169.4.1/join?ssid=mywifi&password=12345678
を開きます。どういうわけか、接続が終了し、ブラウザに「Destination Unreachable」が表示されます。しかし、シリアルモニタは「接続済み」と「Conf saved」を表示します。
なぜ私はブラウザに成功の応答を返していないのか知りたいです。私はそれがWiFiに接続した後にlocalIPが必要です。失敗した場合、失敗した応答を正しく返します。再起動する前に、接続されているクライアントに割り当てられたIPアドレスを常に返すようにするにはどうすればよいですか?
何か助けていただければ幸いです。
ありがとうございます!
ステーションモードからクライアントモードに切り替わり、おそらく新しいIPアドレスを取得している場合は、もちろん接続が失われます。あなたのブラウザが接続されたIPアドレスはもはや利用できません。 – larsks
ああ、私の謝罪、私はその部分を逃した。私は提供されたコードを修正します。私はそれも含めました。 –
@larsks AP_STAで設定するときに、ステーション専用モードに移行しないコードを修正しました。 STAのみモードは後で有効になります。 –