summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 21:20:11 +0300
committervlapa <vlapa@ya.ru>2026-06-13 21:20:11 +0300
commiteb77a811886dbef80616cb3acdf98f5fb98336cb (patch)
tree53797a6d4bf2fcc5e28823b389470f1ad9b74b5c
First
-rw-r--r--.gitignore5
-rw-r--r--.vscode/extensions.json10
-rw-r--r--platformio.ini17
-rw-r--r--src/main.cpp174
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