Перейти к содержимому

Добрый день, уважаемый читатель!

Данная статья несколько отличается от большинства других статей на данном сайте – в ней вы не найдете непосредственно обучающих материалов. Скорее данная статья относится к разряду “делюсь опытом”, а если еще откровеннее – “смотрите чо я сделал!”. А конкретно я хотел бы рассказать про свою последнюю разработку – плату универсального (на мой взгляд) домашнего контроллера на базе ESP32-WROWER-IE (или ESP32-WROWER-IB).

Сколько не используй готовые китайские платы (например раз, два, три), а всё равно что-то где-то будет не хватать. То выводы расположены не удобно, то какого-то очень нужного интерфейса нет, то реле слабые, а то и вовсе – гранаты не той системы. Поэтому на этот раз я решил разработать ровно такую плату, какую мне нужно. Точнее получилась не одна, а целых две платы – основная и плата расширения, собранные в итоге “этажеркой”. Поскольку в данном проекте мне требовалась особая компактность, я решил изготовить платы методом поверхностного монтажа ( SMD ) и заказать их на заводе в Китае.

Вторая ревизия платы, описываемая в данной статье


 

Я вполне отдаю себе отчет, что данная плата разработана мной для меня. Но, вполне возможно,  она и вам может пригодится в точно таком же виде, так как функции, заложенные в ней, пригодятся многим. Либо могут быть применены какие-либо отдельные узлы в ваших самодельных конструкциях. Чертежи плат, как и тестовая прошивка, выложены в открытый доступ и вы можете использовать их как есть либо переделать их под ваши потребности. 

В частности, при разработке платы были использованы все доступные GPIO ESP32, включая Strapping pins, с учетом их особенностей. Поэтому данную статью можно рассматривать и как практическое руководство по разумному использованию GPIO на микроконтроллерах ESP32. Но, поскольку для всех заложенных потребностей встроенных GPIO явно не хватает, пришлось применить расширители GPIO MCP23017 – один на основной плате и два на дополнительной.

Так как полноценной схемы у меня нет и не будет, то вместо привычной всем нумерации компонентов (например R1, С1 и т.д.) на шелкографии обозначены их номиналы (кроме транзисторов). Это позволяет без схемы легко и просто собрать данную плату. Керамические конденсаторы все одного номинала – 100nF или 0,1uF, и обозначены как 0,1u. Остальные деталюшки без букв или с буквой K – резисторы. Диоды и стабилитроны маркированы либо напряжением, либо наименованием.

Для коммутации и связей с общественностью внешними устройствами используются малогабаритные слаботочные реле Omron G6K-2P-Y. Коммутируемые ими сила тока и напряжение невелики, поэтому их хватит “с запасом”. Два из них с катушкой на 12 вольт, а третье – на 5В, так как подвести к нужной точке 12в оказалось затруднительно.

Это вторая, переработанная версия платы. Первая версия, была заказана, собрана, прошита тестовой прошивкой и тщательно проверена. Все функции работают нормально, не проверялся только интерфейс OpenTherm. По результатам тестирования в конструкцию было внесено довольно много изменений. 

Первая версия платы, которая содержит некоторые ошибки. Тем не менее, все функциональные узлы проверены и успешно работают

Данная версия будет использоваться для отладки прошивки при необходимости, после того, как второй вариант будет установлен на место постоянной дислокации.

 


Функциональность

Итак, вначале стоит рассказать какие такие функции были заложены в данную разработку.

Шина RS485

Для получения данных с различных датчиков и сенсоров выбрана шина RS485 и протокол Modbus RTU. Во первых, это позволяет, не оглядываясь на длину проводов до датчиков, расположить их самым удобным и правильным образом (например метеостанцию – на крыше).

Второй немаловажный аспект – масштабируемость. Спектр всевозможных датчиков и сенсоров на рынке для шины RS485 и протокола modbus очень широк: датчики температуры, влажности воздуха, влажности почвы, датчики уровня воды и масла, давления, скорости ветра, реле и т.д. и т.п. – практически на любой вкус, потребность и кошелек. Если нет готового устройства – всегда можно изготовить таковое самостоятельно. То есть при необходимости можно наращивать функционал системы без внесения изменений в основной контроллер, например просто добавляя внешние реле rs485/modbus.

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

Собранные данные будут не только использоваться для “внутренних надобностей” (управления отоплением), но и переданы другим устройствам автоматизации через локальный MQTT-брокер. А также часть данных отправляется на общеизвестный сайт “народный мониторинг”.

 

