/* Source: https://randomnerdtutorials.com/esp32-over-the-air-ota-programming/ To update the firmware with Platform IO, do a build and then upload in the web interface the file .pio/build/esp32doit-devkit-v1/firmware.bin */ #include /* * Rui Santos * Complete Project Details http://randomnerdtutorials.com */ #include #include #include #include #include const char* host = "esp32blind"; const char* ssid = "JoNelsDarlings"; const char* password = "Paris2016"; // variabls to blink without delay: const int led = 2; unsigned long previousMillis = 0; // will store last time LED was updated const long interval = 1000; // interval at which to blink (milliseconds) int ledState = LOW; // ledState used to set the LED // Motor Control PWM parameters int motor1Pin1 = 27; int motor1Pin2 = 26; int enable1Pin = 14; // Setting PWM properties const int freq = 30000; const int pwmChannel = 0; const int resolution = 8; int motorSpeed = 220; // motor speed, max 355 WebServer server(80); /* * Login page */ const char* loginIndex = "
" "" "" "" "
" "
" "" "" "" "" "
" "
" "" "" "" "
" "
" "" "" "" "" "
" "
ESP32 Login Page
" "
" "
Username:
Password:
" "
" ""; /* * Server Index Page */ const char* serverIndex = ""; const char* movePage = "

REV

FWD

"; /* * setup function */ void setup(void) { pinMode(led, OUTPUT); // sets the pins as outputs: pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enable1Pin, OUTPUT); // configure LED PWM functionalitites ledcSetup(pwmChannel, freq, resolution); // attach the channel to the GPIO to be controlled ledcAttachPin(enable1Pin, pwmChannel); ledcWrite(pwmChannel, motorSpeed); Serial.begin(9600); // Connect to WiFi network WiFi.begin(ssid, password); Serial.println(""); // Wait for connection or reboot if it doesn't connect for too long uint32_t wifiConnAttements = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (wifiConnAttements++ > 120) { Serial.println( ""); ESP.restart(); } } 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"); /*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); }); server.on("/mot", HTTP_GET, []() { server.sendHeader("Connection", "close"); Serial.println("Motor Access"); server.send(200, "text/html", movePage); }); server.on("/fwd", HTTP_GET, []() { server.sendHeader("Connection", "close"); // Move the DC motor forward at maximum speed Serial.println("Moving Forward"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); delay(1000); // Stop the DC motor digitalWrite(motor1Pin2, LOW); server.send(200, "text/html", movePage); }); server.on("/rev", HTTP_GET, []() { server.sendHeader("Connection", "close"); Serial.println("Moving Backward"); digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); delay(1000); // Stop the DC motor digitalWrite(motor1Pin1, LOW); server.send(200, "text/html", movePage); }); /*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(1); /* // Move the DC motor forward at maximum speed Serial.println("Moving Forward"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); delay(2000); // Stop the DC motor Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); delay(1000); // Move DC motor backwards at maximum speed Serial.println("Moving Backwards"); digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); delay(2000); // Stop the DC motor Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); delay(1000); */ }