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

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 8,252
» Latest member: elektrodiag
» Forum threads: 3,612
» Forum posts: 18,614

Full Statistics

Online Users
There are currently 27 online users.
» 0 Member(s) | 12 Guest(s)
AhrefsBot, Amazonbot, Applebot, Bing, PetalBot, bot, github.com

Latest Threads
how to integrate KC868-A8...
Forum: KC868-A8
Last Post: admin
8 hours ago
» Replies: 43
» Views: 7,002
KC868-A2 SIM7600 with Tuy...
Forum: KC868-A2
Last Post: admin
8 hours ago
» Replies: 32
» Views: 3,199
RF doesnt show up?
Forum: KC868-A16v3
Last Post: Borg357
10 hours ago
» Replies: 2
» Views: 20
KC868-A16 rs485
Forum: KC868-A16
Last Post: admin
Yesterday, 02:21 PM
» Replies: 7
» Views: 72
Some bugs in Home Assista...
Forum: N60
Last Post: admin
Yesterday, 12:29 AM
» Replies: 1
» Views: 20
B16 mqtt code
Forum: B16
Last Post: admin
12-12-2025, 01:31 PM
» Replies: 1
» Views: 14
OPC UA Server for KC868-A...
Forum: DIY Project
Last Post: aksurd
12-12-2025, 04:05 AM
» Replies: 0
» Views: 37
N20 ESPHome & HA - Line t...
Forum: N20
Last Post: WestCoastXS
12-12-2025, 03:26 AM
» Replies: 2
» Views: 21
Low Level Relay Trigger
Forum: KC868-A16v3
Last Post: admin
12-12-2025, 01:41 AM
» Replies: 5
» Views: 50
KC868-A16v3 ESPHome yaml ...
Forum: KC868-A16v3
Last Post: hans-martijn
12-11-2025, 09:38 PM
» Replies: 10
» Views: 4,018

  PCB dimensions & STP model
Posted by: MrRon - 06-23-2025, 06:26 PM - Forum: KC868-A2 - Replies (4)

Hello,
i would like to create a custom case for the KC868-A2 board and i would like to know if kincony can provide the mechanical drawings of the board and STP files

Print this item

  AG8 + Daikin AC
Posted by: tenabiker - 06-23-2025, 10:27 AM - Forum: KC868-AG / AG Pro / AG8 / Z1 - Replies (1)

Need some help for Daikin AC control with AG8.

First tried ESP Home firmware using Daikin_ARC  for ESPHome.
Unfortunatelly it was not able to controll the AC Unit.
Them, tried all other Daikin AC for ESP Home (Daikin_BRC and simple Daikin)
None of them worked.

I also flashed AG8 with KCS firmware, but when learning is done, it says SUCEEDED but no code is shown. After trying to send code to AC Unit, it does not work either.

In  the back of AC remote control, it says ARC452A10.

What else can I do ?

Print this item

  [arduino code examples for T128M]-08 read analog input ports
Posted by: admin - 06-23-2025, 05:41 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* Description:
* This Arduino program reads analog values from four analog input pins (A1, A2, A3, A4)
* and prints the values to the Serial Monitor. The analog inputs are defined with specific
* GPIO pins and the program reads the voltage levels from these pins every 2 seconds.
*
* Pin Definitions:
* - A1: GPIO 7
* - A2: GPIO 6
* - A3: GPIO 5
* - A4: GPIO 4
*/

#define ANALOG_A1   7   // Define GPIO pin for analog input A1
#define ANALOG_A2   6   // Define GPIO pin for analog input A2
#define ANALOG_A3   5   // Define GPIO pin for analog input A3
#define ANALOG_A4   4   // Define GPIO pin for analog input A4

void setup()
{
    Serial.begin(115200); // Initialize serial communication at 115200 baud rate
    delay(500); // Short delay to allow serial communication to start

    pinMode(ANALOG_A1, INPUT); // Set GPIO 5 as an input for analog signal A1
    pinMode(ANALOG_A2, INPUT); // Set GPIO 7 as an input for analog signal A2
    pinMode(ANALOG_A3, INPUT); // Set GPIO 6 as an input for analog signal A3
    pinMode(ANALOG_A4, INPUT); // Set GPIO 4 as an input for analog signal A4
}

