Kincony KC868-AI: 48 цифровых входов + ESP32, ETH, RS232, RS485 и приёмники IR и 433 МГц

kuwdtlnbpr976exrah7knd6mqoe.jpeg

Пока мы с вами занимались контроллерами AlertBox (1, 2), подключали Wiren Board блоки на DIN-рейку и пытались полечиться при помощи ТГС-7А, компания Kincony тоже не теряла времени даром и выпустила ещё несколько контроллеров в своём неподражаемом форм-факторе «а-ля скейтборд, только колёсики приделать нужно».

На этот раз она нас порадовала концептуальным решением KC868-AI по организации сбора данных со множества (48 шт.) цифровых входов, плюс на плату добавлены приёмники инфракрасных сигналов (IR) и сигналов от радиомодулей на 433 МГц. Получилось что-то вроде универсального (Wi-Fi, Ethernet) умного (ESP32) гейта для сбора информации с какого-то объекта и передачи её для дальнейшей обработки в общую систему.

Ну, а наличие интерфейсов RS485 и I2C и разъёма с 4-я свободными GPIO позволяет подключить к KC868-AI дополнительное оборудование, например, блок реле и сделать этот контроллер полноценным управляющим элементом вашей системы автоматизации.

Далее мы попробуем поподробнее разобраться с устройством KC868-AI и даже немного попрограммировать его в своё удовольствие.

Kincony KC868-AI


Как всегда, начнём мы с перечисления компонентов и подсистем, установленных на плате Kincony KC868-AI:

  • Микроконтроллер ESP-WROOM-32E
  • 48 цифровых опторазвязанных входов («сухой контакт»)
  • 4-контактный разъём KCOM для цифровых входов
  • Интерфейс RS232 (2 разъёма)
  • Интерфейс RS485
  • Разъём для модуля приёмника 433 МГц
  • IR приёмник
  • Разъём I2C
  • Разъём с 4-я свободными GPIO
  • Ethernet LAN8270A
  • Разъём USB для программирования
  • Кнопки «Reset» и «Download»
  • Питание от 12(24) В постоянного тока


Итак, входы:

  • 48 цифровых опторазвязанных входов («сухой контакт»)
  • IR приёмник
  • Разъём для модуля приёмника 433 МГц


Интерфейсы:

  • Интерфейс RS232 (2 разъёма)
  • Интерфейс RS485
  • Разъём I2C
  • Разъём с 4-я свободными GPIO


Межконтроллерные коммуникации:

  • Wi-Fi (ESP32)
  • Ethernet LAN8270A


Из всего вышеперечисленного вырисовывается отличная гибкая платформа для создания собственных решений по автоматизации — KC868-AI можно использовать как гейт для сбора входных данных и последующей передачи их в общую систему или как отдельный универсальный контроллер для управления каким-то объектом (подключив актуаторы по доступным на плате интерфейсам или через свободные GPIO).

Из недостатков, я бы даже сказал не недостатков, а странностей, можно отметить полное отсутствие в KC868-AI хоть как-то окультуренных аналоговых входов. На плате присутствует разъём со свободными GPIO34, 35, 36, 39 и к ним можно попытаться подключить какие-то аналоговые датчики, но для этого придётся предпринимать дополнительные усилия и «колхозить» эти подключения.

Особенно это странно на фоне названия контроллера KC868-AI, которое как бы намекает на «Analog Input», но сам контроллер не содержит ни одного аналогового входа. Или Kincony под «AI» имела в виду «Artificial Intelligence»?

fjdiamlhbpditbxqvafjogsigk4.jpeg

Внешний вид и конструкция


Для сравнения привожу фотографию KC868-AI рядом с «базовой» моделью KC868-A4 всего семейства контроллеров KC868. Тут комментировать нечего, всё видно «невооружённым глазом», единственное, что хотелось бы заметить, — для огромных по размерам контроллеров Kincony требуются соответствующие шкафы — в то, что на наших просторах обычно называют «электрощитом» Kincony KC868-AI не влезет никак, даже боком или по диагонали (а если влезет, то места для автоматов и контакторов просто не останется).

0l4t7tpugzhka6y-kx77t2fgkja.jpeg

