So schalten Sie auf normale wifi-Modus, access-point-Modus ESP8266
Bin ich mit dem ESP8266-12 wifi-Modul für den Zugriff auf mein Heim-wifi-Netz-Kontrolle leuchtet. Für das hochladen der neuen firmware(OTA: Over the Air) update, das ich verwenden möchte ESP8266 - hotspot-AccessPoint, weil nach der änderung des Passwort von meinem WLAN-Netzwerk, ich werde nicht in der Lage, das zu tun. Dies ist mein Arduino code:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
//ssid and password of your wifi network
const char* ssid = "wifi_ssid";
const char* password = "wifi_password";
//ssid and password to connect to local hotspot of ESP8266
const char *esp_ssid = "your_desired_ssid";
const char *esp_password = "your_desired_password";
IPAddress ip(192, 168, 1, xx); //where xx is the desired IP Address
IPAddress gateway(192, 168, 1, 254); //set gateway to match your wifi network
IPAddress subnet(255, 255, 255, 0); //set subnet mask to match your wifi network
ESP8266WebServer server(80);
int status = LOW;
const int pin = 5;
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>";
//Authorization username and password before updating firmware
const char* www_username = "admin";
const char* www_password = "esp8266";
void connectToWifi() {
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED) {
delay(500);
Serial.print(".");
//ESP.restart();
}
Serial.print("WiFi connected to ");
Serial.println(WiFi.localIP());
}
void createAccessPoint() {
Serial.println("Configuring access point for wifi network *your_desired_ssid*...");
WiFi.softAP(esp_ssid, esp_password);
IPAddress accessIP = WiFi.softAPIP();
Serial.print("ESP AccessPoint IP address: ");
Serial.println(accessIP);
/* Go to http://192.168.4.1 in a web browser
* connected to this access point to see it.
*/
}
void serverResponse(){
server.sendHeader("Connection", "close");
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, "text/plain", String(status));
}
void setup() {
Serial.begin(115200);
pinMode(pin, OUTPUT);
connectToWifi();
ArduinoOTA.begin();
server.on("/fupdate", [](){
if(server.authenticate(www_username, www_password)){
createAccessPoint();
server.sendHeader("Connection", "close");
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, "text/html", serverIndex);
}
else{
return server.requestAuthentication();
}
});
server.on("/status", [](){
serverResponse();
});
server.on("/on", [](){
status = HIGH;
serverResponse();
});
server.on("/off", [](){
status = LOW;
serverResponse();
});
server.on("/update", HTTP_POST, [](){
server.sendHeader("Connection", "close");
server.sendHeader("Access-Control-Allow-Origin", "*");
server.send(200, "text/plain", (Update.hasError())?"FAIL":"OK");
ESP.restart();
},[](){
HTTPUpload upload = server.upload();
if(upload.status == UPLOAD_FILE_START){
Serial.setDebugOutput(true);
WiFiUDP::stopAll();
Serial.printf("Update: %s\n", upload.filename.c_str());
uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
if(!Update.begin(maxSketchSpace)){//start with max available size
Update.printError(Serial);
}
} else if(upload.status == UPLOAD_FILE_WRITE){
if(Update.write(upload.buf, upload.currentSize) != upload.currentSize){
Update.printError(Serial);
}
} else if(upload.status == UPLOAD_FILE_END){
if(Update.end(true)){ //true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
}
Serial.setDebugOutput(false);
}
yield();
});
server.begin();
MDNS.addService("http", "tcp", 80);
Serial.print("Open http://");
Serial.print(WiFi.localIP());
Serial.println("/in your browser to see it working");
}
void loop() {
digitalWrite(pin, status);
ArduinoOTA.handle();
server.handleClient();
delay(1);
}
Habe ich eine einfache WifiWebServer die verarbeitet die Anfragen. Wenn ich senden Sie /fupdate
Anfrage, ESP-Modul erstellen sollte, hotspot und ich kann eine Verbindung zu meinem computer über den access-point um die firmware zu aktualisieren. Für die Aktualisierung der firmware habe ich die Genehmigung. Wenn die Autorisierung erfolgt nur T kann dann die neue firmware hochladen. Aber meine ESP8266-Moduls ist die Erstellung der hotspot vor dem senden /fupdate
**Anforderung oder Genehmigung. Es ermöglicht hotspot, wenn ich gebe power. Kann jemand wie dieses problem zu beheben?
InformationsquelleAutor Jai Prak | 2016-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie die folgenden Zeilen an den Anfang der Funktion aufgerufen connectToWifi() :
ESP WiFi-Modul speichert seine eigenen config-on-chip-und er erwartet, dass diese zu überschreiben klar. Machen Sie nicht ihn zu versuchen, etwas gemeinsames, definieren configs klar und stop unabhängigen früheren Operationen.
InformationsquelleAutor cagdas
Sieht es aus wie Sie niemals in der Nähe des Access Point. Sie wahrscheinlich weggelassen, das Teil hier aber stellen Sie sicher, dass nach der Aktualisierung der firmware schließen Sie die A. P. richtig. Wenn Sie den code ausführen, genau wie diese , wahrscheinlich gut funktionieren würde, die erste Zeit, aber sobald Sie die "/fupdate" - Befehl, es werde pflegen, die A. P., für immer, und schließlich zum Absturz beim ausführen von "/fupdate" zum zweiten mal.
So sollten Sie überprüfen Sie den status vor dem Aufruf von "createAccessPoint" auch, weil wenn es schon erstellt die software scheitern könnte.
InformationsquelleAutor gabdev