void loop()
{
    // Read and print analog values from the defined pins
    Serial.print("A1=");
    Serial.println(analogRead(ANALOG_A1)); // Read and print the value from A1
    Serial.print("A2=");
    Serial.println(analogRead(ANALOG_A2)); // Read and print the value from A2
    Serial.print("A3=");
    Serial.println(analogRead(ANALOG_A3)); // Read and print the value from A3
    Serial.print("A4=");
    Serial.println(analogRead(ANALOG_A4)); // Read and print the value from A4
   
    delay(2000); // Wait for 2 seconds before the next reading
}
arduino ino file download:

.zip   8-analog-input.zip (Size: 768 bytes / Downloads: 287)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   8-analog-input.ino.merged.zip (Size: 187.19 KB / Downloads: 239)

Print this item

  [arduino code examples for T128M]-07 i2c scanner search online devices
Posted by: admin - 06-23-2025, 05:40 AM - Forum: T128M - No Replies

Code:
// Made by KinCony IoT: https://www.kincony.com
// This sketch scans two I2C buses and prints all detected device addresses.
// IIC Bus-1: SDA - GPIO48, SCL - GPIO47
// IIC Bus-2: SDA - GPIO12, SCL - GPIO11

#include <Wire.h>

// Create two I2C bus objects
TwoWire I2C_BUS1 = TwoWire(0);
TwoWire I2C_BUS2 = TwoWire(1);

// Scan function for a specific I2C bus
void scanI2CBus(TwoWire &bus, const char* busName) {
  Serial.println();
  Serial.print("Scanning ");
  Serial.print(busName);
  Serial.println(" at 100kHz...");

  byte error, address;
  int nDevices = 0;

  for (address = 1; address < 127; address++) {
    bus.beginTransmission(address);
    error = bus.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  ✓");
      nDevices++;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }

  if (nDevices == 0)
    Serial.println("No I2C devices found.");
  else
    Serial.println("Scan completed.");
}

void setup() {
  Serial.begin(115200);
  delay(1000); // Wait for serial to initialize

  // Initialize IIC Bus-1 (GPIO48 = SDA, GPIO47 = SCL) at 100kHz
  I2C_BUS1.begin(48, 47);

  // Initialize IIC Bus-2 (GPIO12 = SDA, GPIO11 = SCL) at 100kHz
  I2C_BUS2.begin(12, 11);

  // Start scanning both buses
  scanI2CBus(I2C_BUS1, "IIC Bus-1");
  scanI2CBus(I2C_BUS2, "IIC Bus-2");
}

void loop() {
  // Nothing to do in the loop
}
arduino ino file download:

.zip   7-i2c-scanner.zip (Size: 841 bytes / Downloads: 265)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   7-i2c-scanner.ino.merged.zip (Size: 192.17 KB / Downloads: 255)

Print this item

  [arduino code examples for T128M]-06 digital INPUT trigger OUTPUT directly
Posted by: admin - 06-23-2025, 05:39 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* This Arduino program reads 128 input channels from 8 PCF8575 modules on I2C Bus-2
* and controls 128 output channels on 8 PCF8575 modules on I2C Bus-1.
* When an input pin is pulled LOW (connected to GND), the corresponding output relay is turned ON (LOW).
* Otherwise, the relay is turned OFF (HIGH).
*
* I2C Bus-1 (Outputs):
* - SDA: GPIO 48
* - SCL: GPIO 47
* - Output1~16    : 0x27
* - Output17~32   : 0x26
* - Output33~48   : 0x23
* - Output49~64   : 0x22
* - Output65~80   : 0x25
* - Output81~96   : 0x24
* - Output97~112  : 0x21
* - Output113~128 : 0x20
*
* I2C Bus-2 (Inputs):
* - SDA: GPIO 12
* - SCL: GPIO 11
* - Input1~16     : 0x27
* - Input17~32    : 0x26
* - Input33~48    : 0x23
* - Input49~64    : 0x22
* - Input65~80    : 0x25
* - Input81~96    : 0x24
* - Input97~112   : 0x21
* - Input113~128  : 0x20
*/

#include <Wire.h>
#include <PCF8575.h>

// Define two I2C buses for independent input/output communication
TwoWire I2C_Output = TwoWire(0); // Bus 1 - Outputs
TwoWire I2C_Input  = TwoWire(1); // Bus 2 - Inputs

// === Output PCF8575 instances ===
PCF8575 output_1(0x27, &I2C_Output);  // Output 1~16
PCF8575 output_2(0x26, &I2C_Output);  // Output 17~32
PCF8575 output_3(0x23, &I2C_Output);  // Output 33~48
PCF8575 output_4(0x22, &I2C_Output);  // Output 49~64
PCF8575 output_5(0x25, &I2C_Output);  // Output 65~80
PCF8575 output_6(0x24, &I2C_Output);  // Output 81~96
PCF8575 output_7(0x21, &I2C_Output);  // Output 97~112
PCF8575 output_8(0x20, &I2C_Output);  // Output 113~128

