24.02.2017ESP8266 - Uložení nastavení WIFI
Demo využití filesystému
Demo programu který uloží nastavení wifi do souboru na filesystému a pak ho použije k připojení na síť.
Demo program
// use command: <SSID;PASSWORD>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include "FS.h"
const char* ssid = "defaultssid";
const char* password = "defaultpwd";
const char* authFile = "/wifi.auth";
ESP8266WebServer server(80);
const int led = 13;
void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp8266!");
digitalWrite(led, 0);
}
void handleNotFound(){
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
bool readSSID = false;
bool readPwd = false;
bool readDone = false;
String rSSID = "";
String rPWD = "";
void readAuthFromSerial(){
if (Serial.available() >0) {
while(Serial.available() >0) {
char c = Serial.read(); //gets one byte from serial buffer
if(c == '<'){ readSSID = true; }
else if(c == ';'){ readPwd = true; }
else if(c == '>'){ readSSID = false; readDone = true; }
else if(readPwd){ rPWD += c; }
else if(readSSID){ rSSID += c; }
}
if(readDone){
Serial.println();
Serial.println("Received from serial:");
Serial.println("---------------------");
Serial.print("SSID:");
Serial.println(rSSID);
Serial.print("Password:");
Serial.println(rPWD);
Serial.println("- Save to file");
saveAuth(rSSID, rPWD);
Serial.println("Read from file:");
Serial.println("---------------------");
checkAuth();
Serial.println("---------------------");
Serial.println("Reboot your device");
readDone = false;
readSSID = false;
readPwd = false;
rSSID = "";
rPWD = "";
}
}
}
void saveAuth(String ssid, String password) {
File f = SPIFFS.open(authFile, "w");
if (!f) {
Serial.println("file creation failed");
return;
}
f.print(ssid);
f.print(";");
f.print(password);
f.print(";");
f.close();
}
void checkAuth() {
File f = SPIFFS.open(authFile, "r");
if (!f) {
Serial.println("File not found. Set auth usingo command <SSID;PASSWORD>");
return;
}
Serial.print("SSID: "); Serial.println(getAuthSSID());
Serial.print("Password: "); Serial.println(getAuthPassword());
f.close();
}
String getAuthSSID() {
File f = SPIFFS.open(authFile, "r");
if (!f) {
Serial.println("File not found. Set auth usingo command <SSID;PASSWORD>");
return "";
}
int i = 0;
while(f.available()) {
String line = f.readStringUntil(';');
if(i == 0) {
f.close();
return line;
}
i++;
}
f.close();
return "";
}
String getAuthPassword() {
File f = SPIFFS.open(authFile, "r");
if (!f) {
Serial.println("File not found. Set auth usingo command <SSID;PASSWORD>");
return "";
}
int i = 0;
while(f.available()) {
String line = f.readStringUntil(';');
if(i == 1) {
f.close();
return line;
}
i++;
}
f.close();
return "";
}
void setup(void){
const char* _ssid = "";
const char* _password = "";
pinMode(led, OUTPUT);
digitalWrite(led, 0);
bool result = SPIFFS.begin(); // always use this to "mount" the filesystem
Serial.begin(115200);
_ssid = strdup(getAuthSSID().c_str());
_password = strdup(getAuthPassword().c_str());
Serial.println();
Serial.println();
Serial.println("Connect to:");
Serial.print("SSID: ");
Serial.println(_ssid);
Serial.print("PWD: ");
Serial.println(_password);
Serial.println();
WiFi.begin(_ssid, _password);
Serial.println("");
// Wait for connection
int counter = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
readAuthFromSerial();
counter++;
if(counter > 40){
Serial.println();
counter = 0;
}
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(_ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/inline", [](){
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
readAuthFromSerial();
server.handleClient();
}
comments powered by Disqus

