Servo + WebBrowser + NodeMCU Esp8266

 

Coding 4 dan 5

Servo + WebBrowser + OTA + NodeMCU Esp8266

:


Coding 4 



#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#include <Servo.h>  //Include the Servo Library


#include <ArduinoOTA.h>



#include "PageIndex.h"; //--> Include the contents of the User Interface Web page from website, stored in the same folder as the .ino file  


#define ServoPort D4   //--> Defining Servo Port


#define LED1  D0   //-->Defining a Simple LED


//Make a wifi name and password as access point


const char* ssid = "ESPServo";  // your SSID


const char* password = "12345678"; //WIFI Password



Servo myservo;  //--> create servo object to control a servo


ESP8266WebServer server(80);  //--> Server on port 80


String SERstate1 = "OFF";


//This routine is executed when you open NodeMCU ESP8266 IP Address in browser


void handleRoot() {


  String s = MAIN_page; //Read HTML contents


  server.send(200, "text/html", s); //Send web page


}


//Procedure for handling servo control


void handleServo() {

  String POS = server.arg("servoPOS");

  int pos = POS.toInt();

  myservo.write(pos);   //--> Move the servo motor according to the POS value

  delay(15);

  Serial.print("Servo Angle:");

  Serial.println(pos);

  server.send(200, "text/plane", "");

}


void controlServo() {

  String t_state = server.arg("SERstate1");

  Serial.println(t_state);

  int pos;

  if (t_state == "1") {

    SERstate1 = pos;

    controlLED1();

    for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees

      // in steps of 1 degree

      myservo.write(pos);              // tell servo to go to position in variable 'pos'

      delay(15);                       // waits 15ms for the servo to reach the position

    }

    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees

      myservo.write(pos);              // tell servo to go to position in variable 'pos'

      delay(15);                       // waits 15ms for the servo to reach the position

    }

    controlLED1();

  }

  else if (t_state == "2") {

    SERstate1 = pos;

    myservo.write(45);

    controlLED1();

  }

  else if (t_state == "3") {

    SERstate1 = pos;

    myservo.write(90);

    controlLED1();

  }

  else if (t_state == "4") {

    SERstate1 = pos;

    myservo.write(180);

    controlLED1();

  }

  else {

    SERstate1 = "OFF";

  }

  server.send(200, "text/plane", SERstate1);

}


void statusSER() {

  server.send(200, "text/plane", SERstate1);

}

void controlLED1() {

  digitalWrite(LED1, HIGH);

  delay(200);

  digitalWrite(LED1, LOW);

  delay(200);

}



void setup() {


  Serial.begin(115200);

  delay(500);

  myservo.attach(ServoPort); //--> attaches the servo on D1 to the servo object

  pinMode(LED1, OUTPUT);

  Serial.print("Configuring access point...");

  /* You can remove the password parameter if you want the AP to be open. */

  WiFi.softAP(ssid, password);

  IPAddress myIP = WiFi.softAPIP();

  Serial.print("AP IP address: ");

  Serial.println(myIP);



  //Initialize Webserver

  server.on("/", handleRoot); //--> Routine to handle at root location. This is to display web page.

  server.on("/setPOS", handleServo); //--> Sets servo position from Web request

  server.on("/setSER1", controlServo);

  server.on("/readSER1", statusSER);

  server.begin();


  Serial.println("HTTP server started");

    

ArduinoOTA.begin();



}



void loop() {

    

  ArduinoOTA.handle();          // listen for update OTA request from clients

 

  server.handleClient();


}



Coding 5 

( Wajib NamaFile:

PageIndex.h )


const char MAIN_page[] PROGMEM = R"=====(


<!DOCTYPE html>