// === Input PCF8575 instances ===
PCF8575 input_1(0x27, &I2C_Input);  // Input 1~16
PCF8575 input_2(0x26, &I2C_Input);  // Input 17~32
PCF8575 input_3(0x23, &I2C_Input);  // Input 33~48
PCF8575 input_4(0x22, &I2C_Input);  // Input 49~64
PCF8575 input_5(0x25, &I2C_Input);  // Input 65~80
PCF8575 input_6(0x24, &I2C_Input);  // Input 81~96
PCF8575 input_7(0x21, &I2C_Input);  // Input 97~112
PCF8575 input_8(0x20, &I2C_Input);  // Input 113~128

// === Create arrays for easy loop access ===
PCF8575* inputArray[8] = {
  &input_1, &input_2, &input_3, &input_4,
  &input_5, &input_6, &input_7, &input_8
};

PCF8575* outputArray[8] = {
  &output_1, &output_2, &output_3, &output_4,
  &output_5, &output_6, &output_7, &output_8
};

void setup() {
  Serial.begin(115200);
  Serial.println("KinCony 128-Channel Input-Output Mapping Test");

  // Initialize both I2C buses
  I2C_Output.begin(48, 47);  // SDA: GPIO48, SCL: GPIO47
  I2C_Input.begin(12, 11);   // SDA: GPIO12, SCL: GPIO11

  // Initialize all PCF8575 chips and set initial output states
  for (int i = 0; i < 8; i++) {
    inputArray[i]->begin();   // Initialize input chip
    outputArray[i]->begin();  // Initialize output chip

    // Set all output pins HIGH (relay OFF)
    for (int j = 0; j < 16; j++) {
      outputArray[i]->write(j, HIGH);
    }
  }
}

void loop() {
  for (int chip = 0; chip < 8; chip++) {
    for (int pin = 0; pin < 16; pin++) {
      bool inputState = inputArray[chip]->read(pin);

      // If input is LOW (button pressed or contact closed), turn ON relay (set output LOW)
      // Otherwise, turn OFF relay (set output HIGH)
      outputArray[chip]->write(pin, inputState ? HIGH : LOW);
    }
  }

  delay(200); // Delay to prevent I2C bus flooding
}
arduino ino file download:

.zip   6-input-trigger-output.zip (Size: 1.33 KB / Downloads: 279)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   6-input-trigger-output.ino.merged.zip (Size: 192.36 KB / Downloads: 266)

Print this item

  [arduino code examples for T128M]-05 Ethernet W5500 chip work with TCP Server mode
Posted by: admin - 06-23-2025, 05:38 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* This Arduino program sets up an ESP32-S3 with a W5500 Ethernet module
* as a TCP server. It listens on port 4196 and echoes back any string
* received from a client.
*
* Hardware connections:
* - CLK: GPIO42
* - MOSI: GPIO43
* - MISO: GPIO44
* - CS: GPIO41
* - RST: GPIO1
* - INT: GPIO2
*
* Static IP address: 192.168.3.55
* Subnet Mask: 255.255.255.0
* Gateway: 192.168.3.1
* DNS: 192.168.3.1
*/

#include <SPI.h>
#include <Ethernet.h>

// Define the W5500 Ethernet module pins
#define W5500_CS_PIN  41
#define W5500_RST_PIN 1
#define W5500_INT_PIN 2
#define W5500_CLK_PIN 42
#define W5500_MOSI_PIN 43
#define W5500_MISO_PIN 44

// MAC address for your Ethernet shield (must be unique on your network)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Static IP address configuration
IPAddress ip(192, 168, 3, 55);       // Static IP address
IPAddress subnet(255, 255, 255, 0);   // Subnet mask
IPAddress gateway(192, 168, 3, 1);    // Default gateway
IPAddress dns(192, 168, 3, 1);        // DNS server address

// Create an EthernetServer object to handle TCP connections
EthernetServer server(4196);

