Kincony KC868-AI: 48 цифровых входов + ESP32, ETH, RS232, RS485 и приёмники IR и 433 МГц
Пока мы с вами занимались контроллерами 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, то нам нужно учесть этот момент в коде и явно их указать. Тут же указываем адреса (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).
❯ Заключение
Kincony выпустила очередной отличный контроллер для DIY автоматизации — в нём всё просто и понятно для самостоятельного программирования — если ваша задача вписывается в его ТТХ, можно смело его использовать для реализации вашего проекта.