<html>

  <head>

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>

      html {

        font-family: Arial;

        display: inline-block;

        margin: 0px auto;

        text-align: center;

      }


      .slidecontainer {

        width: 100%;

      }


      .slider {

        -webkit-appearance: none;

        width: 50%;

        height: 15px;

        border-radius: 5px;

        background: rgb(102, 230, 17);

        outline: none;

        opacity: 0.5;

        -webkit-transition: .2s;

        transition: opacity .2s;

      }


      .slider:hover {

        opacity: 2;


      }

      

      .slider::-webkit-slider-thumb {

        -webkit-appearance: none;

        appearance: none;

        width: 25px;

        height: 25px;

        border-radius: 50%;

        background: rgb(26, 182, 202);

        cursor: pointer;

      }

      

      .slider::-moz-range-thumb {

        width: 25px;

        height: 25px;

        border-radius: 50%;

        background: #4CAF50;

        cursor: pointer;

      }

     

         /* Style the botton start stop */

   .btn{

   /* position: relative;

    border-radius: 15px 15px 15px 15px;

    width: 8%;

    height: 25px;

    border: none;

    outline: none;

    cursor: pointer;

    background: #fa1cb7;

    color: rgb(255, 255, 255);

    */

     background-color: #fa1cb7;

  color: white;

  padding: 14px 25px;

  text-align: center;

  text-decoration: none;

  display: inline-block;

   }


   a:link, a:visited {

  background-color: #f44336;

  color: white;

  padding: 14px 25px;

  text-align: center;

  text-decoration: none;

  display: inline-block;

}


a:hover, a:active {

  background-color: red;

}

       

        /* Style the footer */

   footer {

      background-color: rgb(43, 57, 255);

      padding: 8px;

      text-align: center;

      color: rgb(0, 255, 21);

      font-family: Comic Sans MS;

   }


    </style>

  </head>

  

  <body>

    <h1>ESP8266 NodeMCU Web Server Controlled Servo Motor</h1>

    <br><br>

    <div class="slidecontainer">

      <input type="range" min="0" max="180" value="50" class="slider" id="myRange">

      <p>Servo angle: <span id="demo"></span></p>

       <br><br>

      <label> Servo Sweep </label>

       <button type="button" onclick="sendData2(1)" class="btn">Start</button>

        <br><br>

        <label> 45 Degree Angle </label>

        <button type="button" onclick="sendData2(2)" class="btn">45 Degree</button>

         <br><br>

        <label> 90 Degree Angle </label>

        <button type="button" onclick="sendData2(3)" class="btn">90 Degree</button>

        <br><br>

        <label> 180 Degree Angle </label>

        <button type="button" onclick="sendData2(4)" class="btn">180 Degree</button>


      <label><span id="isiStatusSER1"></span></label>


    </div>

    

    <script>

      function sendData(pos) {

        var xhttp = new XMLHttpRequest();

        xhttp.onreadystatechange = function() {

          if (this.readyState == 4 && this.status == 200) {

            console.log(this.responseText);

          }

        };

        xhttp.open("GET", "setPOS?servoPOS="+pos, true);

        xhttp.send();

      } 

        /* fungsi send data on/off */

        function sendData2(StatusSer1) { 

        var xhttp = new XMLHttpRequest();

        xhttp.onreadystatechange = function() {

          if (this.readyState == 4 && this.status == 200) { 

            document.getElementById("SERstate1").innerHTML = this.responseText;     

          }

        };

        

        xhttp.open("GET", "setSER1?;SERstate1=" + StatusSer1, true);   

        xhttp.send();

        }


    /* fungsi read data on/off */

        function getDataSER1() {

        var xhttp = new XMLHttpRequest();

        xhttp.onreadystatechange = function() {

          if (this.readyState == 4 && this.status == 200) {

            document.getElementById("isiStatusSER1").innerHTML = this.responseText;

          }

        };

        xhttp.open("put", "readSER1", true);    

        xhttp.send();

        }

      var slider = document.getElementById("myRange");

      var output = document.getElementById("demo");

      output.innerHTML = slider.value;

      slider.oninput = function() {

        output.innerHTML = this.value;

        sendData(output.innerHTML);

      }


    </script>

     <br><br><br><br>

     <footer>

     <p>

       By FajarHimawan</br>

      </p>

     <p>Pls Subscribe my Channel</p>

     <a href="https://www.youtube.com/user/fajarhimawan" target="_blank">Subscribe</a>


    </footer>


  </body>


</html>

)=====";











Please Select Embedded Mode For Blogger Comments

Previous Post Next Post