#include #include #include #include #include #include #include const char* host = "esp32gragedoor"; const char* ssid = "JoNelsDarlings"; const char* password = "Paris2016"; const int buttonPin = 4; // Reed switch - don't forget the pull down resistor. const int ledPin = 2; // Internal LED int previousState; WebServer server(80); /* * Login page */ const char* loginIndex = "
" "" "" "" "
" "
" "" "" "" "" "
" "
" "" "" "" "
" "
" "" "" "" "" "
" "
ESP32 Login Page
" "
" "
Username:
Password:
" "
" ""; /* * Server Index Page */ const char* serverIndex = "" "
" "" "" "
" "
progress: 0%
" ""; void send_notification(String subject){ //return; Serial.println("Sending Notification."); WiFiClientSecure client; client.setInsecure(); // NOT RECOMMENDED const char* host="deadswitch.kawomi.com"; const int port=443; if (!client.connect(host,port)) { Serial.println("connection failed"); return; } String url = "/api/v1?topic=" + subject + "&secs=0&email=none"; Serial.print("Requesting URL: "); Serial.println(url); client.print(String("POST ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Content-Length: 14\r\n\r\n" + "platform=esp32\r\n"); } /* * setup function */ void setup(void) { Serial.begin(9600); delay(500); Serial.println(">>>>>>>>>> Garage Door Monitor <<<<<<<<<<<<<<"); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); // if we stat up we need to see what the status is... digitalWrite(ledPin, previousState= digitalRead(buttonPin)); Serial.printf("Initial State: %d",previousState); // Connect to WiFi network WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /*use mdns for host name resolution*/ if (!MDNS.begin(host)) { //http://esp32ota.local Serial.println("Error setting up MDNS responder!"); while (1) { delay(1000); } } Serial.println("mDNS responder started"); send_notification("garagedoor.rebooted.livorno.address"); /*return index page which is stored in serverIndex */ server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", loginIndex); }); server.on("/serverIndex", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); /*handling uploading firmware file */ server.on("/update", HTTP_POST, []() { server.sendHeader("Connection", "close"); server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); ESP.restart(); }, []() { HTTPUpload& upload = server.upload(); if (upload.status == UPLOAD_FILE_START) { Serial.printf("Update: %s\n", upload.filename.c_str()); if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_WRITE) { /* flashing firmware to ESP*/ 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); } } }); server.begin(); } void loop(void) { server.handleClient(); delay(1000); int buttonState = digitalRead(buttonPin); if (buttonState!=previousState){ if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); Serial.println("Garage Opened"); send_notification("garagedoor.open.livorno.address"); } else { digitalWrite(ledPin, LOW); Serial.println("Garage Closed"); send_notification("garagedoor.closed.livorno.address"); } previousState=buttonState; } }