void setup() {
  // Initialize serial communication
  Serial.begin(115200);
  while (!Serial) {
    ; // Wait for serial port to connect
  }

  // Initialize the W5500 module
  pinMode(W5500_RST_PIN, OUTPUT);
  pinMode(W5500_INT_PIN, INPUT);
  digitalWrite(W5500_RST_PIN, LOW);  // Reset the W5500 module
  delay(100);                       // Wait for reset to complete
  digitalWrite(W5500_RST_PIN, HIGH); // Release reset

  // Initialize SPI with the correct pin definitions
  SPI.begin(W5500_CLK_PIN, W5500_MISO_PIN, W5500_MOSI_PIN);

  // Set up the Ethernet library with W5500-specific pins
  Ethernet.init(W5500_CS_PIN);

  // Start the Ethernet connection with static IP configuration
  Ethernet.begin(mac, ip, dns, gateway, subnet);

  // Print the IP address to the serial monitor
  Serial.print("IP Address: ");
  Serial.println(Ethernet.localIP());

  // Start listening for incoming TCP connections
  server.begin();
}

void loop() {
  // Check for incoming client connections
  EthernetClient client = server.available();
  if (client) {
    Serial.println("New client connected");

    // Read data from the client and echo it back
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        server.write(c);
      }
    }

    // Close the connection when done
    client.stop();
    Serial.println("Client disconnected");
  }
}
arduino ino file download:

.zip   5-Ethernet-W5500.zip (Size: 1.23 KB / Downloads: 263)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   5-Ethernet-W5500.ino.merged.zip (Size: 191.08 KB / Downloads: 258)

Print this item

  [arduino code examples for T128M]-04 Read free GPIO state
Posted by: admin - 06-23-2025, 05:37 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* GPIO Status Monitoring
*
* This program monitors the status (high or low) of multiple GPIO pins on the ESP32-S3.
* It prints the status of the pins to the serial monitor whenever a change is detected.
*
* GPIO Pins Monitored:
* - GPIO 8
* - GPIO 9
* - GPIO 10
* - GPIO 15
* - GPIO 16
* - GPIO 17
* - GPIO 18
* - GPIO 0
*
* Hardware Requirements:
* - Connect the pins to appropriate devices or pull them to HIGH/LOW for testing
*/

#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10
#define GPIO_PIN_15 15
#define GPIO_PIN_16 16
#define GPIO_PIN_17 17
#define GPIO_PIN_18 18
#define GPIO_PIN_0 0

// Store the previous state of the GPIO pins
bool prevState[8] = {false, false, false, false, false, false, false, false};

void setup() {
  // Initialize serial communication for debugging purposes
  Serial.begin(115200); // Initialize the serial monitor at 115200 baud
  while (!Serial);      // Wait for the serial monitor to open

  // Initialize GPIO pins as inputs
  pinMode(GPIO_PIN_8, INPUT);
  pinMode(GPIO_PIN_9, INPUT);
  pinMode(GPIO_PIN_10, INPUT);
  pinMode(GPIO_PIN_15, INPUT);
  pinMode(GPIO_PIN_16, INPUT);
  pinMode(GPIO_PIN_17, INPUT);
  pinMode(GPIO_PIN_18, INPUT);
  pinMode(GPIO_PIN_0, INPUT);

  Serial.println("GPIO Status Monitoring Started");
}

void loop() {
  // Read the current state of each GPIO pin
  bool currentState[8];
  currentState[0] = digitalRead(GPIO_PIN_8);
  currentState[1] = digitalRead(GPIO_PIN_9);
  currentState[2] = digitalRead(GPIO_PIN_10);
  currentState[3] = digitalRead(GPIO_PIN_15);
  currentState[4] = digitalRead(GPIO_PIN_16);
  currentState[5] = digitalRead(GPIO_PIN_17);
  currentState[6] = digitalRead(GPIO_PIN_18);
  currentState[7] = digitalRead(GPIO_PIN_0);

  // Check for changes in GPIO pin states
  for (int i = 0; i < 8; i++) {
    if (currentState[i] != prevState[i]) {
      // Print the pin number and its new state if it has changed
      Serial.print("GPIO ");
      Serial.print(i == 0 ? GPIO_PIN_8 :
                   i == 1 ? GPIO_PIN_9 :
                   i == 2 ? GPIO_PIN_10 :
                   i == 3 ? GPIO_PIN_15 :
                   i == 4 ? GPIO_PIN_16 :
                   i == 5 ? GPIO_PIN_17 :
                   i == 6 ? GPIO_PIN_18 : GPIO_PIN_0);
      Serial.print(" changed to ");
      Serial.println(currentState[i] ? "HIGH" : "LOW");
      // Update the previous state
      prevState[i] = currentState[i];
    }
  }

  // Delay to avoid flooding the serial monitor
  delay(100); // Adjust the delay as needed
}
arduino ino file download:

