#include <ESP8266WiFi.h>                 //     * ver_3.1.2     * Arduino IDE 1.8.19#include <WiFiClient.h>#include <ESP8266WebServer.h>#include <ESP8266mDNS.h>#include <ESP8266HTTPUpdateServer.h> #include <Hash.h>#include <ESPAsyncTCP.h>  #define WEBSERVER_H  #include "ESPAsyncWebServer.h"
AsyncWebServer server(80);
const int k_01 = 4;   const int k_02 = 5;
const char index_html[] PROGMEM = R"rawliteral(<!DOCTYPE HTML><html>  <head>    <title> ESP Control Motor </title><meta charset = "UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1">    <link href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA/4QAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEQABEREgACERAAERESAAIREAARERIAAhEQABEREgACERAAERESAAIREAARERIAAhEREREREgAAIREREREgABECEREREgEQARAhEREgEQAAEQIREgEQAAABECEgEQAAAAARAgEQAQAAAAEQEQARAAAAABEQABEAAAAAAQAAIgCHAwAAhwMAAIcDAACHAwAAhwMAAIcDAACAAwAAwAcAACAJAACQEwAAyCcAAORPAADymwAA+TMAAPxzAAD+8wAA" rel="icon" type="image/x-icon">    <style>      body { font-family: Arial; text-align: center; margin:0px auto; padding-top: 30px;}      .button {        padding: 10px 20px; font-size: 24px; text-align: center;        outline: none; color: #fff; background-color: #2f4468; border: none; border-radius: 50%; box-shadow: 0 8px #999;        cursor: pointer; -webkit-touch-callout: none;        -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;        -webkit-tap-highlight-color: rgba(0,0,0,0);      }      .button:hover {background-color: #1f2e45 }      .button:active { background-color: #fc0905; box-shadow: 0 4px #666; transform: translateY(2px);  }    </style>  </head>  <body>    <h1> ESP C0NTR0L M0T0R </h1>    <button class="button" onmousedown="toggleCheckbox('on');" ontouchstart="toggleCheckbox('on');" onmouseup="toggleCheckbox('off');" ontouchend="toggleCheckbox('off');">OUT</button>       <br><br>    <button class="button" onmousedown="toggleCheckbox('top');" ontouchstart="toggleCheckbox('top');" onmouseup="toggleCheckbox('');" ontouchend="toggleCheckbox('');">0TA</button>       <br><br>    <button class="button" onmousedown="toggleCheckbox('oN');" ontouchstart="toggleCheckbox('oN');" onmouseup="toggleCheckbox('ofF');" ontouchend="toggleCheckbox('ofF');">I N</button>       <script>   function toggleCheckbox(x) {  var xhr = new XMLHttpRequest();  xhr.open("GET", "/" + x, true);  xhr.send();  }   function toggleCheckbox(z) {  var xhr = new XMLHttpRequest();  xhr.open("GET", "/" + z, true);  xhr.send();  }   function toggleCheckbox(y) {  var xhr = new XMLHttpRequest();  xhr.open("GET", "/" + y, true);  xhr.send();  }  </script>  </body></html>)rawliteral";
void notFound(AsyncWebServerRequest *request){ request->send(404, "text/plain", "Not found");  }

void setup(){  Serial.begin(115200); Serial.println();    pinMode(k_01, OUTPUT); digitalWrite(k_01, LOW);  pinMode(k_02, OUTPUT); digitalWrite(k_02, LOW);     WiFi.mode(WIFI_STA);  WiFi.begin( "wifi nha ban" , "mat khau" );    while( WiFi.waitForConnectResult() != WL_CONNECTED) {  IPAddress ip (192, 168, 1, 2), subn (255, 255, 255, 0); WiFi.softAPConfig (ip, ip, subn); WiFi.mode (WIFI_AP);      WiFi.softAP ( "motor_H" , "123456789" );    break;  }    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){  request->send_P(200, "text/html", index_html);  });//============================================================================================  .ON  server.on("/on", HTTP_GET, [] (AsyncWebServerRequest *request) {  digitalWrite(k_01, HIGH); digitalWrite(k_02, LOW); request->send(200, "text/plain", "ok");  });  server.on("/oN", HTTP_GET, [] (AsyncWebServerRequest *request) {  digitalWrite(k_02, HIGH); digitalWrite(k_01, LOW); request->send(200, "text/plain", "ok");  });  //============================================================================================  .OFF  server.on("/off", HTTP_GET, [] (AsyncWebServerRequest *request) {  digitalWrite(k_01, LOW);  request->send(200, "text/plain", "ok");  });  server.on("/ofF", HTTP_GET, [] (AsyncWebServerRequest *request) {  digitalWrite(k_02, LOW);  request->send(200, "text/plain", "ok");  });    server.onNotFound(notFound);  server.begin();}
void loop() { }