Шина I2С

Сейчас я не часто использую шину I2C “вне” корпуса устройства, так как длинные провода мешают её нормальной работе. Но одна из двух шин выведена на внешний разъем для возможности подключения различных датчиков при необходимости, если таковая возникнет. Вторая, (точнее первая – I2C #0) используется только для обработки расширителей GPIO, и на внешние разъемы не выведена.

 

Шина 1Wire

На внешние разъемы также выведены два подтянутых к 3,3В GPIO, к которым можно подключить несколько датчиков DS18B20 или TM-считыватель. Думаю, все хорошо знают, что это такое и для чего это нужно, и в пояснениях не нуждается.

 

Управление котлом и отоплением

Основная функция данной платы – многозонный термостат с недельным расписанием. Под словом “многозонный” здесь понимается возможность измерения (и в дальнейшем регулировки) температуры и влажности в различных помещениях. В каждой жилой комнате установлен индивидуальный датчик температуры и влажности с RS485 “выходом”, а  в дальнейшем планируется RS485-устройства для управления краном на радиаторе отопления. 

SHT30 с доступом по RS485 и дисплеем

Для управления котлом предусмотрены сразу два канала управления: выход “сухой контакт” (контакты сигнального реле) и шина OpenTherm. Зачем сразу два? Дело в том, что мой котел имеет разные контакты для запроса тепла и шины передачи данных, а это значит что я могу использовать их одновременно. Это дает возможность реализовать аварийную схему включения котла путем параллельного включения обычного механического термостата на случай неполадок с электроникой. А шина OpenTherm позволяет считывать состояние котла и управлять температурой теплоносителя, то есть реализовать “внешнюю” погодозависимую автоматику, и всегда удаленно “знать” состояние котла. И, конечно же, никто не мешает использовать только один интерфейс управления.

 

Охранно-пожарно-инженерная сигнализация (ОПС)

Кроме датчиков температуры и метеостанции, к устройству через дополнительную плату расширения можно подключить до 20 датчиков движения PIR или аналогичных (с нормально-замкнутыми контактами), до 8 линий для подключения двухпроводных датчиков дыма или протечки с питанием от шлейфа и самоблокировкой, и 4 входа с оптронами для нормально-разомкнутых концевиков или кнопок. А также имеется возможность подключения приемника SYN480R для получения данных с беспроводных датчиков 433 МГц.  Это позволяет построить свою, индивидуальную систему охраны и контроля технического состояния дома ( ОПС ). Основные функции данной подсистемы – не столько охранные, а больше для контроля технического состояния дома: контроль задымления на чердаке и на кухне, контроль протечек, контроль уровня стоков в отстойнике и т.д. И, соответственно, выдача оповещений в telegram и в виде звуковых сигналов сирены.

 

Управление освещением по датчикам движения

Но датчики движения (PIR) и открытия дверей в используются не только для ОПС, но и для управления освещением, отоплением или другой автоматикой. Это позволяет не дублировать PIR для ОПС и освещения и, кроме того, реализовать более “умные” алгоритмы, чем позволяют обычные бытовые датчики движения, например управление освещением с учетом сразу нескольких датчиков. А датчики открытия окон и раздельное управление отоплением по комнатам позволяют не “топить улицу” при проветривании. Для управления нагрузкой на плате предусмотрены маломощные MOSFET-ы с открытым стоком, к которым можно подключить “внешние” обычные или твердотельные реле (симисторы).

 

Управление вентиляцией в подвале и насосом водоснабжения

Выходы с открытым стоком позволяют управлять не только освещением, но и другой нагрузкой. Через промежуточные реле или симисторы, разумеется. У меня это вентилятор в подвале и насос водоснабжения. Данные с датчика давления для управления насосом поступают через ту же самую шину RS485.

 

Проводной дверной звонок с подсветкой и обратной связью

Ранее я, как и большинство, использовал самый обычный беспроводной звонок 433 МГц, но у него есть существенный недостаток – батарейки как правило “садятся” в самый неподходящий момент. Кроме того, хотелось получать уведомления о звонках, когда хозяев нет дома. Поэтому был приобретен проводной звонок 12в и реализована схема для его запуска. Конечно, можно купить готовый домофон, но зачем? Если  можно интегрировать звонок в свою систему и связать его с управлением освещением во дворе, например. Нажали кнопку – раздался звонок, замигала подсветка кнопки, включился свет во дворе, хозяева получили уведомление на телефоны.

 

Контроль наличия сетевого напряжения и напряжения на аккумуляторе

В современном мире почти все “завязано” на электричестве. К сожалению, иногда это самое электричество не подвозят вовремя и оно неожиданно заканчивается. Для контроля наличия сетевого напряжения предусмотрен вход для подключения внешнего датчика на оптроне, что позволяет получать уведомления о необходимости запуска резервного бензинового генератора. Для аварийного питания сетевого оборудования и самого устройства предусмотрен аккумулятор, напряжение на котором измеряется с помощью встроенного ADC. Да, ADC на ESP32 не ахти какое, но измерить напряжение 10~15В его возможностей вполне хватит. А внешнее реле позволяет легко организовать принудительный перевод на питание от аккумулятора, что дает некое подобие реализации контрольно-тренировочных циклов. 

 


Функциональные узлы

Теперь рассмотрим подробнее отдельные узлы платы.

Схема питания

На плату подается питание напряжением 12В ( а если точнее – 13,5В ) от блока питания с резервированием от свинцового аккумулятора. А это значит нам нужно понизить эти самые 12В как минимум до 5В, что представляет собой довольно непростую задача для линейных стабилизаторов напряжения, которые гасят излишки “на себе”. Поэтому на первом этапе был применен импульсный преобразователь DC-DC LM2596T-5.0. Он выдает напряжение 5,0В, которое используется для питания реле, внешней части шины RS485 и для некоторых исполнительных устройств. 

Схема включения использована стандартная, из технического паспорта на микросхему

Второй каскад – линейный стабилизатор на BA33BC0, он понижает напряжение с 5В уже до 3,3В, которое используется как для питания самого микроконтроллера, расширителей GPIO, и некоторых внешних исполнительных устройств. 

Схема питания

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

 


Микроконтроллер и распределение GPIO

Сердцем платы служит микроконтроллер классической линейки Espressif – ESP32-WROWER-IB или ESP32-WROWER-IE. Насколько вы помните, это обычный ESP32, оснащенный дополнительной микросхемой внешней памяти ( дополнительную информацию о версиях модулей вы можете найти здесь ). В моем случае это ESP32-WROWER-IE MFN16R8, то есть оснащенный 8Мб внешней RAM и 16Мб Flash. Дополнительная память позволит снизить нагрузку на основную RAM при хранении очередей отправки сообщений и данных, а дополнительная Flash позволит мне хранить какие-либо постоянные данные в файлах без использования SD-карты. Следует при этом учитывать, что в прошивке напрямую доступно только 4Мб внешней RAM, а доступ к оставшейся 4Мб осуществляется только путем танцев с бубном.

Модуль по умолчанию настроен на работу с внешней антенной, поэтому выреза под печатную антенну нет. Если вы планируете использовать печатную антенну модуля, лучше предусмотреть дополнительный вырез под антенной.

Получилось так, что конкретно данный модуль, хоть и маркирован как N16R8, на деле оказался как N4R8. Китайцы “шалят”. То ли крышечка перепаяна, то ли подделка то ли еще что…

Шины I2C использованы две. На I2C#0 подключены только расширители GPIO, дабы не вносить помех в их работу при проблемах с внешними датчиками. I2C #1 выведена “наружу” и к ней могут быть подключены внешние сенсоры. Но основная шина для подключения датчиков – все-таки RS485 /  Modbus RTU.

Встроенные GPIO микроконтроллера были использованы так:

  • GPIO0 – линия SCL (тактовые сигналы) “внешней” шины I2C #1. Это strapping pin, который управляет загрузкой прошивки в микроконтроллер. По умолчанию должен быть подтянут к питанию. Но для корректной работы I2C мы и так должны подтянуть его к питанию, поэтому мы вполне безопасно можем его использовать в данном конкретном случае. А после старта МК его можно использовать как угодно.
  • GPIO2 – использован как выход для управления светодиодом подсветки кнопки дверного звонка через MOSFET IRLML0030. Это strapping pin, который также как и GPIO0, управляет загрузкой прошивки в микроконтроллер. По умолчанию на нем должен быть “ноль”, поэтому мы безопасно можем подтянуть его к земле резистором (он нужен для разрядки емкости затвора MOSFET-а). 
  • GPIO4 – используется для принудительного сброса расширителей MCP23017. По умолчанию на нем “ноль”, поэтому при запуске сразу все MCP23017 будут автоматически сброшены и “физически” заблокированы, и для разрешения их работы мы должны записать в данный вывод единичку. Эта схема работы гарантирует сброс MCP23017 даже при программном сбросе микроконтроллера.
  • GPIO5 – шина 1WIRE номер 2. Этот вывод я оставил на случай подключения дополнительного считывателя TM. Это stapping pin, который используется для управления внешней flash-памятью, подключенной внутри модуля к чипу – “Timing of SDIO Slave”. По умолчанию на нем высокий уровень. А это значит, что как и в случае с GPIO0, мы можем безопасно подтянуть его к питанию.
  • GPIO12 – использован для подключения внутреннего пассивного зуммера через MOSFET. Зачем MOSFET? Потому что пассивных и громких зуммеров на 3В у меня нет. Это очень важный stapping pin, который управляет напряжением питания внешней flash-памяти. Если при сбросе MCU на нём установлен высокий уровень, напряжение флэш-памяти (VDD_SDIO) составляет 1,8 В вместо 3,3 В по умолчанию, то есть flash-память будет просто не доступной и микроконтроллер не запустится. Поэтому мы должны обязательно подтянуть этот вывод к земле.
  • GPIO13 –  выход управления котлом через “сухой контакт” (экономичное малогабаритное сигнальное реле). Обычный PIN, но по умолчанию на нем логический ноль, но это даже хорошо – случайного запуска котла при старте МК не произойдет.
  • GPIO14 – шина 1WIRE номер 1, к которой подключены датчики DS18B20. Один из них установлен прямо на плате, дабы контролировать температуру в боксе, второй – на выходном коллекторе котла. При необходимости вы можете подключить еще несколько датчиков на ту же самую шину.
  • GPIO15 – линия SDA (данные) “внешней” шины I2C #1. Это strapping pin, который управляет отладочными сообщениями при запуске микроконтроллера. Не сильно “важный” strapping pin – если задано значение “0“, отключаются загрузочные сообщения, распечатываемые загрузчиком. Имеет внутреннюю слабую подтяжку к питанию, поэтому по умолчанию на данном выводе будет высокий уровень. Но и мы подтянули его к +3,3В, так что проблем точно не предвидится.
  • GPIO16 и GPIO17 на модулях WROVER не могут быть использованы. Никак. Пропускаем.
  • GPIO18  – обычный GPIO, который используется как вход прерываний от расширителя входов MCP23017 #1
  • GPIO19 – обычный GPIO, который используется как вход прерываний от расширителя входов MCP23017 #2
  • GPIO21 и GPIO22 – по традиции используются шиной I2C #0, через которую подключены расширители MCP23017 и микросхема часов реального времени DS3231. Ничего другого сюда подключаться не будет, поэтому её контакты не выведены на разъемы и клеммы.
  • GPIO23 – вход с внешнего приемника 433 МГц
  • GPIO25 – вход RXD приемника MAX3485 шины RS485
  • GPIO26 – вход RXD шины Open Therm
  • GPIO27 – выход TXD шины Open Therm
  • GPIO32 – выход TXD передатчика MAX3485 шины RS485
  • GPIO33 – выход управления потоком RTS шины RS485 (переключение “прием” / “передача”)
  • GPI34вывод “input only”, используется для кнопки дверного звонка через оптрон
  • GPI35 – вывод “input only”, используется для подключения к внешнему сигнализатору утечки газа через оптрон
  • GPI36 – вывод “input only”, используется контроля наличия сетевого напряжения через внешний оптронный модуль
  • GPI39 – вывод “input only”, я его использую как ADC для измерения напряжения на аккумуляторе через делитель, понижающие напряжение до допустимого (не более 3В)

Как видите, я использовал вообще все разрешенные GPIO микроконтроллера, с учетом их особенностей. Для проверки работоспособности всех этих GPIO я написал тестовую прошивку, которую можно скачать с GitHub.

 


Дополнительные GPIO

Дополнительные входы и выходы реализованы уже через расширители входов MCP23017. Одна из MCP23017, которая работает только “на выход”, расположена на основной плате и управляет следующим внешним оборудованием:

  • 8 выходов open drain для управления нагрузками через внешние реле или SSR. Небольшие реле довольно удобно размещать прямо в распределительных коробках освещения, и это гораздо проще, чем тянуть толстые провода 220В до блока управления.
  • 4 выхода для подключения светодиодов: системный, отопление, внимание и подсветка TM / переключение режимов охраны
  • 1 выход с сигнальным реле для сброса двухпроводных шлейфов охраны путем временного снятия питания со всех шлейфов
  • 1 выход с сигнальным реле для запуска звонка
  • 2 выхода open drain для подключения сирены и светового извещателя

На дополнительной плате расположены еще две MCP23017, к которым можно подключить до 20 датчиков движения PIR или аналогичных (с нормально-замкнутыми контактами), 8 линий для подключения двухпроводных датчиков дыма или протечки с питанием от шлейфа и самоблокировкой, и 4 входа с оптронами для нормально-разомкнутых концевиков или кнопок. При изменении состояния любого из входов выдается сигнал прерывания для оповещения микроконтроллера.

На данной плате номиналы элементов не выведены, так как расположены очень плотно.

Все входы снабжены клеммами KF128 с шагом 2,54 мм “под винт”, которые я использую в своих конструкциях очень давно. Они очень хорошо подходят для подключения витой пары и проводов сечением до 0,5 мм2, а также занимают весьма мало места на печатной плате.

Схема подключения расширителей GPIO с учетом платы расширения. Собственно схемы входов и выходов не изображены – см. ниже

Схему для подключения датчиков движения я использую уже достаточно давно, и проблем с ними никогда не наблюдалось. Транзистор здесь по сути нужен для приведения входного сигнала 12В к уровню микроконтроллера 3,3В. TVS диод защищает от повышенного напряжения на входе, вместо резистора 33 Ом я устанавливаю самовосстанавливающийся предохранитель. Резистора R4 на плате нет, вместо этого я использовал встроенную в MCP23017 подтяжку – это не экономия на резисторах, это экономия места.

Для подключения датчиков с нормально – замкнутыми контактами

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

Для подключения двухпроводных датчиков с питанием по шлейфу

При существенном повышении тока в цепи детектора открываются оба транзистора и подтягивают ножку микроконтроллера к земле. Для сброса линии используется реле, расположенное на основной плате.

 


Входы с оптронной развязкой

GPIO34 и GPIO35 на основной плате и 4 оптронных входа на дополнительной могут быть использованы для подключения любых нормально разомкнутых контактов. Схема очень простая:

При замыкании контактов BTN (на схеме) зажигается светодиод оптрона, его транзистор открывается и подтягивает ножку микроконтроллера к питанию, то есть на GPIO устанавливается логическая 1. Конечно, это не настоящий царь настоящая опторазвязка, так как общий провод и линия питания остаются гальванически связанными с источником сигнала. Но для удаленных кнопок и подобных им применений может служить простой и эффективной защитой от наведенных на кабель помех. Аппаратного гашения дербезга контактов не предусмотрено и осуществляется чисто программным способом, но оптрон сам по себе несколько сглаживает это явление из-за инерционности.

 


Выходы open drain для управления нагрузкой

Для управления реле и другой нагрузкой предусмотрены транзисторные каскады на MOSFET транзисторах с N-каналом IRLML0030TRPBF. Этот транзистор может коммутировать ток до 5А и напряжении до 30В. Самое главное – транзистор открывается при напряжении на затворе 1,3~2.3, а это означает что он будет полностью открыт сигналом логической единицы на выходе ESP. 

Для управления мощной и высоковольтной нагрузкой, конечно же, этого транзистора не хватит. Особенно, если учитывать, что китайские IRLML0030 могут совсем ими не являться.  Поэтому к контактам OD1 ~ OD8 (open drain) можно и нужно подключить любое электромагнитное реле или SSR (“твердотельное реле” или симисторный выключатель). Сами реле размещены непосредственно около коммутируемой нагрузки, например в щитке или монтажной коробке проводки освещения. Это зачастую гораздо удобнее, чем располагать мощные реле непосредственно на плате и тянуть к ним соответствующую проводку.

Я протестировал первый собранный вариант платы со всеми имеющимися в моем распоряжении реле, в том числе довольно мощными (noname на DIN-рейку с контактами 30A) – нагрева транзисторов не наблюдалось, реле включаются и отключаются четко. Но токи в катушках реле редко превышают сотню мА, и с такими токами транзисторы успешно справляются.

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

 


Шина RS485

Поскольку мы имеем дело с трех-вольтовым контроллером, то и применять должны версию приемопередатчика, рассчитанную на питание 3,3В. Например MAX3485, ADM3485, SP3485 или CS48520S. При этом “внешнюю” часть мы уже можем подтянуть и к +5В.

Типовая схема включения

В данном случае применено принудительное переключение режима “прием” / “передача”, что на мой взгляд, гораздо надежнее автоматического (созданного с помощью диода и конденсатора), но требует дополнительной ножки микроконтроллера.

Подробнее обо всем этом изложено тут.

 


Шина Open Therm и управление котлом

На плате также имеется широко распространенная схема интерфейса OpenTherm на одном транзисторе:

На плате это выглядит так:

Но, честно говоря, вряд ли я буду применять в прошивке именно эту часть схемы, так как у меня уже имеется готовый адаптер RS485 Modbus – OpenTherm промышленного изготовления, уже с разъемами и описанием регистров. Так как чисто программно, мне будет гораздо проще организовать в прошивке обмен через modbus, если он уже и так присутствует для других надобностей. Для меня это, так скажем, резервный вариант, но вы вполне можете использовать данный вариант как основной.

 


Часы реального времени DS3231SN

В принципе, ESP32, если она подключена к сети интернет, не нужна микросхема часов. Актуальное и точное время в большинстве случаев можно получить с серверов NTP в интернете. Но бывают ситуации, когда это невозможно: например при длительных сбоях в сети электропитания может пострадать сетевое оборудование провайдера и сервера SNTP  окажутся недоступны. И поэтому, когда алгоритмы работы плотно завязаны на времени и расписаниях, лучше иметь свой собственный источник точного времени, для подстраховки. Поэтому на плате предусмотрена микросхема DS3231SN с собственным источником резервного питания CR2032. Это микросхема уже содержит внутри себя кварцевый резонатор, поэтому для ее работы не потребуется более ничего, кроме батарейки.

Минимальная схема включения


 


Разъемы и периферия

Что и как подключать к данной плате?

Основная плата

POWER. Два разъема для подачи питания на плату. Использовать можно любой или оба сразу. Данная плата будет использоваться совместно с низковольтным ИБП 12В 60Вт.

3V3. Выход для питания периферии с напряжением основной логики, например для устройств подключаемым к шинам I2C или 1Wire.

CK220 или ChecK 220. Вход для контроля наличия сетевого напряжения (без измерения его параметров). К данному разъему подключается готовый модуль, как на фото ниже, установленный в щитке. Хотя модуль имеет 3 контакта выхода, можно использовать только 2 из них. если организовать подтяжку входа к +3V3 на основной плате.

AKK. Вход для измерения напряжения на аккумуляторе. С данного разъема напряжение через делитель подается на ADC ESP32 для его измерения. Никаких особых хитростей. И хотя ADC на ESP32 обладает невысокой точности, для измерения напряжения его вполне хватит.

RX433. Вход для подключения приемника SYN480 для сигналов 433 МГц. Сам приемник расположен вне корпуса, в котором установлен контроллер, так как корпус металлический. На плате приемника расположен дополнительный линейный стабилизатор 3,3 В, поэтому на разъем выведены 5В – это следует обязательно учитывать!

SYS LEDS. Разъем для подключения трех “встроенных” светодиодов с общим анодом: “системный”, “отопление”, и “внимание”.

LED. Еще один светодиод, но уже “внешний”. Его можно использовать, например, при подключении TM-считывателя. Или для иных целей.

A 485 B. Шина RS485. На разъем дополнительно выведено питание 12В для питания маломощных датчиков и сенсоров непосредственно по “витой паре”.

BOILER. Выход реле “сухой контакт” для перевода котла в режим отопления. Полярность подключения значения не имеет. Замыкание контактов приводит к включению режима отопления на котле, размыкание – к переводу его в летний режим. Для аварийных ситуаций предусмотрен выключатель, с помощью которого можно принудительно включить отопление.

OT. Шина OpenTherm. Для подключения к котлу и обмена с ним информацией. В текущей прошивке пока никак не используется. Полярность подключения значения не имеет.

1WIRE. Шина 1Wire для подключения температурных датчиков DS18B20 с нормальным (не паразитным) питанием. Можно подключить несколько датчиков на одну шину, один такой датчик уже распаян на плате.

I2C. Внешняя шина I2C, к которой можно подключить различные датчики. Только не увлекайтесь с длиной проводов.

TM. Ещё одна шина 1Wire, изначально зарезервированная под считыватель TM-ключа, с помощью которого переключается режим охраны. Но можно использовать и для подключения датчиков DS18B20.

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

BOORBTN. Разъем для подключения условно герметичной кнопки со светодиодной подсветкой. Используется для дверного звонка.

FL+SR. Разъем для подключения оптико-звукового извещателя типа “Маяк-12” и иже с ними. То есть сирены со световым маячком. 

OD1 ~ OD8. Восемь выходов “открытый сток” для подключения “навесного оборудования” – реле, SSR и маломощной нагрузки 12В. Снабжены защитными диодами для защиты от самоиндукции катушек реле.

I2C#0 EXP и +12 SM 3V3 GND. Разъемы для подключения платы расширения (см. ниже).

DBELL DC. Выход для подключения проводного дверного звонка с питанием 12В. 

 

Плата расширения

1A0 ~ 1A7, 2А0 ~ 2A1, 1B0 ~ 1B7, 2B6 ~ 2B7. Входы для подключения стандартных трехпроводных шлейфов датчиков с питанием 12В, например PIR или герконов. Средний вывод подтянут к +12В.

F2 ~ F5 и S2 ~ S5. Входы для подключения двухпроводных шлейфов с питанием по шлейфу и самоблокировкой при срабатывании. Например это могут быть датчики дыма или датчики протечки.

A6, A7, B0, B1. Обычные входы для нормально разомкнутых датчиков или контактов. Точно такие же, как и на основной плате (GAS, DOORBTN). Используйте их по своему усмотрению.

 


Сборка и отладка

Тестовую прошивку для данной платы можно скачать с GitHub. С помощью этой прошивки можно проверить почти все функциональные узлы платы.

Чертежи платы находятся в подкаталоге layouts проекта. Я заказывал данные платы у китайцев здесь, по цене примерно 1750 руб. за пять штук, итого 3500 за всё. Время изготовления – 20 дней от момента заказа до получения посылки почтой (через пятерочку еще быстрее). Вначале я честно пытался поддержать отечественного производителя и заказать платы на pcbrussia.ru, и там мне озвучили следующие условия: одна плата (5 шт.) – срок изготовления 17-27 рабочих дней, сумма с доставкой 2 820 руб.

Себестоимость “по деталям и материалам” для основной платы получилась следующая:

Стоимость была рассчитана исходя из того, что большинство деталей когда-либо куплены в Китае. Желтым цветом выделены позиции, которые на текущий момент невозможно купить на AliExpress, и их придется заказывать в Чип&Дип-е. В расчет не включена стоимость сборки и пайки.

Сборка у меня производилась вручную, с помощью паяльной пасты и паяльного фена, настроенного на минимальную производительность вентилятора. Сборка основного контроллера заняла у меня около 3 ~ 4 часов вечером. Правильно собранная плата заработала сразу, но микроконтроллер и микросхемы все-таки стоит установить в последнюю очередь, вначале стоит подать питание и убедится, что стабилизаторы и все выходные ключи работают нормально.

 

Как прошить микроконтроллер на данной плате с компьютера

На плате не предусмотрено USB-интерфейса для программирования, поэтому придется использовать “внешний” адаптер, для подключения которого предусмотрен разъем UART0. Обратите внимание: USB-TTL адаптер должен полноценно поддерживать 3,3В на линиях данных RX и TX. Я пользуюсь таким:

Для перевода в режим программирования нажмите одновременно кнопки RESET и BOOT, а затем отпустите RESET при нажатой BOOT. После указанной процедуры можно нажимать кнопку upload компилятора. И не забудьте сбросить МК после завершения записи. Благодаря тому, что кнопки расположены рядом, это облегчает процедуру перевода контроллера в режим программирования одним пальцем.

 


На этом пока всё. Вполне возможно, я ещё напишу про программное обеспечение для данной конструкции в отдельной статье. До следующих встреч на сайте и на telegram-канале! 

💠 Полный архив статей вы найдете здесь


Пожалуйста, оцените статью:
[ 5 из 5, всего 14 оценок ]

16 комментариев для “Универсальный контроллер для умного дома”

  1. Спасибо, такие статьи нужны. Даже хотелось взять консультацию, по переработки платы. Часть у меня в теории лучше, а часть у вас уже работает)

  2. Николай

    Шелкография это конечно здорово, но схема всё таки лучше читается. Может у Вас будет время и немного желания её нарисовать и выложить? Думаю многие будут Вам благодарны за это.

    1. Не вижу смысла. Всё равно схемы сейчас рисуются не как раньше, на общем листе, а кусочками – пазлами, из которых потом вам самому предстоит собрать общую картинку. Так вот, в статье уже присутствуют почти все такие кусочки. Кроме, пожалуй обвязки микросхем MCP23017 и DS3231, согласен. Постараюсь сегодня в обед добавить и эти “кусочки”. Ну а как подтянуть линии SDA и SCL к питанию, думаю, никому не интересно….

      1. Николай

        Да, общую схему и не надо, здесь я согласен с Вами. Для современных устройств они будут довольно громоздки.
        Я, как раз, и имел ввиду «кусочки пазла». При первом прочтении статьи их не было, или я их не увидел, читал с телефона.
        За статью спасибо большое. Побольше бы таких статей.

  3. Александр

    А можно у вас купить комплект плат? Я давно хочу сделать подобное но китайские платы меня тоже не устраивали.

    1. Теоретически можно, у меня останутся как минимум 2 комплекта, но есть нюансы.

      Во первых, Вам нужна уже собранная плата или “чистая” (без элементов)? Сегодня я начну собирать второй комплект, а на третий у меня уже не хватит некоторых деталей, придется дозаказывать. А клеммники, наверное, уже и не купить на али, придется в ЧипИДипе, где они существенно дороже.

      Во вторых, на тех платах, что у меня сейчас есть, есть дефекты. На основной плате я сам налажал, пришлось подколхозить, но дефект не видно под разъемом. А плату расширения немного испортил китаец при при производстве – вчера “ругался” с ним по этому поводу. Вы сами можете заметить этот дефект, сравнив фото и рисунок платы. Ожидается, что все будет работать как надо, но тем не менее – “осадочек остался”.

      Если есть желание – напишите мне в телеграм @kotyara1971, обсудим

      1. Александр

        Чистые платы, т.к. часть компонентов у меня есть, остальное доберу. напишу в телеграмм.

  4. Аркадий

    Отличная работа!
    У меня вопросы:
    В каком софте делали плату?
    Не можете ли поподробнее рассказать про китайскую метеостанцию, что на вашем фото? Ну, или хотя бы ссылочку. Есть ли в составе дождемер?
    Вы так же упоминаете про бесперебойник. То же хотелось бы подробностей.
    И ещё! Как вам удалось припаять модуль ESP? У него на “брюхе” есть площадки под пайку. В связи с этим есть опасения, что при нагреве феном первая отпааяется крышечка.

    1. Добрый день.
      Отвечу по пунктам.
      1. Sprint Layout 6. Продавцу отправлял сам lay6, он уже сам переделал его в gerber
      2. Про станцию будет небольшая статья. Дождемер есть, но… пока мало данных о его точности и надежности. Пока тестирую
      3. Хм… Спасибо за идею для статьи, напишу
      4. Сейчас уже не вспомню, но прочел в каком-то оф.документе на ESP32, что донышко можно не паять. Оно нужно только для передачи тепла от чипа. Поэтому оно должно плотно прилегать к основной плате. С этой же целью (отвод тепла) площадка напичкана переходными отверстиями. На платках DEVKIT-C эту площадку тоже не паяют.
      Так что прикладываем ESP32 к плате ( без пасты! ), прижимаем пинцетом плотно. Наносим плату на 4 крайние контакта, и прогреваем паяльником. Нужно следить, чтобы сама паста не попала в зазор, иначе там могут застрять шарики. Потом аккуратно наносим пасту на остальные выводы, прогреваем и отмываем

      1. Аркадий

        Спасибо. Насчёт пайки я так и предполагал, что эту площадку не нужно вовсе паять. Смущало то, что по модулю всё-таки гигагерцы гуляют. На крайний случай предполагал положить туда тонкую фольгу из сплава Розе и осторожно прогреть на термостолике. Но, к сожалению, пока руки до этого ещё не дошли, потому и интересуюсь, как правильно.

        1. Откуда там гигагерцы? Сам чип может работать на 240MHz, но это за счет внутреннего умножителя частоты, я так понимаю. Кварц там вроде бы или 40 или 80 MHz, но могу ошибаться, так как сильно в этом не разбирался (незачем, просто где-то что-то в sdkconfig попадалось, если не путаю). Так что плата с ESP32 вполне прощает многие ошибки. Я не великий специалист в разводке плат, но у меня пока никогда не возникало проблем из-за того, что неправильно разведено.

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

    1. Это да. НО. В даташите сказано:

      Soldering Pad 39 to the Ground of the base board is not necessary for a satisfactory thermal performance. If users do
      want to solder it, they need to ensure that the correct quantity of soldering paste is applied.

      То есть “если хотите – паяйте. но это не обязательно”

  6. пришла такая идея. а можно ли объединить сигналы scl i2c ? это сэкономило бы 1 пин контроллера. конечно при условии одинаковой скорости передачи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *