Initial commit
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
#include <FS.h> //this needs to be first, or it all crashes and burns...
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <DNSServer.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
|
||||
#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
WiFiServer server(80);
|
||||
String header;
|
||||
String outputState = "off";
|
||||
char output[2] = "5";
|
||||
bool shouldSaveConfig = false;
|
||||
|
||||
void saveConfigCallback () {
|
||||
Serial.println("Should save config");
|
||||
shouldSaveConfig = true;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
Serial.println("mounting FS...");
|
||||
|
||||
if (SPIFFS.begin()) {
|
||||
Serial.println("mounted file system");
|
||||
if (SPIFFS.exists("/config.json")) {
|
||||
Serial.println("reading config file");
|
||||
File configFile = SPIFFS.open("/config.json", "r");
|
||||
if (configFile) {
|
||||
Serial.println("opened config file");
|
||||
size_t size = configFile.size();
|
||||
// Allocate a buffer to store contents of the file.
|
||||
std::unique_ptr<char[]> buf(new char[size]);
|
||||
|
||||
configFile.readBytes(buf.get(), size);
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.parseObject(buf.get());
|
||||
json.printTo(Serial);
|
||||
if (json.success()) {
|
||||
Serial.println("\nparsed json");
|
||||
strcpy(output, json["output"]);
|
||||
} else {
|
||||
Serial.println("failed to load json config");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Serial.println("failed to mount FS");
|
||||
}
|
||||
|
||||
WiFiManagerParameter custom_output("output", "output", output, 2);
|
||||
|
||||
// Local intialization. Once its business is done, there is no need to keep it around
|
||||
WiFiManager wifiManager;
|
||||
|
||||
wifiManager.setSaveConfigCallback(saveConfigCallback);
|
||||
wifiManager.addParameter(&custom_output);
|
||||
wifiManager.autoConnect("AutoConnectAP");
|
||||
|
||||
Serial.println("Connected.");
|
||||
|
||||
strcpy(output, custom_output.getValue());
|
||||
|
||||
if (shouldSaveConfig) {
|
||||
Serial.println("saving config");
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.createObject();
|
||||
json["output"] = output;
|
||||
|
||||
File configFile = SPIFFS.open("/config.json", "w");
|
||||
if (!configFile) {
|
||||
Serial.println("failed to open config file for writing");
|
||||
}
|
||||
|
||||
json.printTo(Serial);
|
||||
json.printTo(configFile);
|
||||
configFile.close();
|
||||
}
|
||||
|
||||
pinMode(atoi(output), OUTPUT);
|
||||
digitalWrite(atoi(output), HIGH);;
|
||||
|
||||
server.begin();
|
||||
}
|
||||
|
||||
void loop(){
|
||||
WiFiClient client = server.available();
|
||||
if (client) {
|
||||
Serial.println("New Client.");
|
||||
String currentLine = "";
|
||||
while (client.connected()) {
|
||||
if (client.available()) {
|
||||
char c = client.read();
|
||||
Serial.write(c);
|
||||
header += c;
|
||||
if (c == '\n') {
|
||||
// if the current line is blank, you got two newline characters in a row.
|
||||
// that's the end of the client HTTP request, so send a response:
|
||||
if (currentLine.length() == 0) {
|
||||
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
|
||||
// and a content-type so the client knows what's coming, then a blank line:
|
||||
client.println("HTTP/1.1 200 OK");
|
||||
client.println("Content-type:text/html");
|
||||
client.println("Connection: close");
|
||||
client.println();
|
||||
|
||||
if (header.indexOf("GET /output/on") >= 0) {
|
||||
Serial.println("Output on");
|
||||
outputState = "on";
|
||||
digitalWrite(atoi(output), LOW);
|
||||
} else if (header.indexOf("GET /output/off") >= 0) {
|
||||
Serial.println("Output off");
|
||||
outputState = "off";
|
||||
digitalWrite(atoi(output), HIGH);
|
||||
} else if (header.indexOf("GET /output/toggle") >= 0) {
|
||||
Serial.println("Output toggle");
|
||||
if(outputState == "off") {
|
||||
outputState = "on";
|
||||
digitalWrite(atoi(output), LOW);
|
||||
} else {
|
||||
outputState = "off";
|
||||
digitalWrite(atoi(output), HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
client.println("<!DOCTYPE html><html>");
|
||||
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
|
||||
client.println("<link rel=\"icon\" href=\"data:,\">");
|
||||
client.println("<meta charset=\"UTF-8\">");
|
||||
client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
|
||||
client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
|
||||
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
|
||||
client.println(".button2 {background-color: #77878A;}</style></head>");
|
||||
client.println("<body><h1>Świąteczne lampki</h1>");
|
||||
client.println("<p>Stan: " + outputState + "</p>");
|
||||
client.println("<p><a href=\"/output/toggle\"><button class=\"button\">PRZEŁĄCZ</button></a></p>");
|
||||
client.println("</body></html>");
|
||||
|
||||
// The HTTP response ends with another blank line
|
||||
client.println();
|
||||
break;
|
||||
} else {
|
||||
currentLine = "";
|
||||
}
|
||||
} else if (c != '\r') {
|
||||
currentLine += c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
header = "";
|
||||
client.stop();
|
||||
Serial.println("Client disconnected.");
|
||||
Serial.println("");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user