Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Arduino demo source code for KC868-A4]-12 web server by wifi
#1
[Arduino IDE demo source code for KC868-A4]--#12-WEB_SERVER_CODE

.zip   KC868-A4_Web_Server.zip (Size: 454.76 KB / Downloads: 252)

   

Code:
/***********************************************************
* Create Your own WebServer for KC868-A4 Smart Controller*
* https://www.kincony.com                                **
***********************************************************/

// Load Wi-Fi library
#include <WiFi.h>
#include <WiFiManager.h>
#define TRIGGER_PIN 0   // reset wifi button
WiFiManager wm;
int timeout =20; // seconds to run for
// Replace with your network credentials
/*******config the WIFI by phone*****************/

/* const char* ssid     = "xxx"; //your router's ssid
const char* password = "yyy"; //your router's password*/
/*******************************************************/

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

int flag_read_di=0;

String relay1state = "off";// state of relay1
String relay2state = "off";// state of relay2
String relay3state = "off";// state of relay3
String relay4state = "off";// state of relay4



void setup() {

  pinMode(TRIGGER_PIN, INPUT_PULLUP); // wifi reset button
  Serial.begin(115200);
  pinMode(2,OUTPUT);
  pinMode(15,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(4,OUTPUT);
 

  pinMode(36,INPUT); 
  pinMode(39,INPUT);
  pinMode(27,INPUT);
  pinMode(14,INPUT);

  digitalWrite(2, HIGH);
  digitalWrite(15,HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(4, HIGH);
 

 
    WiFi.mode(WIFI_STA);
    wm.setConfigPortalTimeout(timeout);
     bool res;
       res = wm.autoConnect("KC868-A4-AP"); // anonymous ap
    if(!res) {
        Serial.println("Failed to connect");
    }
    else {
        //if you get here you have connected to the WiFi   
        Serial.println("connected...yeey :)");
    }  
 
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();

}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
      currentTime = millis();        
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
           
            // turns 16 relays on and off
                 if (header.indexOf("GET /1/on") >= 0)  {relay1state = "on"; digitalWrite(2, HIGH);}
            else if (header.indexOf("GET /1/off") >= 0) {relay1state = "off";digitalWrite(2, LOW);}
            else if (header.indexOf("GET /2/on") >= 0)  {relay2state = "on"; digitalWrite(15, HIGH);}
            else if (header.indexOf("GET /2/off") >= 0) {relay2state = "off";digitalWrite(15, LOW);}
            else if (header.indexOf("GET /3/on") >= 0)  {relay3state = "on"; digitalWrite(5, HIGH);}
            else if (header.indexOf("GET /3/off") >= 0) {relay3state = "off";digitalWrite(5, LOW);}        
            else if (header.indexOf("GET /4/on") >= 0)  {relay4state = "on"; digitalWrite(4, HIGH);}
            else if (header.indexOf("GET /4/off") >= 0) {relay4state = "off";digitalWrite(4, LOW);}
              
            else if (header.indexOf("GET /read") >= 0) flag_read_di=1;
            else if (header.indexOf("GET /all/on") >= 0)
            {
              relay1state = "on";// state of relay1
              relay2state = "on";// state of relay2
              relay3state = "on";// state of relay3
              relay4state = "on";// state of relay4
  digitalWrite(2, HIGH);
                digitalWrite(15,HIGH);
                digitalWrite(5, HIGH);
                digitalWrite(4, HIGH);
              
             
            }
            else if (header.indexOf("GET /all/off") >= 0)
            {
              relay1state = "off";// state of relay1
              relay2state = "off";// state of relay2
              relay3state = "off";// state of relay3
              relay4state = "off";// state of relay4

                digitalWrite(2, LOW);
                digitalWrite(15,LOW);
                digitalWrite(5, LOW);
                digitalWrite(4, LOW);
           
            }
           
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; border: 3px solid green;margin: 0px 15px;}");
            client.println(".button { background-color: #195B00; border-radius: 10px;color: white; padding: 10px 40px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px;text-align: center; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
           
            if (flag_read_di==1)
            {
              client.println(" relay1:" + relay1state + " relay2:" + relay2state + " relay3:" + relay3state + " relay4:" + relay4state );
            }
            else
            {
            // Web Page Heading
            client.println("<body><h1>KC868-A4 Web Server</h1>");


            // Display current state, and ON/OFF buttons for relay
            //client.println("<p>relay1 - State " + relay1state + "</p>");
            // If the relay is off, it displays the ON button     
            if (relay1state == "off") client.println("<a href=\"/1/on\"><button class=\"button\">01-OFF</button></a>"); else client.println("<a href=\"/1/off\"><button class=\"button\">01-ON </button></a>");
            if (relay2state == "off") client.println("<a href=\"/2/on\"><button class=\"button\">02-OFF</button></a>"); else client.println("<a href=\"/2/off\"><button class=\"button\">02-ON </button></a>");                                
            if (relay3state == "off") client.println("<a href=\"/3/on\"><button class=\"button\">03-OFF</button></a>"); else client.println("<a href=\"/3/off\"><button class=\"button\">03-ON </button></a>");
            if (relay4state == "off") client.println("<a href=\"/4/on\"><button class=\"button\">04-OFF</button></a>"); else client.println("<a href=\"/4/off\"><button class=\"button\">04-ON </button></a>");
                                         
  
              client.println("<a href=\"/all/on\"><button class=\"button\">All-ON</button></a>");
              client.println("<a href=\"/all/off\"><button class=\"button\">All-OFF</button></a>");
            } 
            client.println("</body></html>");
           
            // The HTTP response ends with another blank line
            client.println();
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
    flag_read_di=0;
  }

  ScanKey();            //scan key
  if ( digitalRead(TRIGGER_PIN) == LOW) {wm.resetSettings();ESP.restart();}
}

void ScanKey()           
{
 
    if(digitalRead(36) == LOW)         //key pressed
      {
        delay(20);                       
        if(digitalRead(36) == LOW)       //key pressed again
        {
          digitalWrite(2,!digitalRead(2));    // toggle relay1 state    
          while(digitalRead(36) == LOW); //wait remove hand
          if (digitalRead(2) == LOW) relay1state="on";else relay1state="off";
        }
      }

if(digitalRead(39) == LOW)         //key pressed
      {
        delay(20);                       
        if(digitalRead(39) == LOW)       //key pressed again
        {
          digitalWrite(15,!digitalRead(15));    // toggle relay1 state    
          while(digitalRead(39) == LOW); //wait remove hand
          if (digitalRead(15) == LOW) relay2state="on";else relay2state="off";
        }
      }

    if(digitalRead(27) == LOW)         //key pressed
      {
        delay(20);                       
        if(digitalRead(27) == LOW)       //key pressed again
        {
          digitalWrite(5,!digitalRead(5));    // toggle relay1 state    
          while(digitalRead(27) == LOW); //wait remove hand
          if (digitalRead(5) == LOW) relay3state="on";else relay3state="off";
        }
      } 
      if(digitalRead(14) == LOW)         //key pressed
          {
            delay(20);                       
            if(digitalRead(14) == LOW)       //key pressed again
            {
              digitalWrite(4,!digitalRead(4));    // toggle relay1 state    
              while(digitalRead(14) == LOW); //wait remove hand
              if (digitalRead(4) == LOW) relay4state="on";else relay4state="off";
            }
          }
 


}
Reply


Forum Jump:


Users browsing this thread:
1 Guest(s)