.zip   4-free-gpio-state.zip (Size: 1.04 KB / Downloads: 250)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   4-free-gpio-state.ino.merged.zip (Size: 181.77 KB / Downloads: 256)

Print this item

  [arduino code examples for T128M]-03 RS485 communication test
Posted by: admin - 06-23-2025, 05:36 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* RS485 Communication Test with Direction Control (SP3485EEN)
*
* This program is a simple test for RS485 communication using ESP32-S3.
* It will send a message over RS485 and then read incoming messages.
* The TXD pin is defined as GPIO 13, RXD is GPIO 21, and EN is GPIO 14.
*/

#include <HardwareSerial.h>

// Define RS485 pins
#define RS485_RXD 21     // RS485 Receive
#define RS485_TXD 13     // RS485 Transmit
#define RS485_EN  14     // RS485 Direction control (High: Send, Low: Receive)

// Create a hardware serial object on UART1
HardwareSerial rs485Serial(1);

void setup() {
  // Start serial communication for debugging
  Serial.begin(115200);
  while (!Serial);

  // Set RS485 direction control pin
  pinMode(RS485_EN, OUTPUT);
  digitalWrite(RS485_EN, LOW); // Start in receive mode

  // Initialize RS485 serial communication
  rs485Serial.begin(9600, SERIAL_8N1, RS485_RXD, RS485_TXD);

  Serial.println("RS485 Test Start (with direction control)");
}

void loop() {
  // Prepare the message to send
  String message = "Hello from KinCony T128M!";
 
  // Switch to transmit mode
  digitalWrite(RS485_EN, HIGH);
  delay(2); // Short delay to allow driver to switch
 
  // Send the message
  rs485Serial.println(message);
  rs485Serial.flush(); // Wait for transmission to complete
 
  // Switch back to receive mode
  digitalWrite(RS485_EN, LOW);
 
  Serial.println("Message sent. Waiting for response...");

  // Wait for a response (up to 1 second)
  unsigned long startTime = millis();
  while (millis() - startTime < 1000) {
    if (rs485Serial.available()) {
      String receivedMessage = "";
      while (rs485Serial.available()) {
        char c = rs485Serial.read();
        receivedMessage += c;
      }
      // Print the received message
      Serial.print("Received: ");
      Serial.println(receivedMessage);
      break;
    }
  }

  // Wait before sending the next message
  delay(2000);
}
arduino ino file download:

.zip   3-RS485-Test.zip (Size: 1.02 KB / Downloads: 260)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   3-RS485-Test.ino.merged.zip (Size: 186.66 KB / Downloads: 264)

Print this item

  [arduino code examples for T128M]-02 Read digital input ports state
Posted by: admin - 06-23-2025, 05:35 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* Description:
* This Arduino program reads the state of 128 digital inputs using 8 PCF8575 I/O expanders.
* Each PCF8575 reads 16 input channels. The input states are printed to the Serial Monitor
* as binary strings grouped by chip.
*
* I2C Pin Definitions:
* - SDA: GPIO 12
* - SCL: GPIO 11
*
* PCF8575 Addresses:
* - Input  1~16   : 0x27
* - Input 17~32  : 0x26
* - Input 33~48  : 0x23
* - Input 49~64  : 0x22
* - Input 65~80  : 0x25
* - Input 81~96  : 0x24
* - Input 97~112 : 0x21
* - Input113~128 : 0x20
*
* Input Status Legend:
* - 0: ON (Active)
* - 1: OFF (Inactive / Pulled HIGH)
*/

#include <Wire.h>
#include <PCF8575.h>

// Define I2C pins
#define I2C_SDA 12
#define I2C_SCL 11

// Define PCF8575 I2C addresses
PCF8575 pcf_inputs[8] = {
  PCF8575(0x27), // Input 1-16
  PCF8575(0x26), // Input 17-32
  PCF8575(0x23), // Input 33-48
  PCF8575(0x22), // Input 49-64
  PCF8575(0x25), // Input 65-80
  PCF8575(0x24), // Input 81-96
  PCF8575(0x21), // Input 97-112
  PCF8575(0x20)  // Input 113-128
};

void setup() {
  Serial.begin(115200);
  Wire.begin(I2C_SDA, I2C_SCL);

  Serial.println("KinCony F128 128 channel input state  0:ON  1:OFF");

  // Initialize all PCF8575 modules
  for (int i = 0; i < 8; i++) {
    pcf_inputs[i].begin();
  }
}

