Пока мы с вами занимались контроллерами 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»?



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


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



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



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



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



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


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

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

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



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



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


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



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



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



Разъёмы I2C


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



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



Свободные GPIO


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



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



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


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



Распиновка


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



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


Теперь давайте попробуем попрограммировать 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, то нам нужно учесть этот момент в коде и явно их указать. Тут же указываем адреса (0x24, 0x25, 0x21, 0x22, 0x26, 0x23) расширителей портов 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).



Заключение


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

Комментарии (11)


  1. usego
    06.12.2022 11:35

    Да в общем-то аналоговые входы и не нужны для сценариев "читать" три десятка пуш батонов на каждом этаже дома. Хорошо, что такие решения стали появляться по адекватным ценам, надо будет причесать свой колхоз на ардуинах.


    1. smart_alex Автор
      06.12.2022 11:41
      +2

      Да, интересных решений стало появляться много, но это всё ещё не совсем то, что хотелось бы иметь. Ждём-с...


    1. fk0
      06.12.2022 13:39

      Я бы не сказал. Есть нюансы. В общем и целом, на мой взгляд, при разработке сигнализации или умного дома, на мой взгляд, проще использовать только аналоговые входы с АЦП. Цифровые входы это не только ноль и один, но и промежуточные состояния, и сразу возникают вопросы. Триггер Шмитта же есть далеко не на каждой ножке микроконтроллера.

      Кроме того, аналоговые входы можно использовать для подключения нескольких кнопок на один вход и один кабель или провод. Подразумевается, что каждая кнопка может иметь отдельный встроенный резистор.

      Токовые входы и оптроны -- возможно не лучшее решение. Вообще применение оптронов -- чаще сомнительное решение. Оптрон нужен, например, чтоб отвязаться от сети 220в. Но от статического электричества, например, он не защитит (будет пробит и поврежден еще). А когда в кнопку тыкают пальцем -- там несколько десятков киловольт, на что никакой оптрон не расчитан.

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


      1. smart_alex Автор
        06.12.2022 13:52

        У Kincony масса контроллеров и с входами и с выходами, на любой вкус, но они дороже.

        А это специализированное решение для тех случаев, когда нужно именно много входов, а выходы не нужны.


      1. usego
        06.12.2022 13:57

        Я ни разу не электронщик, классический "ардуинщик", поэтому делал себе систему лет 10 назад по первой же показавшейся "рабочей" схеме. У меня сейчас несколько Nano на atmega368P, расширенных входами на 74HC165 и с выходами на 74РС595. Без оптопар, 5V на кнопки по всему дому с приходом назад на ардуины. В общем-то всё чётко работает все эти 10 лет (после отладки и подгонки под ответ, конечно). Антидребезг чисто софтварный. За 10 лет вылетело пара копеешных 74HC165 во время гроз, которые специально садил на кровати для лёгкой замены. Дёшево и удобно. Но такое себе...

        Сейчас вот подумываю переделать всё это на более "промышленный" вид, так как такое показывать / продавать человеку со стороны не хочется. Подумываю о подобных решениях Kincony. У них и платы с релюхами есть отдельные типа KC868-E16S, я так понимаю можно подцепить её по I2C.

        Не одобряете мысли в эту сторону? Если нет, то интересен ваш взгяд на нормальное решение за разумные деньги. И я не в РУ, всякие wirenboardы не вариант, надо то, что с алика доступно.


        1. smart_alex Автор
          06.12.2022 14:08

          Трудно суазать, чем больше этим занимаешься, тем лучше понимаешь, что с электричеством нужно быть аккуратным и лучше сразу всё делать правильно.

          Могу также обратить внимание на аспект, который многие упускают из виду: автоматизация делается на многие годы и нужно заранее предусмотреть, что вы (или ещё хуже, кто-то другой) будете делать, когда через 10 лет сгорит ваш уникальный контроллер с уникальной прошивкой.


          1. usego
            06.12.2022 14:14

            Именно такие мысли и посещают и потому хотелось бы свести инструкции к 1) купите вот это на алике 2) таким-то способом залейте вот этот файл. Сейчас же само железо самопальное и неподдерживаемое. Правда долго ли проживёт Кинкони на рынке - тоже вопрос ) Но по крайней мере можно пару блоков про запас купить.


            1. smart_alex Автор
              06.12.2022 14:23

              Это непростой вопрос. Если делать на Kincony, то я бы посоветовал унифицировать контроллеры (выбрать 1-2 модели для проекта), максимально задокументировать прошивку, топологию и функционал автоматизации и купить в качестве резервных 1-2 унифицированных контроллера (на случай, если они перестанут выпускаться).


  1. lumen_xp
    06.12.2022 19:22

    Добрый день. Как раз сейчас думаю над тем, куда завести пару десятков сигналов от датчиков движения и пожарных извещателей. Если с датчиками движения все более-менее понятно и они сядут на эту плату бесшовно, то по извещателям вопрос. Можете посоветовать вариант согласования сигналов? Основная система управления построена на контроллерах Wago, но с нынешним уровнем цен докупать модули ввод-вывода не реально.


    1. smart_alex Автор
      06.12.2022 19:33

      Я затрудняюсь ответить на этот вопрос (тут нужно предметно разбираться). Но если вы говорите о дорогих модулях ввода-вывода Wago, то может быть проблему решат модули ввод-вывода Wiren Board (стоят более-менее вменяемых денег), которые можно подсоединить к KC868-AI при помощи I2C или RS485 интерфейсов.


      1. lumen_xp
        06.12.2022 19:40

        Спасибо за наводку, нашел у них на форуме по теме "Подключение ИП 212-45 к WB6". По стоимости одного канала, железка из статьи явно выигрывает. А поднять Modbus TCP на ESP и передать данные на контроллер вроде не такая трудная задача.