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

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 9,018
» Latest member: alinailyin
» Forum threads: 3,974
» Forum posts: 20,144

Full Statistics

Online Users
There are currently 20 online users.
» 0 Member(s) | 12 Guest(s)
Amazonbot, Baidu, PetalBot, bot

Latest Threads
Current and Power not add...
Forum: N60
Last Post: edalquist
10 hours ago
» Replies: 10
» Views: 268
Python and arduino code
Forum: News
Last Post: admin
Yesterday, 12:38 PM
» Replies: 1
» Views: 14
[SOLVED] N10 - no KWH sho...
Forum: N10
Last Post: admin
05-07-2026, 05:56 AM
» Replies: 7
» Views: 116
B24 Smart Controller Wiri...
Forum: B24
Last Post: admin
05-06-2026, 10:12 PM
» Replies: 2
» Views: 88
AIO Hybrid ESP32-S3 IO pi...
Forum: AIO Hybrid
Last Post: H_spadacini
05-06-2026, 10:03 AM
» Replies: 3
» Views: 590
T32M issue with Output 1
Forum: DIY Project
Last Post: BarbaraVikuvis
05-06-2026, 06:49 AM
» Replies: 4
» Views: 357
RTC DS3231 yaml code
Forum: KC868-A16v3
Last Post: admin
05-05-2026, 01:38 PM
» Replies: 1
» Views: 37
T64M PCB layout CAD file
Forum: Schematic & diagram & Dimensions of KinCony PCB layout CAD file
Last Post: admin
05-05-2026, 08:08 AM
» Replies: 0
» Views: 27
T16M PCB layout CAD file
Forum: Schematic & diagram & Dimensions of KinCony PCB layout CAD file
Last Post: admin
05-05-2026, 08:07 AM
» Replies: 0
» Views: 20
24V Pulse input
Forum: F16
Last Post: admin
05-05-2026, 04:23 AM
» Replies: 3
» Views: 27

  [Arduino demo source code for KC868-A4]-12 web server by wifi
Posted by: KinCony Support - 08-23-2022, 08:54 AM - Forum: KC868-A4 - No Replies

[Arduino IDE demo source code for KC868-A4]--#12-WEB_SERVER_CODE

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

   

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";
            }
          }
 


}

Print this item

  kbox android app updated
Posted by: admin - 08-23-2022, 12:37 AM - Forum: News - No Replies

add "clear cache" function in app. You can download from Google play store, search: KBOX smart
when change mqtt broker IP or domain name, you need to do "clear cache" .

Print this item

  KC868-H32BS V1.48 new firmware update
Posted by: admin - 08-23-2022, 12:35 AM - Forum: News - No Replies

improvement:

1. when mqtt broker or server restart, KC868-H32BS can auto connect to mqtt broker again without reboot. such as if home assistant updated new version, after home assistant reboot, H32BS can work well without reboot.


.zip   H32BS_V148_20220819.zip (Size: 53.47 KB / Downloads: 612)

Print this item

Question KC868-AG ESP32 315/433Mhz or only 433Mhz?
Posted by: greg - 08-21-2022, 11:35 PM - Forum: KC868-A series and Uair Smart Controller - Replies (5)

Hi Team, is the KC868-AG ESP32 both 315Mhz & 433Mhz? The Aliexpress listing says it's both 315Mhz & 433Mhz but I can't find any reference to 315Mhz in the documentation. Cheers!

Print this item

Sad KC868-H32B malfunctioned
Posted by: saun2000 - 08-21-2022, 09:26 PM - Forum: KC868-HxB series Smart Controller - Replies (9)

I was using this both KC868-H32B Relay modules with touch switches and MQTT with Home assistant. This was working fine. Suddenly one relay module reset to its ip address to 192.168.1.200 by itself and now nothing is working. Even touch switches are not working. I change the ip back to the existing one. but still doesn't work. Do you have any idea to fix this?

Print this item

  I2C Display to A4
Posted by: masoos - 08-16-2022, 10:16 PM - Forum: DIY Project - Replies (5)

Hello,
I need for my project a cheap 2 line display.
Please suggest me how to wire the SDA and SCL Line.
And maybe you have small code? that would be wonderful.
Thanks

Print this item

  [Arduino IDE demo source code for KC868-A32]--#07-web server
