From f842153005d254f2b0a4659af0b00faf742ef807 Mon Sep 17 00:00:00 2001 From: petro Date: Sat, 15 Mar 2025 15:31:16 +0200 Subject: [PATCH] add code of lab1 by Petro Fedyk --- mc_labs/mc_lab_01/Petro-Fedyk/btn.h | 54 ++++++++ mc_labs/mc_lab_01/Petro-Fedyk/data/index.html | 119 ++++++++++++++++++ mc_labs/mc_lab_01/Petro-Fedyk/indexHtml.h | 99 +++++++++++++++ mc_labs/mc_lab_01/Petro-Fedyk/mc-lab1.ino | 94 ++++++++++++++ mc_labs/mc_lab_01/Petro-Fedyk/wifi.h | 98 +++++++++++++++ 5 files changed, 464 insertions(+) create mode 100644 mc_labs/mc_lab_01/Petro-Fedyk/btn.h create mode 100644 mc_labs/mc_lab_01/Petro-Fedyk/data/index.html create mode 100644 mc_labs/mc_lab_01/Petro-Fedyk/indexHtml.h create mode 100644 mc_labs/mc_lab_01/Petro-Fedyk/mc-lab1.ino create mode 100644 mc_labs/mc_lab_01/Petro-Fedyk/wifi.h diff --git a/mc_labs/mc_lab_01/Petro-Fedyk/btn.h b/mc_labs/mc_lab_01/Petro-Fedyk/btn.h new file mode 100644 index 0000000..040e439 --- /dev/null +++ b/mc_labs/mc_lab_01/Petro-Fedyk/btn.h @@ -0,0 +1,54 @@ +#ifndef BTN_H +#define BTN_H + +#include +#define HOLD_TIME 2000 + +extern const uint8_t btnGPIO; +extern unsigned long lastHoldTime; +extern unsigned long lastClickTime; +extern unsigned long currentDelay; + +extern bool btnHold; +extern bool isPressBtn; +extern bool algoBlink; +extern bool siteBtnPressed; +extern bool isSiteBtnHold; + +void buttonHold() +{ + if (!digitalRead(btnGPIO)) + { + if (!btnHold) + { + lastHoldTime = millis(); + btnHold = true; + Serial.println("press"); + } + + if (millis() - lastHoldTime >= HOLD_TIME) + { + algoBlink = !algoBlink; + Serial.println("Button is held"); + } + } + else + { + btnHold = false; + } +} + +void checkSiteBtn() +{ + static bool lastState = false; + + if (siteBtnPressed && !lastState) + { + algoBlink = !algoBlink; + Serial.println(algoBlink ? "Algorithm mode activated" : "Default mode activated"); + } + + lastState = siteBtnPressed; +} + +#endif \ No newline at end of file diff --git a/mc_labs/mc_lab_01/Petro-Fedyk/data/index.html b/mc_labs/mc_lab_01/Petro-Fedyk/data/index.html new file mode 100644 index 0000000..e3dab41 --- /dev/null +++ b/mc_labs/mc_lab_01/Petro-Fedyk/data/index.html @@ -0,0 +1,119 @@ + + + + + + + + + +

ESP Pushbutton Web Server

+ + + + +
+

Mini

+
+
+
+
+ +
+

Big

+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/mc_labs/mc_lab_01/Petro-Fedyk/indexHtml.h b/mc_labs/mc_lab_01/Petro-Fedyk/indexHtml.h new file mode 100644 index 0000000..1d257f1 --- /dev/null +++ b/mc_labs/mc_lab_01/Petro-Fedyk/indexHtml.h @@ -0,0 +1,99 @@ +#ifndef INDEX_HTML_H +#define INDEX_HTML_H + +const char index_html[] PROGMEM = R"rawliteral( + + + + + + + + + +

ESP Pushbutton Web Server