void loop() {
  // Iterate through all 8 chips
  for (int chip = 0; chip < 8; chip++) {
    Serial.print("Input ");
    Serial.print((chip * 16) + 1);
    Serial.print("~");
    Serial.print((chip + 1) * 16);
    Serial.print(": ");

    // Read and print the state of all 16 pins on current chip
    for (int pin = 0; pin < 16; pin++) {
      int state = pcf_inputs[chip].read(pin);
      Serial.print(state);
    }

    Serial.println();
  }

  Serial.println("--------------------------------------------------");
  delay(1000); // Delay 1 second between reads
}
arduino ino file download:

.zip   2-digital-input.zip (Size: 1,019 bytes / Downloads: 260)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   2-digital-input.ino.merged.zip (Size: 192.36 KB / Downloads: 254)

Print this item

  [arduino code examples for T128M]-01 Turn ON/OFF OUTPUT
Posted by: admin - 06-23-2025, 05:33 AM - Forum: T128M - No Replies

Code:
/*
* Made by KinCony IoT: https://www.kincony.com
*
* This program controls 128 outputs using 8 PCF8575 I/O expanders.
* It sequentially turns on outputs 1 to 128, then turns them off from 128 to 1, in a loop.
*
* I2C Pin Definitions:
* - SDA: GPIO 48
* - SCL: GPIO 47
*
* PCF8575 Addresses:
* - Output  1~16   : 0x27
* - Output 17~32  : 0x26
* - Output 33~48  : 0x23
* - Output 49~64  : 0x22
* - Output 65~80  : 0x25
* - Output 81~96  : 0x24
* - Output 97~112 : 0x21
* - Output113~128 : 0x20
*
* Delay Time:
* - 200 milliseconds between switching outputs
*/

#include <Wire.h>        // Include the Wire library for I2C communication
#include <PCF8575.h>     // Include the PCF8575 library

#define SDA_PIN 48       // Define SDA pin
#define SCL_PIN 47       // Define SCL pin
#define DELAY_TIME 50   // Delay between operations in milliseconds

// Create PCF8575 objects for each chip
PCF8575 pcf_1(0x27); // output 1-16
PCF8575 pcf_2(0x26); // output 17-32
PCF8575 pcf_3(0x23); // output 33-48
PCF8575 pcf_4(0x22); // output 49-64
PCF8575 pcf_5(0x25); // output 65-80
PCF8575 pcf_6(0x24); // output 81-96
PCF8575 pcf_7(0x21); // output 97-112
PCF8575 pcf_8(0x20); // output 113-128

// Array of pointers to PCF8575 objects
PCF8575* pcfArray[8] = {
  &pcf_1, &pcf_2, &pcf_3, &pcf_4,
  &pcf_5, &pcf_6, &pcf_7, &pcf_8
};

void setup() {
  Wire.begin(SDA_PIN, SCL_PIN);  // Initialize I2C with specified pins
  Serial.begin(115200);
  Serial.println("PCF8575 128-Channel Output Control Starting...");

  // Initialize all PCF8575 modules and set all pins to HIGH (OFF)
  for (int i = 0; i < 8; i++) {
    pcfArray[i]->begin();
    for (int j = 0; j < 16; j++) {
      pcfArray[i]->write(j, HIGH);  // Turn off all outputs initially
    }
  }
}

void loop() {
  // Turn ON outputs from 1 to 128 (LOW)
  for (int channel = 0; channel < 128; channel++) {
    int chipIndex = channel / 16;        // Which PCF8575 (0 to 7)
    int pinIndex = channel % 16;         // Which pin on that PCF8575 (0 to 15)
    pcfArray[chipIndex]->write(pinIndex, LOW); // Turn ON the output
    delay(DELAY_TIME);
  }

  // Turn OFF outputs from 128 to 1 (HIGH)
  for (int channel = 127; channel >= 0; channel--) {
    int chipIndex = channel / 16;
    int pinIndex = channel % 16;
    pcfArray[chipIndex]->write(pinIndex, HIGH); // Turn OFF the output
    delay(DELAY_TIME);
  }
}
arduino ino file download:

.zip   1-output.zip (Size: 1.12 KB / Downloads: 248)
BIN file (you can use esp32 download tool download to ESP32-S3 with address 0x0 then directly to use) download:

.zip   1-output.ino.merged.zip (Size: 181.63 KB / Downloads: 248)

Print this item