Отдельно хочется отметить новую «весёленькую» расцветку крепления на DIN-рейку — она очень оживит внешний вид вашей суровой автоматизации.

agq74grsjbppl08hl35mzwcmrce.jpeg

Вид крепления на DIN-рейку сзади. Очень красиво, жаль, что эту красоту никто не увидит (смайл).

sc4d4gkevsyp7bizyt-bqf0qtoa.jpeg

Полностью разоблачённый контроллер. На фото видны отверстия для крепления на любую подходящую поверхность (без DIN-рейки).

6thl0_7p_hhziyztomqtoi-11-i.jpeg

Схемотехника


В этой статье мы прервём традицию тотального описания всех подсистем контроллера с приведением соответствующих схем — Kincony в своих изделиях использует типовые схемотехнические решения и повторять их описание из статьи в статью нет особого смысла.

В этом обзоре я буду приводить и разбирать только некоторые фрагменты схемы, характерные для рассматриваемой модели KC868-AI.

Для начала вид платы сверху. Всё сделано в (неподражаемом) духе Kincony. Обращают на себя внимание «брутальные» вертикальные USB и Ethernet разъёмы и отдельная внушительная «земляная» колодка KCOM. Также нужно отметить, что (с нашей подачи) Kincony стала устанавливать на плате разъём для подключения без пайки беспроводного модуля 433 МГц и начала выводить в отдельный разъём свободные GPIO ESP32.

zv1rngbxbiqdbci8bsrpz0kiw0i.jpeg

Обратная сторона платы. Если вы любите чистоту, то приготовьте побольше жидкости для удаления остатков флюса — его много на обратной стороне платы и он как-то неохотно оттирается, всё время наровя растечься по плате тонким белесым слоем.

ukwrcxnop2k-_wty2p0inm0ryaq.jpeg

Цифровые входы


Плата имеет 48 цифровых оптоизолированных входов «сухой контакт» на оптронах EL357, распределённых на 6 колодок по 8 контактов. Для обеспечения их работы в связке с ESP32 в KC868-AI применены расширители цифровых входов/выходов c I2C интерфейсом на 6-и микросхемах PCF8574P.

fav7jy67kgqv9nalba784tkqarw.jpeg

Принципиальная схема подсистемы цифровых входов. Для наглядности и чтобы не загромождать схему показан только один из шести блоков оптронов (остальные полностью ему аналогичны). Расширители портов на PCF8574P показаны все 6 штук. Обращает на себя внимание обозначение SDA2/SCL2 хотя на плате используется только один I2C интерфейс. Причём обозначение SCL2 написано с ошибкой (SDL2).

gfryoendkync6okthes9dooykl0.jpeg

Отдельно схема колодок подключения цифровых опторазвязанных входов «сухой контакт» (контакты замыкаются на землю колодки KCOM).

8kvezc_-fxij9kbcz7ffb35r3og.jpeg

Разъёмы I2C


На плате присутствует очень полезный для подключения различных дополнительных компонентов разъём I2C. К нему можно подключить, например, дисплей, дополнительные сенсоры и прочие элементы.

6jwfyz9e-ozbzrm3vcxubwj9wny.jpeg

Принципиальная схема контактов разъёма I2C (снова замечу, что двойка в обозначениях SDA2/SCL2 лишняя — на плате используется всего один I2C интерфейс):

ha62hxmvk_80jwiuw5bq0thcjaw.jpeg

Свободные GPIO


Ещё одно полезное дополнение — 4 свободных GPIO в отдельном разъёме. К ним можно подключить различное оборудование или организовать аналоговые входы (которые полностью отсутствуют на плате).

l4crxbka67iljx7pgnr5lcmda3q.jpeg

Принципиальная схема разъёма со свободными GPIO (34, 35, 36, 39):

txyi1rsw8xamdtobvet6pu5xc-y.jpeg

Схема внешних подключений


Немного доработанная оригинальная схема разъёмов и внешних подключений контроллера KC868-AI от производителя. Два разъёма интерфейса RS232 — это на самом деле один интерфейс, параллельно выведенный в два разъёма.

8ccbxpssr2sxmtl9tnoj7r_zoow.jpeg