+ + + + + + + + + + )rawliteral"; + +#endif \ No newline at end of file diff --git a/mc_labs/mc_lab_01/Petro-Fedyk/mc-lab1.ino b/mc_labs/mc_lab_01/Petro-Fedyk/mc-lab1.ino new file mode 100644 index 0000000..834ad77 --- /dev/null +++ b/mc_labs/mc_lab_01/Petro-Fedyk/mc-lab1.ino @@ -0,0 +1,94 @@ +#include +#include +#include +#include +#include +#include "indexHtml.h" +#include "wifi.h" +#include "btn.h" + +const uint8_t btnGPIO = 13; +#define LED1GPIO 0 +#define LED2GPIO 14 +#define LED3GPIO 12 +#define BLINK_TIME 1000 +#define PIN_DEFOULT 3 +#define PIN_ALGO 4 + +unsigned long lastHoldTime = 0; +unsigned long currentDelay = 0; +unsigned long lastClickTime = 0; + +bool btnHold = false; +bool isPressBtn = false; +bool algoBlink = false; +bool siteBtnPressed = false; + +const uint8_t defaulLED[] = {LED1GPIO, LED2GPIO, LED3GPIO}; +const uint8_t algolLED[] = {LED3GPIO, LED2GPIO, LED1GPIO, LED2GPIO, LED3GPIO}; + +void pinsSetup() +{ + pinMode(btnGPIO, INPUT); + for (uint8_t i = 0; i < PIN_DEFOULT; i++) + { + pinMode(defaulLED[i], OUTPUT); + } + for (uint8_t j = 0; j < PIN_ALGO; j++) + { + pinMode(algolLED[j], OUTPUT); + } +} + +void setup() +{ + Serial.begin(115200); + pinsSetup(); + initWiFi(); + InitMDNS(); +} + +uint8_t currentLED = 0; + +void do_algorithm() +{ + if (millis() - currentDelay >= BLINK_TIME) + { + currentDelay = millis(); + + if (algoBlink) + { + if (currentLED > 0) + digitalWrite(algolLED[currentLED - 1], LOW); + else + digitalWrite(algolLED[sizeof(algolLED) / sizeof(algolLED[0]) - 1], LOW); + + digitalWrite(algolLED[currentLED], HIGH); + Serial.println(currentLED); + Serial.println("algo blink"); + + currentLED = (currentLED + 1) % (sizeof(algolLED) / sizeof(algolLED[0])); + } + else + { + if (currentLED > 0) + digitalWrite(defaulLED[currentLED - 1], LOW); + else + digitalWrite(defaulLED[sizeof(defaulLED) / sizeof(defaulLED[0]) - 1], LOW); + + digitalWrite(defaulLED[currentLED], HIGH); + Serial.println(currentLED); + Serial.println("default blink"); + + currentLED = (currentLED + 1) % (sizeof(defaulLED) / sizeof(defaulLED[0])); + } + } +} + +void loop() +{ + MDNS.update(); + buttonHold(); + do_algorithm(); + checkSiteBtn(); +} diff --git a/mc_labs/mc_lab_01/Petro-Fedyk/wifi.h b/mc_labs/mc_lab_01/Petro-Fedyk/wifi.h new file mode 100644 index 0000000..1fbdf75 --- /dev/null +++ b/mc_labs/mc_lab_01/Petro-Fedyk/wifi.h @@ -0,0 +1,98 @@ +#ifndef WIFI_H +#define WIFI_H + +#include +AsyncWebServer server(80); // Порт 80 для HTTP-з'єднання + +#ifndef ESP_WIFI_MODE +#define ESP_WIFI_MODE 1 +#endif + +#ifndef SSID +#define SSID "admin" +#endif + +#ifndef PASSWORD +#define PASSWORD "domestos1216" +#endif + +#define HOST_NAME "lvivske1715" + +extern bool siteBtnPressed; +void notFound(AsyncWebServerRequest *request); + +uint8_t initWiFi() +{ + if (ESP_WIFI_MODE == 1) + { + WiFi.mode(WIFI_STA); + // Connect to Wi-Fi network with SSID and password + WiFi.begin(SSID, PASSWORD); + + while (WiFi.status() != WL_CONNECTED) + { + delay(1000); + Serial.println("Connecting to WiFi.."); + } + Serial.println(); + Serial.print("ESP IP Address: http://"); + Serial.println(WiFi.localIP()); + + Serial.print("RRSI: "); + Serial.println(WiFi.RSSI()); + } + else if (ESP_WIFI_MODE == 2) + { + WiFi.mode(WIFI_AP); + Serial.println("Setting AP (Access Point)…"); + // Remove the password parameter, if you want the AP (Access Point) to be open + WiFi.softAP(SSID, NULL); + + IPAddress IP = WiFi.softAPIP(); + Serial.print("AP IP address: "); + Serial.println(IP); + } + else + { + WiFi.mode(WIFI_OFF); + Serial.println("Wifi of"); + return -1; + } + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) + { request->send_P(200, "text/html", index_html); }); + + server.on("/on_alg1", HTTP_GET, [](AsyncWebServerRequest *request) + { + siteBtnPressed = true; + Serial.println("site bnt true"); + request->send(200, "text/plain", "ok"); }); + + server.on("/off_alg1", HTTP_GET, [](AsyncWebServerRequest *request) + { + siteBtnPressed = false; + + Serial.println("site bnt false"); + + request->send(200, "text/plain", "ok"); }); + + server.onNotFound(notFound); + server.begin(); + + return 0; +} + +void notFound(AsyncWebServerRequest *request) +{ + request->send(404, "text/plain", "Not found"); +} + +void InitMDNS() +{ + if (!MDNS.begin(HOST_NAME)) + { + Serial.println("Error starting mDNS"); + } + Serial.println("mDNS started"); +} + +#endif \ No newline at end of file