자격 증명을 하드 코딩하지 않고 WiFi 설정을 구성 할 수있는 방법으로 NodeMCU (Lolin v3) 보드를 프로그래밍하려고합니다. 나는 WiFiManager 라이브러리가 있다는 것을 알고 있지만, 라이브러리를 제공하는 UI를 사용하지 않고 자체 구현을해야하기 때문에 사용하지 않을 것입니다. 사용자가 제공 한 자격 증명은 AP_STA 모드 또는 STA 모드에서만 보드를 시작할지 여부를 확인하는 데 사용되는 SPIFFS를 사용하여 파일에 저장됩니다. ESP8266 WIFI_AP_STA 모드로 WiFi 설정하기
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"이 표시됩니다. 그러나 직렬 모니터는 '연결됨'과 '저장된 내용'을 인쇄합니다.
브라우저에 성공 응답을 반환하지 않는 이유를 알고 싶습니다. WiFi에 연결 한 후 localIP가 필요합니다. 실패 할 경우 실패한 응답을 올 Y 르게 리턴합니다. 다시 시작하기 전에 연결되어있는 클라이언트에게 항상 할당 된 IP 주소를 반환하는지 어떻게 확인할 수 있습니까?
도움을 주시면 감사하겠습니다.
감사합니다.
스테이션 모드에서 클라이언트 모드로 전환하고 아마도 새 IP 주소를 얻는다면 당연히 연결이 끊어집니다. 브라우저가 연결된 IP 주소를 더 이상 사용할 수 없습니다. – larsks
아, 사과드립니다. 나는 그 부분을 놓쳤습니다. 나는 제공된 코드를 바로 잡을 것이다. 나는 그것도 포함시켰다. –
@larsks AP_STA에서 구성 할 때 스테이션 전용 모드로 전환되지 않는 코드를 수정했습니다. STA 전용 모드는 나중에 만 활성화됩니다. –