Распиновка


Распиновка на которой видно что и как подключено к микроконтроллеру ESP32 на плате KC868-AI. Похоже, что GPIO2 и GPIO12 никуда не подключены и никак не задействованы (нужно было тоже вывести в разъём со свободными GPIO).

kitgsosecnd-uncpjp2oilfkhz8.png

Программирование


Теперь давайте попробуем попрограммировать KC868-AI и для примера создадим скетч получения данных с его цифровых входов. Для этого нам понадобится библиотека PCF8574_library.

/*
  KC868-AI DI example
*/

#include "Arduino.h"
#include "PCF8574.h"

#define SDA 4
#define SCL 5

PCF8574 pcf_1(0x24, SDA, SCL);
PCF8574 pcf_2(0x25, SDA, SCL);
PCF8574 pcf_3(0x21, SDA, SCL);
PCF8574 pcf_4(0x22, SDA, SCL);
PCF8574 pcf_5(0x26, SDA, SCL);
PCF8574 pcf_6(0x23, SDA, SCL);

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(F("KC868-AI DI example start..."));

  for (byte i = 0; i < 8; i++) {pcf_1.pinMode(i, INPUT);}
  for (byte i = 0; i < 8; i++) {pcf_2.pinMode(i, INPUT);}
  for (byte i = 0; i < 8; i++) {pcf_3.pinMode(i, INPUT);}
  for (byte i = 0; i < 8; i++) {pcf_4.pinMode(i, INPUT);}
  for (byte i = 0; i < 8; i++) {pcf_5.pinMode(i, INPUT);}
  for (byte i = 0; i < 8; i++) {pcf_6.pinMode(i, INPUT);}
 
  Serial.print("Init pcf 1..."); if (pcf_1.begin()){Serial.println("OK");} else {Serial.println("Err");}
  Serial.print("Init pcf 2..."); if (pcf_2.begin()){Serial.println("OK");} else {Serial.println("Err");}
  Serial.print("Init pcf 3..."); if (pcf_3.begin()){Serial.println("OK");} else {Serial.println("Err");}
  Serial.print("Init pcf 4..."); if (pcf_4.begin()){Serial.println("OK");} else {Serial.println("Err");}
  Serial.print("Init pcf 5..."); if (pcf_5.begin()){Serial.println("OK");} else {Serial.println("Err");}
  Serial.print("Init pcf 6..."); if (pcf_6.begin()){Serial.println("OK");} else {Serial.println("Err");}
  
  delay(1000);
}

void loop() {
  Serial.println();
  
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_1.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_2.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_3.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_4.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_5.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 8; i++) {Serial.print(pcf_6.digitalRead(i));} Serial.print(' ');
  
  delay(300);
}


Поскольку на плате KC868-AI пины I2C интерфейса подключены к нестандартным GPIO4 и 5, то нам нужно учесть этот момент в коде и явно их указать. Тут же указываем адреса (0×24, 0×25, 0×21, 0×22, 0×26, 0×23) расширителей портов PCF8574P на I2C шине. Почему адреса идут не по порядку? Видимо для того, чтобы мы с вами не расслаблялись и жизнь (программирование) не казалась нам таким лёгким занятием.

#define SDA 4
#define SCL 5

PCF8574 pcf_1(0x24, SDA, SCL);
PCF8574 pcf_2(0x25, SDA, SCL);
PCF8574 pcf_3(0x21, SDA, SCL);
PCF8574 pcf_4(0x22, SDA, SCL);
PCF8574 pcf_5(0x26, SDA, SCL);
PCF8574 pcf_6(0x23, SDA, SCL);


Далее всё очевидно: инициализируем линии расширителей как входы и в цикле печатаем матрицу состояний всех 48-и цифровых входов KC868-AI (обратите внимание на нолик в первой позиции каждой строки — это 1-й вход замкнут на землю KCOM).

rzr9jsavmmijm9c_pu3fsxrddcq.png

Заключение


Kincony выпустила очередной отличный контроллер для DIY автоматизации — в нём всё просто и понятно для самостоятельного программирования — если ваша задача вписывается в его ТТХ, можно смело его использовать для реализации вашего проекта.

© Habrahabr.ru