И вот мы, наконец, добрались до вершины технического творчества компании Kincony — её флагманского контроллера 868-й серии KC868-Server. Когда я первый раз увидел этот контроллер, у меня просто не было слов — кажется, это воплощённая мечта любого «автоматизатора» и гика — чего там только нет: ESP32, Raspberry Pi и ARM Cortex M4 в одном флаконе и всё это снабжено кучей периферии, разъёмов, антенн и т. д.
Подобная платформа может стать основой для разработки любого, даже самого изощрённого проекта по автоматизации — такой концентрации возможностей на одной плате я просто не встречал ранее, одних только модулей Wi-Fi на KC868-Server 3 штуки, 2 проводных Ethernet, 2 MCU и плюс полноценный Linux-компьютер — как говорил один известный персонаж «да это просто праздник какой-то».
Я бы сказал, что Kincony KC868-Server — это не контроллер, а просто атомная бомба и, конечно, мы не сможем отказать себе в удовольствии поближе с ним познакомиться, разобрать его устройство и, возможно, даже «запилить» на нём несколько умопомрачительных IoT проектов.
Итак, начнём…
Гибридизация контроллеров
Начну издалека… При разработке DIY проектов по автоматизации часто встречаются ситуации, когда возможностей одного отдельно взятого контроллера уже не хватает. Хорошим примером тут могут служить популярные модули ESP8266 и ESP32 — у них катастрофически не хватает свободных GPIO выводов. Для обхода этого ограничения приходится либо «колхозить» различные расширители портов, либо использовать в связке с ESP32 «партнёрский» контроллер, например, Mega 2560.
В реальных проектах часто встречаются задачи, которые заставляют задумываться о «гибридизации» контроллеров и использовании на общее благо полезных свойств их различных частей.
Если сравнивать варианты использования расширителей портов или партнёрского MCU, то второй вариант мне ближе — мы получаем не только возможность использовать дополнительные GPIO, но и «бесплатно» получаем все возможности дополнительного контроллера.
В общем, в своих проектах я часто использую гибридные DIY контроллеры и Kincony KC868-Server отлично вписывается в эту концепцию — в нём на одной плате соседствуют 3 разных контроллера: ESP32, Raspberry Pi и ARM Cortex M4, причём все эти части связаны коммуникациями и могут взаимодействовать друг с другом.
Тут уместно будет вспомнить ещё одно «заумное» слово — синергия. 3 контроллера на одной плате — это не просто 3 контроллера, эта связка обладает синергетическим эффектом и не просто складывает возможности отдельных частей, а значительно их приумножает. Не будет преувеличением сказать, что KC868-Server позволит реализовать почти любой ваш IoT каприз.
Внешний вид
Внешний вид Kincony KC868-Server вызывает уважение — металлический корпус, приличные размеры и вес, 8 (!) отверстий для установки антенн, огромное количество разъёмов — всё говорит о том, что мы имеем дело с серьёзным устройством.
Вид с обратной стороны контроллера. Видна линейка разъёмов и только один разъём для подключения антенны — всего в моей конфигурации задействовано 4 антенны. С обратной стороны KC868-Server выглядит так же внушительно, как и с передней.
Фото для сравнения размеров Kincony KC868-Server со своим младшим братом KC868-A4. Кстати, Server как раз и предназначен (в первую очередь) для управления многочисленными контроллерами семейства KC868.
Для сравнения Server рядом с «младшим братом» A4
Вид контроллера со снятой верхней крышкой. Всё смотрится довольно гармонично. Благодаря наличию свободного места и при особом желании, можно даже дополнить KC868-Server дисплеем и кнопками на верхней крышке корпуса.
Вид металлических панелей корпуса отдельно. Всё разбирается очень просто, без каких-либо проблем. На основании видны крепления на DIN-рейку.
И, наконец, фото отдельной платы KC868-Server, извлечённой из корпуса. Видны 3 Wi-Fi антенны и одна антенна модуля приёмника 433 МГц (модуль передатчика 433 МГц почему-то совсем не запаян).
Составные части KC868-Server
Теперь поговорим об устройстве KC868-Server и его составных частях. Начнём с формального перечисления ресурсов каждой части KC868-Server. Условно контроллер можно разделить на 3 составляющие:
- ESP32 контроллер
- Raspberry Pi (CM4) Linux-миникомпьютер
- ARM Cortex M4 контроллер
▍ ESP32 контроллер
Как понятно из названия, эта часть основана на ESP32 и имеет все присущие ему возможности — Wi-Fi, Bluetooth, 2 ядра MCU и т. д., кроме этого, ESP32 часть имеет:
- Инфракрасные (IR) приёмник и передатчик
- 433 МГц приёмник и передатчик
- Вывод на колодку 4 GPIO
- Вывод на разъём 2 GPIO
- USB разъём Type-C
- 2 кнопки Reset и User
- Встроенную связь по Serial с частью ARM Cortex M4
Другими словами, ESP32 часть может осуществлять беспроводную связь по Wi-Fi и/или Bluetooth, иметь собственный сервер и веб-интерфейс, управлять оборудованием по IR и обмениваться информацией с 433 МГц устройствами, а также может взаимодействовать с датчиками и прочими компонентами при помощи подключения к свободным GPIO, выведенным на колодку и разъёмы на плате.
▍ Raspberry Pi (CM4) Linux-миникомпьютер
Вторая часть KC868-Server содержит модуль Raspberry Pi Compute Module 4 (CM4) и его соответствующую обвязку и расширения на самой плате KC868-Server. Это полноценный Linux-миникомпьютер со всеми возможностями, характерными для подобных систем:
- Pi CM4 (Wi-Fi, Bluetooth)
- Картридер для microSD
- HDMI выход
- Порт RS485
- Разъём с 26 GPIO
- Разъём USB Type-C
- 4 USB 2.0 (и возможность подключения к ним любых USB-донглов)
- Ethernet разъём
- Возможность загрузки с SD или USB C
Тут мы имеем (на борту!) не что иное, как целый Raspberry Pi 4 Model B, дополненный возможностью работы с RS485 интерфейсом. Соответственно, мы имеем в своём распоряжении все возможности RPi 4 (почти безграничные в контексте IoT применения), плюс возможность подключения к системе любых USB-донглов, например, контроллера беспроводной сети Zigbee и т. п. устройств.
▍ ARM Cortex M4 контроллер
В принципе, двух первых частей более чем достаточно для создания мощного IoT контроллера, но компании Kincony этого показалось мало и она добавила на плату ARM Cortex M4 с кучей периферии подключённых компонентов:
- GigaDevice GD32F103VCT6 (108 МГц, 48 кБ SRAM, 256 кБ Flash)
- 16 Dry Contact + 8 Digital Input
- Аналоговые входы: 2 (0-5 В) + 2 (4-40 мА)
- 16 MOSFET выходов
- Интерфейс RS232
- Интерфейс RS485
- Модуль Wi-Fi (HF-LPT230)
- Ethernet (W5500)
- Память AT24C02 (2 кб)
- Разъём 3.3, INT, SDA2, SCL2, AGND
- Разъём 3.3, RST, CLK, DIO, GND
- Кнопки: Wi-Fi Mode, Ethernet Mode, Wi-Fi Reset
ARM часть выполнена на «приличном» аналоге популярного STM микроконтроллера — GigaDevice GD32F103VCT6, тут мы видим цифровые и аналоговые входы, MOSFET выходы, проводные и беспроводные интерфейсы и т. д., то есть полный джентльменский набор возможностей современного IoT контроллера.
Сказать, что у компании Kincony получился мощный контроллер — это ничего не сказать. У компании Kincony получился просто галактический IoT крейсер в корпусе KC868-Server.
Роль KC868-Server
Само название KC868-Server прямо говорит о предназначении этого контроллера — быть сервером вашего IoT решения и у него есть для этого все возможности и ресурсы. Тут скорее даже трудно представить задачу, которую не смог бы решить этот контроллер.
В базовом варианте KC868-Server предназначен для управления «родственными» контроллерами серии KC868, графически это можно представить в виде следующей иллюстрации.
«Звезда смерти» KC868-Server
Но это не догма и KC868-Server может управлять любым другим набором IoT устройств, а также работать самостоятельно, в единственном числе (если этого требует ваш конкретный проект).
Кроме того, в рекламных проспектах Kincony мелькает упоминание о некоем «Kincony Cloud», так что при желании часть функционала вашего проекта можно завязать на облако производителя контроллера.
Внутренние коммуникации
Теперь разберём ещё один важный момент для понимания концепции работы KC868-Server. Речь идёт о межсистемных коммуникациях внутри самого контроллера между его ESP32, Raspberry Pi и ARM Cortex M4 частями.
Понятно, что весь смысл расположения трёх разных систем (контроллеров) на одной плате состоит в их взаимной интеграции и возможности различного взаимодействия между частями такой (супер)системы.
В базовом варианте компанией Kincony предполагается 2 вида межсистемного взаимодействия:
1. Коммуникация ESP32 — ARM при помощи Serial соединения. Этот тип связи реализован на плате в виде дорожек, соединяющих соответствующие GPIO обеих частей контроллера.
2. Коммуникация Pi CM4 — ARM при помощи RS485 интерфейса. Этот тип связи предполагается реализовывать в виде отдельных внешних соединений.
Тут нужно понимать, что нам доступна как сама плата KC868-Server, так и свободные GPIO её различных частей (контроллеров), поэтому мы можем не ограничиваться стандартными, предусмотренными компанией Kincony, межсистемными соединениями, а организовать любые свои (на что хватит фантазии и квалификации).
Кстати, хорошим примером для тренировки может послужить соединение ESP32 и RPi CM4 частей KC868-Server, которое не предусмотрено в базовом варианте от производителя.
Плата KC868-Server
Вид сверху на плату KC868-Server и установленные на ней компоненты. Что мне нравится в изделиях компании Kincony — это аккуратность в их проектировании и изготовлении — всё сделано аккуратно и, что самое главное, всё это работает так, как и заявлялось производителем.
Вид платы с обратной стороны платы. Это первый контроллер из серии KC868, у которого задействована обратная сторона платы для установки электронных компонентов (не считая «мелких» контроллеров Uair и AG). В основном все эти компоненты относятся к ARM части контроллера.
Ложка дёгтя в бочке мёда
Перед тем как переходить к разбору схемотехники KC868-Server, нам нужно обратить внимание на ещё один важный вопрос. Как это обычно бывает, не обошлось без ложки дёгтя в бочке мёда под названием KC868-Server.
Компания Kincony по какой-то причине решила оставить открытыми ESP32 и Pi CM4 части контроллера и закрыть (схемотехнику и прошивку) ARM части (тут немая сцена). На мой прямой вопрос «зачем?!» в компании ответили «потому, что программирование ARM части слишком сложное».
С моей точки зрения, это концептуальная ошибка — контроллер для DIY рынка должен быть полностью открыт. Мотивировка тоже более чем сомнительная — что значит «слишком сложное»? Для кого «слишком сложное»? Хорошо, для тех, кому это «слишком сложно», можно оставить возможность пользоваться готовой ARM прошивкой, но зачем нужно закрывать часть контроллера для всех остальных?
В общем, в ARM части KC868-Server нам придётся действовать партизанскими методами и вспомнить свои хакерские навыки для реверс-инжиниринга — пользоваться функционалом готовой прошивки — на мой взгляд, это не очень серьёзно, неинтересно, да и просто не спортивно.
Схемотехника
Поскольку размер статьи не резиновый, да и материала для осмысления очень много, поэтому далее я разберу схемотехнику ESP32 части контроллера KC868-Server, а разбор Pi CM4 и ARM Cortex M3 частей оставлю для следующих статей.
ESP32 часть контроллера KC868-Server
▍ Питание
Подсистема питания ESP32 части контроллера KC868-Server состоит из микросхемы понижающего DC-DC преобразователя XL1509-5 для формирования напряжений 12 В и 5 В и линейного регулятора LM117-3V3 для формирования напряжения 3,3 В.
В KC868-Server подсистема питания ESP32 части получает входное напряжение от общей вводной колодки, от которой питаются и две других (ARM и CM4) части контроллера. На фото выше виден этот разъём с маркировкой GND/12V.
Для того чтобы «просто» запитать контроллер, производителем рекомендуется блок питания 12В/2,5А, а для обеспечения работы контроллера вместе с дополнительным блоком управляющих реле — 12В/4,5А.
▍ Ядро ESP32 части
В Kincony KC868-Server установлен модуль ESP32 в модификации ESP-WROOM-32. На плате присутствует разъём P24 с выведенными в него GPIO14 и GPIO27. Не совсем понятно его предназначение, но в любом случае, мы можем его использовать для своих нужд.
Также на схеме указаны контакты GPIO2 и GPIO21, которые, похоже, на самом деле никуда не подключены и никак не используются. Скорее всего, это ошибка официальной документации на контроллер.
▍ USB/CH340
В подсистеме подключения к компьютеру и программирования ESP32 части KC868-Server используется USB разъём Type-C. Работа этого блока обеспечивается микросхемой CH340C. Здесь же присутствуют две кнопки S4 (RESET) и S5 (USER).
▍ Свободные GPIO
На контактную колодку выведены 4 GPIO c ESP32 части контроллера KC868-Server. Все эти контакты могут использоваться по вашему желанию (для подключения сенсоров или других компонентов), нужно только помнить, что на плате они уже подтянуты к напряжению 3 В.
▍ IR
Плата Kincony KC868-Server оснащена инфракрасными приёмником и излучателем. В качестве IR приёмника используется датчик VS1838B, установленный на плате, а для подключения IR излучающего диода предусмотрен специальный разъём (P15).
▍ 433 МГц
Плата KC868-Server предусматривает установку беспроводных модулей приёмника и передатчика на 433 МГц. В моём варианте почему-то присутствует только приёмник 433 МГц, а передатчик вообще не запаян. Зато приёмник прямо «из коробки» снабжён полноценной выносной антенной.
Для формирования и подачи на контроллер входного сигнала с приёмника используется буферный элемент 74LVC1G125, а выходной сигнал на передатчик подаётся напрямую.
▍ Интерфейс с ARM
Связь ESP32 с ARM частью KC868-Server осуществляется при помощи Serial соединения U2T/U2R (GPIO16 и GPIO17). Здесь ничего дополнительно делать не нужно — соединение между ESP32 и ARM уже проложено на плате в виде дорожек.
Распиновка ESP32 части
И в заключение рассмотрения схемотехники ESP32 части контроллера KC868-Server я привожу таблицу распиновки модуля ESP32 и всех компонентов и оборудования, подключённых к нему.
Тут видно, что не используется куча свободных GPIO. Я бы вывел их в отдельный разъём на плате — лишних GPIO в нашем деле не бывает и их всегда можно было бы использовать в своих проектах.
Чего мне не хватает в KC868-Server
Да, я умудрился найти недостатки даже в таком торте, как KC868-Server. Лично мне хотелось бы видеть в нём несколько вещей, хотя по большому счёту, все мои претензии можно назвать придирками.
- Компания Kincony по какой-то причине игнорирует наличие RTC (часов реального времени) в своих контроллерах. Я могу только предположить, что разработчики Kincony — это хорошие электронщики, но они ни разу не делали реальных проектов на своих контроллерах, — иначе они обязательно добавили бы RTC, тем более в такой флагманский контроллер, как KC868-Server. С другой стороны, самостоятельно «подцепить» модуль RTC к KC868-Server не составляет никаких проблем.
- Точно та же ситуация с Watchdog. Похоже разработчики, о существовании хардверных Watchdog-ов — узнали только от меня (шутка). Но и здесь подключить отдельный модуль Watchdog к KC868-Server не составляет особой проблемы. Или можно изобрести квази-Watchdog, используя они части (встроенные контроллеры) KC868-Server для слежения за работоспособностью других.
- Было бы вообще роскошно, если бы разработчики в базовом варианте предусмотрели какой-нибудь дисплей и несколько кнопок на передней панели (верхней крышке) KC868-Server, чтобы не колхозить всё это самому.
- Ещё можно было бы вывести отдельные разъёмы SPI и I2C и добавить возможность подключения nRF24 и/или LoRa модулей. Но и это всё можно сделать самостоятельно, немного поизучав схему и поработав паяльником.
Заключение
На этом я заканчиваю первую часть рассмотрения воистину грандиозного IoT контроллера Kincony KC868-Server и прощаюсь с вами до следующей статьи. Во второй статье этого цикла мы познакомимся с устройством и схемотехникой RPi CM4 части контроллера и ужаснёмся той мощи и возможностям, которые скрыты под металлической крышкой KC868-Server.
P. S.
Производите или продаёте контроллеры? Хотите видеть компетентный и объективный обзор вашей продукции? Свяжитесь со мной через профиль на Хабре или через мой сайт (ссылка есть в профиле) и, возможно, одна из следующих статей будет посвящена вашему контроллеру.
Автор:
smart_alex