Posted by: admin - 08-16-2022, 05:35 AM - Forum: KC868-A32/A32 Pro - No Replies

Here is web server demo source code for KC868-A32, use WiFimanager library, easy to config router's ssid and password by webpage. GPIO0 (download button) have use for wifi reset.
[attachment=1260]
   



Attached Files
.zip   KC868-A32_Web_Server.zip (Size: 5.26 KB / Downloads: 1112)
Print this item

  KC868-A16 V1.5 I2C PCF8574 address updated
Posted by: admin - 08-16-2022, 04:52 AM - Forum: KC868-A16 - Replies (5)

some of KC868-A16 V1.5 hardware version, PCF8574 address is changed. (if you have seen PCB is V1.5 and have GREEN label, you need to use new address value)
before is :

Relay_IIC_address 0x24
Relay_IIC_address 0x25

Input_IIC_address 0x21
Input_IIC_address 0x22


new is :

Relay_IIC_address 0x3C
Relay_IIC_address 0x3D

Input_IIC_address 0x39
Input_IIC_address 0x3A

   

if you don't know your PCF8574 address, you can use this "I2C scan" arduino IDE source code to scan address, it will print value by serial port.

here is source code: 
.zip   i2c-scan-a16.zip (Size: 645 bytes / Downloads: 1074)

Print this item

  KC868-COL automatic control multi controllers by RS485 and RS232
Posted by: Sten - 08-13-2022, 07:27 AM - Forum: KC868-HxB series Smart Controller - Replies (5)

Hi

At this video (https://www.youtube.com/watch?v=Obo3YHj2...ex=24&t=2s) you show the way how to connect multi controllers by RS485 and RS232. My question is: Is there a TOGGLE function possible?
One digital input open and cclose relay (TOGGLE)?

Regards

Sten

Print this item

  KC868-E16S/E16P demo configure for ESPhome
Posted by: admin - 08-11-2022, 06:46 AM - Forum: KC868-E16S/E16P - Replies (24)


.txt   Made_for_ESPHome_KC868-E16S.txt (Size: 5.64 KB / Downloads: 889)

esphome:
  name: kc868-e16s
  platform: ESP32
  board: esp32dev
 
 
# Example configuration entry for ESP32
i2c:
  sda: 16
  scl: 15
  scan: true
  id: bus_a


# Example configuration entry
ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT
  phy_addr: 0

  # Optional manual IP
#  manual_ip:
#    static_ip: 192.168.1.199
#    gateway: 192.168.1.1
#    subnet: 255.255.255.0 


# Example configuration entry
pcf8574:
  - id: 'pcf8574_hub_out_1'  # for output channel 1-8
    address: 0x21

  - id: 'pcf8574_hub_out_2'  # for output channel 9-16
    address: 0x25

  - id: 'pcf8574_hub_in_1'  # for input channel 1-8
    address: 0x22

  - id: 'pcf8574_hub_in_2'  # for input channel 9-16
    address: 0x24

# Individual outputs
switch:
  - platform: gpio
    name: "e16s-output1"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 0
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "e16s-output2"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 1
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output3"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 2
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output4"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 3
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output5"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 4
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output6"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 5
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "e16s-output7"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 6
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output8"
    pin:
      pcf8574: pcf8574_hub_out_1
      number: 7
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output9"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 0
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "e16s-output10"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 1
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "e16s-output11"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 2
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output12"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 3
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output13"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 4
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output14"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 5
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output15"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 6
      mode: OUTPUT
      inverted: true
     
  - platform: gpio
    name: "e16s-output16"
    pin:
      pcf8574: pcf8574_hub_out_2
      number: 7
      mode: OUTPUT
      inverted: true
     
binary_sensor:
  - platform: gpio
    name: "e16s-input1"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 0
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input2"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 1
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input3"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 2
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input4"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 3
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input5"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 4
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input6"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 5
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input7"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 6
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input8"
    pin:
      pcf8574: pcf8574_hub_in_1
      number: 7
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input9"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 0
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input10"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 1
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input11"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 2
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input12"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 3
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input13"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 4
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input14"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 5
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input15"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 6
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "e16s-input16"
    pin:
      pcf8574: pcf8574_hub_in_2
      number: 7
      mode: INPUT
      inverted: true

# Enable logging
logger:

# Enable Home Assistant API
api:

Print this item