Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 5,374
» Latest member: tziku
» Forum threads: 2,577
» Forum posts: 13,327

Full Statistics

Online Users
There are currently 39 online users.
» 3 Member(s) | 24 Guest(s)
Bytespider, Crawl, Google, PetalBot, Yandex, bot, admin, ingersoj

Latest Threads
KC868-A2 configure yaml f...
Forum: KC868-A2
Last Post: admin
1 minute ago
» Replies: 16
» Views: 7,689
One input switch - turn o...
Forum: KinCony AS
Last Post: admin
6 minutes ago
» Replies: 1
» Views: 1
change wake up name
Forum: KinCony AS
Last Post: admin
7 minutes ago
» Replies: 15
» Views: 111
KC868-A8 Switch
Forum: KC868-A series and Uair Smart Controller
Last Post: admin
15 minutes ago
» Replies: 3
» Views: 36
H32L - home assistant
Forum: KC868-HxB series Smart Controller
Last Post: admin
17 minutes ago
» Replies: 1
» Views: 3
Problem with IFTTT automa...
Forum: "KCS" firmware system
Last Post: Poczwara13
2 hours ago
» Replies: 7
» Views: 66
how to use AS ESP32-S3 vo...
Forum: KinCony AS
Last Post: biofects
3 hours ago
» Replies: 14
» Views: 474
Kc868 a8 in workshop
Forum: KC868-A8
Last Post: Verresen
6 hours ago
» Replies: 0
» Views: 1
How can I power multiple ...
Forum: KC868-A series and Uair Smart Controller
Last Post: admin
Yesterday, 09:03 AM
» Replies: 12
» Views: 139
A32 Pro ESPHome yaml incl...
Forum: KC868-A32/A32 Pro
Last Post: admin
12-18-2024, 11:15 PM
» Replies: 18
» Views: 191

  KC868-H32BS with 20 channel "1 phase DC contactor" and KC868-COLB & switch
Posted by: admin - 08-24-2022, 06:22 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS with 20 channel "1 phase DC contactor" and KC868-COLB
Posted by: admin - 08-24-2022, 06:17 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-A16 work with KC868-E16 extend relay module
Posted by: admin - 08-24-2022, 06:14 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS work with KC868-E16 for 24v load
Posted by: admin - 08-24-2022, 06:13 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS work with 1 phase DC contactor control MAX 220V 25A load
Posted by: admin - 08-24-2022, 05:09 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS work with 1 phase DC contactor control MAX 220V 100A load
Posted by: admin - 08-24-2022, 05:08 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS work with 3 phase DC contactor for motor
Posted by: admin - 08-24-2022, 05:06 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  KC868-H32BS work with 1 phase DC contactor control MAX 220V 30A load
Posted by: admin - 08-24-2022, 05:02 AM - Forum: Schematic and diagram - No Replies

   

Print this item

  4-20mA convert use for 0-5v of KC868-COLB analog input
Posted by: admin - 08-24-2022, 05:00 AM - Forum: Schematic and diagram - No Replies

add 250 ohm resistance convert "current" to "voltage" signal.
   

Print this item

  [Arduino IDE demo source code for KC868-A32]--#07-KC868-A32_Web_server_code
Posted by: KinCony Support - 08-24-2022, 12:46 AM - Forum: KC868-A32/A32 Pro - Replies (14)

[Arduino IDE demo source code for KC868-A32]--#07-KC868-A32_Web_server_code

.zip   KC868-A32_Web_Server.zip (Size: 483.68 KB / Downloads: 310)

   

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

