Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Arduino IDE demo source code for KC868-A128]--#05--Digital input trigger output
#1
   
Code:
/*
  Made by KinCony IoT: https://www.kincony.com

  KC868-A128
  DI1 -> DO1
  DI2 -> DO2
  ...
  DI128 -> DO128

  IIC Bus-A for relay DO:
  SDA = GPIO5
  SCL = GPIO16

  IIC Bus-B for DI:
  SDA = GPIO15
  SCL = GPIO4
*/

#include <Arduino.h>
#include <Wire.h>

#define DO_SDA 5
#define DO_SCL 16

#define DI_SDA 15
#define DI_SCL 4

// PCF8575 address order
uint8_t pcfAddr[8] = {
  0x24, 0x25, 0x21, 0x22,
  0x26, 0x27, 0x20, 0x23
};

// relay output state
// PCF8575: 1 = OFF, 0 = ON
uint16_t relayState[8];

uint16_t readPCF8575(TwoWire &wireBus, uint8_t addr) {
  wireBus.requestFrom(addr, (uint8_t)2);

  if (wireBus.available() < 2) {
    return 0xFFFF;
  }

  uint8_t lowByte = wireBus.read();
  uint8_t highByte = wireBus.read();

  return ((uint16_t)highByte << 8) | lowByte;
}

void writePCF8575(TwoWire &wireBus, uint8_t addr, uint16_t value) {
  wireBus.beginTransmission(addr);
  wireBus.write(value & 0xFF);
  wireBus.write((value >> 8) & 0xFF);
  wireBus.endTransmission();
}

void setup() {
  Serial.begin(115200);
  delay(1000);

  Wire.begin(DO_SDA, DO_SCL);      // IIC Bus-A, relay
  Wire1.begin(DI_SDA, DI_SCL);     // IIC Bus-B, digital input

  // Init all relays OFF
  for (int i = 0; i < 8; i++) {
    relayState[i] = 0xFFFF;
    writePCF8575(Wire, pcfAddr[i], relayState[i]);
  }

  Serial.println("KC868-A128 DI trigger DO ready.");
}

void loop() {
  for (int board = 0; board < 8; board++) {
    uint16_t inputState = readPCF8575(Wire1, pcfAddr[board]);

    // DI low active
    // DI = 0 -> relay ON
    // DI = 1 -> relay OFF
    relayState[board] = inputState;

    writePCF8575(Wire, pcfAddr[board], relayState[board]);
  }

  delay(50);
}
BIN file, download to ESP32 by 0x0 address, directly to use:

.zip   input-trigger-output.ino.merged.zip (Size: 183.82 KB / Downloads: 4)
Reply


Forum Jump:


Users browsing this thread:
1 Guest(s)