diff options
| author | vlapa <vlapa@ya.ru> | 2026-06-13 21:20:11 +0300 |
|---|---|---|
| committer | vlapa <vlapa@ya.ru> | 2026-06-13 21:20:11 +0300 |
| commit | eb77a811886dbef80616cb3acdf98f5fb98336cb (patch) | |
| tree | 53797a6d4bf2fcc5e28823b389470f1ad9b74b5c | |
First
| -rw-r--r-- | .gitignore | 5 | ||||
| -rw-r--r-- | .vscode/extensions.json | 10 | ||||
| -rw-r--r-- | platformio.ini | 17 | ||||
| -rw-r--r-- | src/main.cpp | 174 |
4 files changed, 206 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..845de51 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,17 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32-c3-devkitc-02] +platform = espressif32 +board = esp32-c3-devkitc-02 +framework = arduino + +monitor_speed = 115200 +upload_speed = 921600 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..563f617 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,174 @@ +#include <Arduino.h> + +#include <WiFi.h> +#include <WiFiClient.h> +#include <WebServer.h> +#include <ESPmDNS.h> +#include <Update.h> +const char *host = "esp32"; +const char *ssid = "link"; +const char *password = "dkfgf#*12091997"; +// variabls to blink without delay: +const int led = 2; +WebServer server(80); + +/* + * Login page + */ +const char *loginIndex = + "<form name='loginForm'>" + "<table width='20%' bgcolor='A09F9F' align='center'>" + "<tr>" + "<td colspan=2>" + "<center><font size=4><b>ESP32 Login Page</b></font></center>" + "<br>" + "</td>" + "<br>" + "<br>" + "</tr>" + "<td>Username:</td>" + "<td><input type='text' size=25 name='userid'><br></td>" + "</tr>" + "<br>" + "<br>" + "<tr>" + "<td>Password:</td>" + "<td><input type='Password' size=25 name='pwd'><br></td>" + "<br>" + "<br>" + "</tr>" + "<tr>" + "<td><input type='submit' onclick='check(this.form)' value='Login'></td>" + "</tr>" + "</table>" + "</form>" + "<script>" + "function check(form)" + "{" + "if(form.userid.value=='admin' && form.pwd.value=='admin')" + "{" + "window.open('/serverIndex')" + "}" + "else" + "{" + " alert('Error Password or Username')/*displays error message*/" + "}" + "}" + "</script>"; +/* + * Server Index Page + */ +const char *serverIndex = + "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>" + "<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>" + "<input type='file' name='update'>" + "<input type='submit' value='Update'>" + "</form>" + "<div id='prg'>progress: 0%</div>" + "<script>" + "$('form').submit(function(e){" + "e.preventDefault();" + "var form = $('#upload_form')[0];" + "var data = new FormData(form);" + " $.ajax({" + "url: '/update'," + "type: 'POST'," + "data: data," + "contentType: false," + "processData:false," + "xhr: function() {" + "var xhr = new window.XMLHttpRequest();" + "xhr.upload.addEventListener('progress', function(evt) {" + "if (evt.lengthComputable) {" + "var per = evt.loaded / evt.total;" + "$('#prg').html('progress: ' + Math.round(per*100) + '%');" + "}" + "}, false);" + "return xhr;" + "}," + "success:function(d, s) {" + "console.log('success!')" + "}," + "error: function (a, b, c) {" + "}" + "});" + "});" + "</script>"; +/* + * setup function + */ +void setup(void) +{ + pinMode(led, OUTPUT); + Serial.begin(115200); + // 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://esp32.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); }); + /*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); + digitalWrite(led, HIGH); + delay(600); + digitalWrite(led, LOW); + delay(600); +}
\ No newline at end of file |