// Load Wi-Fi library
#include <WiFi.h>
#include "PCF8574.h"
#include <WiFiManager.h>
#define TRIGGER_PIN 0   // reset wifi button
WiFiManager wm;
int timeout =20; // seconds to run for
// Replace with your network credential
/*******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;

TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);

PCF8574 pcf8574_R1(&I2Ctwo, 0x24, 15, 13);
PCF8574 pcf8574_R2(&I2Ctwo, 0x25, 15, 13);
PCF8574 pcf8574_R3(&I2Ctwo, 0x21, 15, 13);
PCF8574 pcf8574_R4(&I2Ctwo, 0x22, 15, 13);

// Set digital input i2c address
PCF8574 pcf8574_I1(&I2Cone, 0x24, 4, 5);
PCF8574 pcf8574_I2(&I2Cone, 0x25, 4, 5);
PCF8574 pcf8574_I3(&I2Cone, 0x21, 4, 5);
PCF8574 pcf8574_I4(&I2Cone, 0x22, 4, 5);

String relaystate[32]={
  "relay1state","relay2state","relay3state","relay4state","relay5state","relay6state","relay7state","relay8state",
  "relay9state","relay10state","relay11state","relay12state","relay13state","relay14state","relay15state","relay16state",
  "relay17state","relay18state","relay19state","relay20state","relay21state","relay22state","relay23state","relay24state",
  "relay25state","relay26state","relay27state","relay18state","relay296state","relay30state","relay31state","relay32state",
};
String relay1state = "off";// state of relay1
String relay2state = "off";// state of relay2
String relay3state = "off";// state of relay3
String relay4state = "off";// state of relay4
String relay5state = "off";// state of relay5
String relay6state = "off";// state of relay6
String relay7state = "off";// state of relay7
String relay8state = "off";// state of relay8

String relay9state = "off";// state of relay9
String relay10state = "off";// state of relay10
String relay11state = "off";// state of relay11
String relay12state = "off";// state of relay12
String relay13state = "off";// state of relay13
String relay14state = "off";// state of relay14
String relay15state = "off";// state of relay15
String relay16state = "off";// state of relay16

String relay17state = "off";// state of relay17
String relay18state = "off";// state of relay18
String relay19state = "off";// state of relay19
String relay20state = "off";// state of relay20
String relay21state = "off";// state of relay21
String relay22state = "off";// state of relay22
String relay23state = "off";// state of relay23
String relay24state = "off";// state of relay24

String relay25state = "off";// state of relay25
String relay26state = "off";// state of relay26
String relay27state = "off";// state of relay27
String relay28state = "off";// state of relay28
String relay29state = "off";// state of relay29
String relay30state = "off";// state of relay30
String relay31state = "off";// state of relay31
String relay32state = "off";// state of relay32


void setup() {

  pinMode(TRIGGER_PIN, INPUT_PULLUP); // wifi reset button
  Serial.begin(115200);

  // Set PCF8574 pinMode to OUTPUT
  for(int i=0;i<=7;i++)
  {
     pcf8574_R1.pinMode(i, OUTPUT);
     pcf8574_R2.pinMode(i, OUTPUT);
     pcf8574_R3.pinMode(i, OUTPUT);
     pcf8574_R4.pinMode(i, OUTPUT);
  }
  pcf8574_R1.begin();
  pcf8574_R2.begin();
  pcf8574_R3.begin();
  pcf8574_R4.begin();
 
  for(int i=0;i<=7;i++){
  pcf8574_I1.pinMode(i, INPUT);
  pcf8574_I2.pinMode(i, INPUT);
  pcf8574_I3.pinMode(i, INPUT);
  pcf8574_I4.pinMode(i, INPUT);
}

pcf8574_I1.begin();
pcf8574_I2.begin();
pcf8574_I3.begin();
pcf8574_I4.begin();

  for(int i=0;i<=7;i++)
  {
    pcf8574_R1.digitalWrite(i, HIGH);
    pcf8574_R2.digitalWrite(i, HIGH);
    pcf8574_R3.digitalWrite(i, HIGH);
    pcf8574_R4.digitalWrite(i, HIGH);
   
  }
// Connect to Wi-Fi network with SSID and password
// Serial.print("Connecting to ");
// Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  //WiFi.begin(ssid, password);
    wm.setConfigPortalTimeout(timeout);
     bool res;
    // res = wm.autoConnect(); // auto generated AP name from chipid
       res = wm.autoConnect("KC868-A32-AP"); // anonymous ap
   //  res = wm.autoConnect("AutoConnectAP","password"); // password protected ap

    if(!res) {
        Serial.println("Failed to connect");
        // ESP.restart();
    }
    else {
        //if you get here you have connected to the WiFi   
        Serial.println("connected...yeey :)");
    }   
 
  /*while (WiFi.status() != WL_CONNECTED) {
     // delay(10);
    //Serial.print(".");
    ScanKey();            //scan key
    if ( digitalRead(TRIGGER_PIN) == LOW) {wm.resetSettings();ESP.restart();}

  }*/
  // 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";pcf8574_R1.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /1/off") >= 0) {relay1state = "off";pcf8574_R1.digitalWrite(P0, HIGH);}
            else if (header.indexOf("GET /2/on") >= 0)  {relay2state = "on";pcf8574_R1.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /2/off") >= 0) {relay2state = "off";pcf8574_R1.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /3/on") >= 0)  {relay3state = "on";pcf8574_R1.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /3/off") >= 0) {relay3state = "off";pcf8574_R1.digitalWrite(P2, HIGH);}         
            else if (header.indexOf("GET /4/on") >= 0)  {relay4state = "on";pcf8574_R1.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /4/off") >= 0) {relay4state = "off";pcf8574_R1.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /5/on") >= 0)  {relay5state = "on";pcf8574_R1.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /5/off") >= 0) {relay5state = "off";pcf8574_R1.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /6/on") >= 0)  {relay6state = "on";pcf8574_R1.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /6/off") >= 0) {relay6state = "off";pcf8574_R1.digitalWrite(P5, HIGH);}         
            else if (header.indexOf("GET /7/on") >= 0)  {relay7state = "on";pcf8574_R1.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /7/off") >= 0) {relay7state = "off";pcf8574_R1.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /8/on") >= 0)  {relay8state = "on";pcf8574_R1.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /8/off") >= 0) {relay8state = "off";pcf8574_R1.digitalWrite(P7, HIGH);}
            else if (header.indexOf("GET /9/on") >= 0)  {relay9state = "on";pcf8574_R2.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /9/off") >= 0) {relay9state = "off";pcf8574_R2.digitalWrite(P0, HIGH);}         
            else if (header.indexOf("GET /10/on") >= 0)  {relay10state = "on";pcf8574_R2.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /10/off") >= 0) {relay10state = "off";pcf8574_R2.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /11/on") >= 0)  {relay11state = "on";pcf8574_R2.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /11/off") >= 0) {relay11state = "off";pcf8574_R2.digitalWrite(P2, HIGH);}
            else if (header.indexOf("GET /12/on") >= 0)  {relay12state = "on";pcf8574_R2.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /12/off") >= 0) {relay12state = "off";pcf8574_R2.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /13/on") >= 0)  {relay13state = "on";pcf8574_R2.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /13/off") >= 0) {relay13state = "off";pcf8574_R2.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /14/on") >= 0)  {relay14state = "on";pcf8574_R2.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /14/off") >= 0) {relay14state = "off";pcf8574_R2.digitalWrite(P5, HIGH);}
            else if (header.indexOf("GET /15/on") >= 0)  {relay15state = "on";pcf8574_R2.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /15/off") >= 0) {relay15state = "off";pcf8574_R2.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /16/on") >= 0)  {relay16state = "on";pcf8574_R2.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /16/off") >= 0) {relay16state = "off";pcf8574_R2.digitalWrite(P7, HIGH);}
            else if (header.indexOf("GET /17/on") >= 0)  {relay17state = "on";pcf8574_R3.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /17/off") >= 0) {relay17state = "off";pcf8574_R3.digitalWrite(P0, HIGH);}
            else if (header.indexOf("GET /18/on") >= 0)  {relay18state = "on";pcf8574_R3.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /18/off") >= 0) {relay18state = "off";pcf8574_R3.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /19/on") >= 0)  {relay19state = "on";pcf8574_R3.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /19/off") >= 0) {relay19state = "off";pcf8574_R3.digitalWrite(P2, HIGH);}
            else if (header.indexOf("GET /20/on") >= 0)  {relay20state = "on";pcf8574_R3.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /20/off") >= 0) {relay20state = "off";pcf8574_R3.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /21/on") >= 0)  {relay21state = "on";pcf8574_R3.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /21/off") >= 0) {relay21state = "off";pcf8574_R3.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /22/on") >= 0)  {relay22state = "on";pcf8574_R3.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /22/off") >= 0) {relay22state = "off";pcf8574_R3.digitalWrite(P5, HIGH);}
            else if (header.indexOf("GET /23/on") >= 0)  {relay23state = "on";pcf8574_R3.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /23/off") >= 0) {relay23state = "off";pcf8574_R3.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /24/on") >= 0)  {relay24state = "on";pcf8574_R3.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /24/off") >= 0) {relay24state = "off";pcf8574_R3.digitalWrite(P7, HIGH);}
            else if (header.indexOf("GET /25/on") >= 0)  {relay25state = "on";pcf8574_R4.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /25/off") >= 0) {relay25state = "off";pcf8574_R4.digitalWrite(P0, HIGH);}
            else if (header.indexOf("GET /26/on") >= 0)  {relay26state = "on";pcf8574_R4.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /26/off") >= 0) {relay26state = "off";pcf8574_R4.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /27/on") >= 0)  {relay27state = "on";pcf8574_R4.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /27/off") >= 0) {relay27state = "off";pcf8574_R4.digitalWrite(P2, HIGH);}
            else if (header.indexOf("GET /28/on") >= 0)  {relay28state = "on";pcf8574_R4.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /28/off") >= 0) {relay28state = "off";pcf8574_R4.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /29/on") >= 0)  {relay29state = "on";pcf8574_R4.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /29/off") >= 0) {relay29state = "off";pcf8574_R4.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /30/on") >= 0)  {relay30state = "on";pcf8574_R4.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /30/off") >= 0) {relay30state = "off";pcf8574_R4.digitalWrite(P5, HIGH);}
            else if (header.indexOf("GET /31/on") >= 0)  {relay31state = "on";pcf8574_R4.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /31/off") >= 0) {relay31state = "off";pcf8574_R4.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /32/on") >= 0)  {relay32state = "on";pcf8574_R4.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /32/off") >= 0) {relay32state = "off";pcf8574_R4.digitalWrite(P7, HIGH);}
            else if (header.indexOf("GET /read") >= 0) flag_read_di=1;
            else if (header.indexOf("GET /all/on") >= 0)
            {
               /* for(int i=0;i<32;i++)
              {
                relaystate[i]="on";
              }*/
              relay1state = "on";// state of relay1
              relay2state = "on";// state of relay2
              relay3state = "on";// state of relay3
              relay4state = "on";// state of relay4
              relay5state = "on";// state of relay5
              relay6state = "on";// state of relay6
              relay7state = "on";// state of relay7
              relay8state = "on";// state of relay8

              relay9state = "on";// state of relay9
              relay10state = "on";// state of relay10
              relay11state = "on";// state of relay11
              relay12state = "on";// state of relay12
              relay13state = "on";// state of relay13
              relay14state = "on";// state of relay14
              relay15state = "on";// state of relay15
              relay16state = "on";// state of relay16

              relay17state = "on";// state of relay1
              relay18state = "on";// state of relay2
              relay19state = "on";// state of relay3
              relay20state = "on";// state of relay4
              relay21state = "on";// state of relay5
              relay22state = "on";// state of relay6
              relay23state = "on";// state of relay7
              relay24state = "on";// state of relay8

              relay25state = "on";// state of relay9
              relay26state = "on";// state of relay10
              relay27state = "on";// state of relay11
              relay28state = "on";// state of relay12
              relay29state = "on";// state of relay13
              relay30state = "on";// state of relay14
              relay31state = "on";// state of relay15
              relay32state = "on";// state of relay16


              for(int i=0;i<=7;i++)
              {
                 pcf8574_R1.digitalWrite(i,LOW);
                 pcf8574_R2.digitalWrite(i,LOW);
                 pcf8574_R3.digitalWrite(i,LOW);
                 pcf8574_R4.digitalWrite(i,LOW);
              }
            }
            else if (header.indexOf("GET /all/off") >= 0)
            {
              /*for(int i=0;i<32;i++)
              {
                relaystate[i]="off";
              }*/
              relay1state = "off";// state of relay1
              relay2state = "off";// state of relay2
              relay3state = "off";// state of relay3
              relay4state = "off";// state of relay4
              relay5state = "off";// state of relay5
              relay6state = "off";// state of relay6
              relay7state = "off";// state of relay7
              relay8state = "off";// state of relay8

              relay9state = "off";// state of relay9
              relay10state = "off";// state of relay10
              relay11state = "off";// state of relay11
              relay12state = "off";// state of relay12
              relay13state = "off";// state of relay13
              relay14state = "off";// state of relay14
              relay15state = "off";// state of relay15
              relay16state = "off";// state of relay16

              relay17state = "off";// state of relay1
              relay18state = "off";// state of relay2
              relay19state = "off";// state of relay3
              relay20state = "off";// state of relay4
              relay21state = "off";// state of relay5
              relay22state = "off";// state of relay6
              relay23state = "off";// state of relay7
              relay24state = "off";// state of relay8

              relay25state = "off";// state of relay9
              relay26state = "off";// state of relay10
              relay27state = "off";// state of relay11
              relay28state = "off";// state of relay12
              relay29state = "off";// state of relay13
              relay30state = "off";// state of relay14
              relay31state = "off";// state of relay15
              relay32state = "off";// state of relay16


              for(int i=0;i<=7;i++)
              {
                 pcf8574_R1.digitalWrite(i, HIGH);
                 pcf8574_R2.digitalWrite(i, HIGH);
                 pcf8574_R3.digitalWrite(i, HIGH);
                 pcf8574_R4.digitalWrite(i, HIGH);
              }         
            }
           
            // 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; margin: 0px auto; text-align: center;}");
            //client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            //client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");

            client.println(".button { background-color: #195B10; border: none; color: white; padding: 16px 40px;");
           
            client.println("text-decoration: none; font-size: 35px; margin: 2px; 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 + " relay5:" + relay5state + " relay6:" + relay6state + " relay7:" + relay7state + " relay8:" + relay8state + " relay9:" + relay9state + " relay10:" + relay10state + " relay11:" + relay11state + " relay12:" + relay12state + " relay13:" + relay13state + " relay14:" + relay14state + " relay15:" + relay15state + " relay16:" + relay16state + " relay17:" + relay17state + " relay18:" + relay18state + " relay19:" + relay19state + " relay20:" + relay20state + " relay21:" + relay21state + " relay22:" + relay22state + " relay23:" + relay23state + " relay24:" + relay24state + " relay25:" + relay25state + " relay26:" + relay26state + " relay27:" + relay27state + " relay28:" + relay28state + " relay29:" + relay29state + " relay30:" + relay30state + " relay31:" + relay31state + " relay32:" + relay32state);
            }
            else
            {
            // Web Page Heading
           client.println("<body><h1>KC868-A32 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>");
            if (relay5state == "off") client.println("<a href=\"/5/on\"><button class=\"button\">05-OFF</button></a>"); else client.println("<a href=\"/5/off\"><button class=\"button\">05-ON </button></a>");
            if (relay6state == "off") client.println("<a href=\"/6/on\"><button class=\"button\">06-OFF</button></a>"); else client.println("<a href=\"/6/off\"><button class=\"button\">06-ON </button></a>");                                 
            if (relay7state == "off") client.println("<a href=\"/7/on\"><button class=\"button\">07-OFF</button></a>"); else client.println("<a href=\"/7/off\"><button class=\"button\">07-ON </button></a>");
            if (relay8state == "off") client.println("<a href=\"/8/on\"><button class=\"button\">08-OFF</button></a>"); else client.println("<a href=\"/8/off\"><button class=\"button\">08-ON </button></a>");
            if (relay9state == "off") client.println("<a href=\"/9/on\"><button class=\"button\">09-OFF</button></a>"); else client.println("<a href=\"/9/off\"><button class=\"button\">09-ON </button></a>");
            if (relay10state == "off") client.println("<a href=\"/10/on\"><button class=\"button\">10-OFF</button></a>"); else client.println("<a href=\"/10/off\"><button class=\"button\">10-ON</button></a>");                                 
            if (relay11state == "off") client.println("<a href=\"/11/on\"><button class=\"button\">11-OFF</button></a>"); else client.println("<a href=\"/11/off\"><button class=\"button\">11-ON</button></a>");
            if (relay12state == "off") client.println("<a href=\"/12/on\"><button class=\"button\">12-OFF</button></a>"); else client.println("<a href=\"/12/off\"><button class=\"button\">12-ON</button></a>");
            if (relay13state == "off") client.println("<a href=\"/13/on\"><button class=\"button\">13-OFF</button></a>"); else client.println("<a href=\"/13/off\"><button class=\"button\">13-ON</button></a>");
            if (relay14state == "off") client.println("<a href=\"/14/on\"><button class=\"button\">14-OFF</button></a>"); else client.println("<a href=\"/14/off\"><button class=\"button\">14-ON</button></a>");                                 
            if (relay15state == "off") client.println("<a href=\"/15/on\"><button class=\"button\">15-OFF</button></a>"); else client.println("<a href=\"/15/off\"><button class=\"button\">15-ON</button></a>");
            if (relay16state == "off") client.println("<a href=\"/16/on\"><button class=\"button\">16-OFF</button></a>"); else client.println("<a href=\"/16/off\"><button class=\"button\">16-ON</button></a>");
            if (relay17state == "off") client.println("<a href=\"/17/on\"><button class=\"button\">17-OFF</button></a>"); else client.println("<a href=\"/17/off\"><button class=\"button\">17-ON</button></a>");
            if (relay18state == "off") client.println("<a href=\"/18/on\"><button class=\"button\">18-OFF</button></a>"); else client.println("<a href=\"/18/off\"><button class=\"button\">18-ON</button></a>");
            if (relay19state == "off") client.println("<a href=\"/19/on\"><button class=\"button\">19-OFF</button></a>"); else client.println("<a href=\"/19/off\"><button class=\"button\">19-ON</button></a>");
            if (relay20state == "off") client.println("<a href=\"/20/on\"><button class=\"button\">20-OFF</button></a>"); else client.println("<a href=\"/20/off\"><button class=\"button\">20-ON</button></a>");
            if (relay21state == "off") client.println("<a href=\"/21/on\"><button class=\"button\">21-OFF</button></a>"); else client.println("<a href=\"/21/off\"><button class=\"button\">21-ON</button></a>");
            if (relay22state == "off") client.println("<a href=\"/22/on\"><button class=\"button\">22-OFF</button></a>"); else client.println("<a href=\"/22/off\"><button class=\"button\">22-ON</button></a>");
            if (relay23state == "off") client.println("<a href=\"/23/on\"><button class=\"button\">23-OFF</button></a>"); else client.println("<a href=\"/23/off\"><button class=\"button\">23-ON</button></a>");
            if (relay24state == "off") client.println("<a href=\"/24/on\"><button class=\"button\">24-OFF</button></a>"); else client.println("<a href=\"/24/off\"><button class=\"button\">24-ON</button></a>");
            if (relay25state == "off") client.println("<a href=\"/25/on\"><button class=\"button\">25-OFF</button></a>"); else client.println("<a href=\"/25/off\"><button class=\"button\">25-ON</button></a>");
            if (relay26state == "off") client.println("<a href=\"/26/on\"><button class=\"button\">26-OFF</button></a>"); else client.println("<a href=\"/26/off\"><button class=\"button\">26-ON</button></a>");
            if (relay27state == "off") client.println("<a href=\"/27/on\"><button class=\"button\">27-OFF</button></a>"); else client.println("<a href=\"/27/off\"><button class=\"button\">27-ON</button></a>");
            if (relay28state == "off") client.println("<a href=\"/28/on\"><button class=\"button\">28-OFF</button></a>"); else client.println("<a href=\"/28/off\"><button class=\"button\">28-ON</button></a>");
            if (relay29state == "off") client.println("<a href=\"/29/on\"><button class=\"button\">29-OFF</button></a>"); else client.println("<a href=\"/29/off\"><button class=\"button\">29-ON</button></a>");
            if (relay30state == "off") client.println("<a href=\"/30/on\"><button class=\"button\">30-OFF</button></a>"); else client.println("<a href=\"/30/off\"><button class=\"button\">30-ON</button></a>");
            if (relay31state == "off") client.println("<a href=\"/31/on\"><button class=\"button\">31-OFF</button></a>"); else client.println("<a href=\"/31/off\"><button class=\"button\">31-ON</button></a>");
            if (relay32state == "off") client.println("<a href=\"/32/on\"><button class=\"button\">32-OFF</button></a>"); else client.println("<a href=\"/32/off\"><button class=\"button\">32-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 out of the while loop
            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()           
{
  for(int i=0;i<=7;i++)
  {
    if(pcf8574_I1.digitalRead(i) == LOW)         //key pressed
      {
        delay(20);                       
        if(pcf8574_I1.digitalRead(i) == LOW)       //key pressed again
        {
          pcf8574_R1.digitalWrite(i,!pcf8574_R1.digitalRead(i));    // toggle relay1 state     
          while(pcf8574_I1.digitalRead(i) == LOW); //wait remove hand
          if (pcf8574_R1.digitalRead(i) == LOW) relaystate[i+1]="on";else relaystate[i+1]="off";
        }
      }
  }

    for(int i=0;i<=7;i++)
  {
    if(pcf8574_I2.digitalRead(i) == LOW)         //key pressed
      {
        delay(20);                       
        if(pcf8574_I2.digitalRead(i) == LOW)       //key pressed again
        {
          pcf8574_R2.digitalWrite(i,!pcf8574_R2.digitalRead(i));    // toggle relay1 state     
          while(pcf8574_I2.digitalRead(i) == LOW); //wait remove hand
          if (pcf8574_R2.digitalRead(i) == LOW) relaystate[i+9]="on";else relaystate[i+9]="off";
       
        }
      }
  }

    for(int i=0;i<=7;i++)
  {
    if(pcf8574_I3.digitalRead(i) == LOW)         //key pressed
      {
        delay(20);                       
        if(pcf8574_I3.digitalRead(i) == LOW)       //key pressed again
        {
          pcf8574_R3.digitalWrite(i,!pcf8574_R3.digitalRead(i));    // toggle relay1 state     
          while(pcf8574_I3.digitalRead(i) == LOW); //wait remove hand
          if (pcf8574_R3.digitalRead(i) == LOW) relaystate[i+17]="on";else relaystate[i+17]="off";
       
        }
      }
  }
     for(int i=0;i<=7;i++)
  {
    if(pcf8574_I4.digitalRead(i) == LOW)         //key pressed
      {
        delay(20);                       
        if(pcf8574_I4.digitalRead(i) == LOW)       //key pressed again
        {
          pcf8574_R4.digitalWrite(i,!pcf8574_R4.digitalRead(i));    // toggle relay1 state     
          while(pcf8574_I4.digitalRead(i) == LOW); //wait remove hand
          if (pcf8574_R4.digitalRead(i) == LOW) relaystate[i+25]="on";else relaystate[i+25]="off";
       
        }
      }
  }

}

Print this item