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

Доброго здравия, уважаемые читатели!

Представляю вашем вниманию относительно несложный проект платы на ESP32 для самостоятельного изготовления. Плата спроектирована под готовый пластиковый корпус с выштамповкой под дисплей LCD 1602 и три кнопки. Поэтому самодельное устройство при аккуратной сборке будет иметь вполне презентабельный вид.

 

Дополнительно можно закрыть черный металлический каркас дисплея бумагой и (или) пленкой, и например, распечатать пояснительные надписи.

 

Общие сведения

  • Управляющий микроконтроллер – любой модуль ESP32-WROOM классической линейки. Это дает возможность подключения устройства к сети и удаленного управления.
  • Для вывода информации на экран используется недорогой текстовый дисплей 1602А (2 строки по 16 символов в каждой) с I2C интерфейсом. В проекте можно использовать широко распространенные пяти-вольтовые версии любого цвета без I2C-интерфейса.
  • Три кнопки для локального управления (например MODE, PLUS и MINUS).
  • Для управления нагрузкой предусмотрено маломощное сигнальное реле, его основная задача – передача сигнала управления на внешнее оборудование вроде газовых котлов. Но если вам необходимо управлять более мощной нагрузкой – предусмотрена возможность переоборудовать плату на выход “Open Drain”, что дает возможность подключения внешних твердотельных или обычных реле. Можно также использовать любой внешний модуль реле с управлением по шине RS485. Но можно вообще не устанавливать реле, а превратить устройство в личную метеостанцию с выводом данных на экран, а интерфейс RS485 позволяет подключить множество разнообразных датчиков.
  • Для подключения внешних датчиков предусмотрены шины 1-Wire (один или несколько популярных DS18B20), а также RS485 Modbus или I2C. Но из-за ограниченных размеров корпуса придется выбирать – либо RS485, либо I2C – смотря что вам удобнее. Количество датчиков в прошивке не ограничено – можно контролировать температуру в нескольких помещениях, климат снаружи дома, а также температуру теплоносителя.
  • Встроена микросхема часов реального времени для обеспечения возможности работы по расписанию без доступа в сеть интернет. Но если расписания вам не нужны – её можно не устанавливать.
  • Питание осуществляется  от любого внешнего источника питания напряжением DC 8~36В, внутри имеется импульсный DC-DC преобразователь 5В.

 

Для каких проектов можно использовать данное устройство

  • Термостат для управления газовым котлом (с помощью встроенного сигнального реле) или электрическим котлом / теплым полом / нагревателем (с помощью внешнего реле).
  • Устройство удаленного мониторинга температуры для дачи, квартиры, курятника, гаража и т.д.
  • Метеостанция с отправкой данных на “народный мониторинг”
  • Термометр для самогонного аппарата
  • Другие подобные проекты, где требуется ESP32 и дисплей.

 

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

 


Основные компоненты

1. Корпус

Когда я проектировал данное устройство, у меня ещё не было 3D-принтера, и передо мной стояла задача найти корпус, в котором можно было бы достаточно аккуратно разместить плату и дисплей LCD1602A. Почему именно LCD1602A – потому что он прост, дешев, имеет крупные символы, подсветку и не выгорает со временем. Корпусов с вырезом под LCD1602A не так уж и много. Я нашел единственный вариант: коробку 86 * 86 * 26 мм с вырезом под LCD1602 и три (или четыре) кнопки.

Его размеры таковы:

Стоит он очень не дорого (порядка 200 руб. с доставкой) и легко ищется по строке “box 86 lcd 1602”. Причем есть варианты с вырезом под провода на задней стенке, либо со сплошной задней стенкой – ну это уж как кому удобнее.

Мне попадались два варианта корпуса: в одном из них высота стойки под крепление платы составляет 11 мм, во втором – 13 мм. Соответственно в первый тип корпуса нужны кнопки высотой 13 мм, во второй – 15 мм. Ну и конденсаторы в модуле питания приходится выбирать пониже в первом случае.

 

2. Микроконтроллер

В качестве основного чипа платы может использован любой доступный модуль классической линейки ESP32-WROOM-32, ESP32-WROOM-32D, ESP32-WROOM-32U, ESP32-WROOM-32E или ESP32-WROOM-32UE. Учитывая компактные размеры корпуса, логичнее использовать модули с печатной антенной (с индексами D, E или без индекса). 

Применение платы типа DevKitC в данном случае исключено из-за габаритов выбранного корпуса.

 

2. Интерфейсы и GPIO

На микроконтроллере ESP32 задействованы следующие интерфейсы:

  • UART0, как и положено, используется для отладки и программирования, контакты TXD0 и RXD0 выведены на разъем-гребенку
  • Контроллер I2C #0 (используются выводы GPIO 18, 19) задействован “внутри корпуса” – для связи с LCD 1602A и часами DS3231. 
  • Контроллер I2C #1 (используются выводы GPIO 26, 27) могут быть использованы для подключения многочисленных датчиков, способных работать с этой шиной
  • Шина OneWire (GPIO 33) может быть задействована для подключения “народных” датчиков DS18B20 – одного или “гирляндой”.
  • Шина RS485 Modbus позволяет не заботиться о длине проводов до подключаемых датчиков. А кроме того, через modbus можно и управлять нагрузкой, если не хватает одного реле на плате.

На плате задействованы следующие выводы микроконтроллера:

Схема выводов в виде таблицы Excel

И в виде простой таблицы:

GPIO Strapping pins Подтяжка Группа Назначение
EN Reset +3.3В 10k Служебные выводы Аппаратный сброс микроконтроллера
TXD0, RXD0 UART0  – Порт для программирования и отладки
GPIO12 VDD_SDIO  GND 10k Должен быть подтянут к GND
GPIO 0 Boot mode  +3.3В 10k
но можно обойтись и встроенной подтяжкой
Кнопки управления Кнопка “режим”
GPIO 5  Timing SDIO Кнопка “минус”
GPIO 15  Logs Кнопка “плюс”
GPIO 18  – Светодиоды Светодиод “нагрузка”
GPIO 19  – Системный светодиод
GPIO 13  – GND 100k Нагрузка Управление нагрузкой
GPIO 25  – Активный зуммер 3,3В
GPIO 33  – +3.3В 4.7k Шина OneWire Подключение датчиков DS18B20
GPIO 21  – +3.3В 10k Шина I2C #0
системная
Линия данных (SDA)
GPIO 22  – +3.3В 10k Линия синхронизации (SCL)
GPIO 26  – +3.3В 4.7k Шина I2C #1
датчики
Линия данных (SDA)
GPIO 27  – +3.3В 4.7k Линия синхронизации (SCL)
GPIO 17  – Шина RS485 Вход передатчика RS485
GPIO 16  – Управление режимом передачи
GPIO 4  – Выход приемника RS485

Линии I2C #0 подтянуты к питанию 3.3В через резисторы 10 кОм и снабжены преобразователями уровней на 5В. Линии I2C #1 и OneWire подтянуты к питанию 3.3В через резисторы 4,7 кОм, так как длина проводов может быть достаточно большой. Для кнопок управления на плате предусмотрены резисторы подтяжки к питанию, но… их можно не устанавливать, а вместо этого задействовать внутреннюю подтяжку.

Для подключения внешнего оборудования и питания были выбраны угловые разъемы XH2.54 – они выведены на нижнюю сторону платы. 

К сожалению, габариты корпуса не позволяют одновременно разместить сразу все разъемы интерфейсов, поэтому мне пришлось отказаться от одного из них и сделать выбор подключения датчиков RS485 или I2C с помощью перемычек из припоя:

 

  • Обведенные желтым перемычки позволяют вывести на разъем Open Drain вместо сигнального реле
  • Красные перемычки позволяют выбрать интерфейс – I2C (как на фото) или RS485
  • Синяя перемычка позволяет выбрать напряжение питания, подаваемое на интерфейсный разъем – 3.3В (как на фото) или 12В

 

4. Интерфейс RS485

Интерфейс RS485 Modbus RTU работает через контроллер последовательного порта UART1, при этом используется трехпроводная схема подключения к МК с принудительным переключением режима “прием-передача” на GPIO 4, 16, 17. Схема включения MAX3485 (или её заменителя) совершенно стандартная и без изысков:

Приемопередатчик RS485

 

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

 

5. Дисплей

В проекте использован весьма известный и популярный символьный дисплей 1602А без дополнительной платы I2C интерфейса.

Почему выбран монохромный и довольно устаревший дисплей? По нескольким причинам.

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

 

Поскольку толщина корпуса не позволяет разместить дисплей вместе с покупной платой интерфейса I2C, пришлось перенести схему I2C-интерфейса на основную плату устройства. А поскольку версию дисплея для 3.3В найти в продаже бывает довольно сложно (иногда даже бывает так, что вместо заказанного 3.3В дисплея китайцы присылают обычную 5В-версию), то я добавил несложную схему согласования уровней для “внутренней” шины I2C на полевых транзисторах. Да и просто у меня пятивольтовых версий дисплеев накопилось гораздо больше.

Схема подключения почти ничем не отличается от схемы соответствующего модуля, за исключением пары “согласующих” транзисторов на линиях SDA и SCL:

Схема подключения дисплея

Для работы с дисплеем используется “нулевая” шина I2С (для датчиков можно использовать другую). 

 

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

Если в прошивке устройства будет использоваться работа по времени или расписания, есть некоторый смысл установить микросхему часов реального времени DS3231:

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

Часы могут пригодится в автономном режиме, когда нет доступа к сети интернет и NTP-серверам. Для поддержания точного хода часов в отключенном режиме предусмотрен разъем для подключения “ноутбучной” батареи CR2032. ЧРВ подключены к тому же контроллеру, что и дисплей.

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

 

7. Управление нагрузкой

Для управления нагрузкой предусмотрено маломощное сигнальное реле, например HFD4/5 или аналогичное.

 

Конечно, такое реле не способно коммутировать 240В и большие токи (не более 2А при 30В) – выбор в данном случае был обусловлен тем, что изначально устройство предназначено для дистанционного контроля температуры в дачном доме и управления газовым котлом. Поэтому, чтобы управлять мощной нагрузкой, потребуется использовать любой внешнее реле, способное работать при напряжении 5В, например твердотельное или промежуточное на DIN-рейку.

 

При использовании устройства с внешнем реле не нужно устанавливать на плату сигнальное реле, а вместо этого замкнуть припоем две перемычки на плате (обведены желтым):

При подключении внешнего твердотельного реле соблюдайте полярность!

 


Вариант 1: изготовлено методом ЛУТ

Изначально был изготовлен вариант под изготовление методом ЛУТ. Я не буду подробно на нем останавливаться, так как он не слишком сильно отличается от окончательного варианта. Но вдруг кто-то захочет поэкспериментировать.

Схема не представляет собой ничего сложного. Все узлы – совершенно “стандартные”.

На схеме не отображены контакты для программирования ESP32 и разъем реле.

Плата имеет два последовательно включенных линейных стабилизатора: L7805 (выходное напряжение 5В) и BL1117-33 (выходное напряжение 3.3В). Дисплей, микросхема-расширитель GPIO PCF8574 и реле – запитаны от пяти вольт, ESP32, модуль RS485 и “внешняя” шина I2C – от 3,3В. Линейный стабилизатор L7805 при входном напряжении 12В довольно ощутимо греется.

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

Честно говоря, при первом проектировании я немного напартачил, пришлось дорабатывать кое-что прямо в процессе отладки, да и качество ЛУТ-а в тот день сильно подвело, так что первый экземпляр получился хоть и полностью рабочим, но выглядит “так себе”.

 

Чертежи плат в двух вариантах ниже (для стабилизаторов 7805 и 1117-5.0):

Если вы вдруг решите повторить данный вариант – скачать файлы можно здесь.

 


Вариант 2: фабричное производство

Во втором варианте я заменил почти всю “рассыпуху” (резисторы, конденсаторы, транзисторы) на безвыводные, разместив их на основной стороне платы. Избавился от модуля RS485, разместив необходимые для этого компоненты на основную плату. 

Схема для данного варианта устройства:

Схема для актуальной версии платы. Разъемы I2C и RS485 показаны как разные, на деле они выбираются перемычками на плате

Печатная плата, заказанная в Китае:

Печатная плата четвертой версии

Перечень компонентов:

Наименование Кол-во Цена Сумма Ссылка
Модуль ESP32-WROOM-32E 1 369,00 369,00 AliExpress
Микросхема PCF8574T 1 58,73 58,73 AliExpress
Микросхема DS3231SN (опц.) 1 92,66 92,66 AliExpress
Микросхема MAX3485ESA (опц.) 1 28,65 28,65 AliExpress
Микросхема LM2596S-5.0 1 12,90 12,90 AliExpress
Микросхема AMS1117-3.3 1 3,80 3,80 AliExpress
Дисплей LCD 1602А 5В без I2C 1 265,00 265,00 AliExpress
Реле сигнальное G6K-2P-Y-DC5 (опц.) 1 117,60 117,60 AliExpress
MOSFET-транзистор IRLML0030 1 18,65 18,65 AliExpress
MOSFET-транзистор 2N7002 2 0,98 1,96 AliExpress
Транзистор SS8050 1 3,00 3,00 AliExpress
TVS-диоды SMBJ10A (опц.) 2 6,98 13,96 AliExpress
TVS-диоды SMBJ10CA (опц.) 1 6,98 6,98 AliExpress
Самовосстанавливающийся предохранитель 0,05 ~ 0,1А 60В (опц.) 2 9,80 19,60 AliExpress
Диод Шоттки SS54 или аналогичный 1 7,47 7,47 AliExpress
Дроссель 33 μH 1 17,80 17,80 AliExpress
Конденсатор электролитический 330uF 16V 6×9 мм 3 9,78 29,34 AliExpress
Конденсатор 0.1 μF 50V SMD0802 4 2,17 8,68 AliExpress
Конденсатор 1 μF 50V SMD0802 1 5,06 5,06 AliExpress
Резистор 4.7 кОм SMD0802 6 0,36 2,16 AliExpress
Резистор 10 кОм SMD0802 8 0,36 2,88 AliExpress
Резистор 100 кОм SMD0802 1 0,36 0,36 AliExpress
Резистор 510 Ом SMD0802 2 0,36 0,72 AliExpress
Резистор 220 Ом SMD0802 1 0,36 0,36 AliExpress
Резистор подстроечный 3362P 50 кОм 1 9,40 9,40 AliExpress
Светодиоды выводные 3 мм 2 0,71 1,42 AliExpress
Кнопки 6 x 6 x 13 (или 15) мм 3 7,25 21,75 AliExpress
Кнопки SMD 3.5×6.0x2.5 (опц.) 2 1.76 3.52 AliExpress
Кнопка боковая SMD 3x6x3.5 ии (опц.) 1 2.98 2.98 AliExpress
Активный зуммер 3.3В 1 18,20 18,20 AliExpress
Разъемы XH2.54 угловые 2 контакта 2 2,60 5,20 AliExpress
Разъемы XH2.54 угловые 3 контакта 1 2,60 2,60 AliExpress
Разъемы XH2.54 угловые 4 контакта 1 2,60 2,60 AliExpress
Плата печатная 1 265,80 265,80 AliExpress
Корпус 1 165,00 165,00 AliExpress
Всего себестоимость без учета сборки 1585,81  

Примечания:

  1. Цены указаны ориентировочно в рублях на момент составления данной таблицы
  2. Ссылки даны лишь в качестве примера, со временем они могут устареть
  3. Я никак не связан с продавцами и торговыми площадками, но поскольку я привожу здесь прямые ссылки на товары, я обязан указать маркер, что это реклама:
    • ООО “Алибаба.Ком (Ру)” ОГРН 1157746446747, адрес: 123112, г. Москва, Пресненская наб., д. 10, эт. 11, пом. III, комн. 17

 

Как видите, стоимость такого устройства даже без учета сборки и расходных материалов (припой, паста, флюс, метизы и т.д.) получается довольно высокой – около 1600 руб. И это при условии, что многие детали из перечисленного списка должны будут использоваться ещё где-то, потому что поставляются партиями в пять, десять, сто штук. Кроме того, в стоимость деталей зачастую входит стоимость доставки. А ещё вам понадобятся расходные материалы и инструменты: припой, паяльная паста, смывка, и т.д. И еще мы совсем не учитывали затраты на разработку прошивки.

Штучное производство всегда будет дороже массового, когда завод штампует подобные платы сотнями в час. Это камень в огород для тех, кто заявляет “откуда такие цены? в китае стоит три рубля ведро“. Если “душит жаба” – не стоит даже заглядывать в сторону DIY, а использовать только готовые китайские устройства.

 


Сборка

Для сборки вручную дополнительно понадобится:

  • паяльник
  • фен паяльный или печь для пайки SMD
  • припой
  • паяльная паста
  • пинцеты, кусачки, отвертки и т.д.

Сборку начинаем с установки “рассыпухи” на основной стороне платы (то есть той, где установлен модуль ESP32). Я паял мелкие компоненты с помощью паяльной пасты и паяльного фена, настроенного на минимально возможный поток воздуха для выбранной температуры (дабы не сдувало). Номиналы резисторов и конденсаторов почти везде проставлены на плате, поэтому сверяться со схемой почти не придется.

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

После этого можно припаять кнопки BOOT и RESET, но не обязательно – они нужны только для удобства программирования, так как автоматической схемы перевода чипа в режим программирования не предусмотрено. Их можно не припаивать, а в качестве альтернативы пользоваться кнопкой MODE и кнопкой RESET, установленной на другой стороне платы.

Тщательно отмываем плату, при этом особое внимание обращаем на удаление шариков припоя, которые могут образовываться при пайке паяльной пастой. Я пользуюсь спиртом и дешевой электрической зубной щеткой.

Затем переворачиваем плату и устанавливаем компоненты на оборотной стороне. Я рекомендую делать это в следующей последовательности:

  • кнопка RESET
  • стабилизатор AMS1117
  • диод Шоттки SS54
  • DC-DC конвертор LM2596
  • дроссель

Перед установкой дросселя рекомендуется заполнить переходные отверстия в одной из его контактных площадок припоем.

После этого вновь все тщательно отмываем и проверяем. Можно устанавливать выводные элементы:

  • разъем подключения батареи RTC, если вы будете её использовать
  • резистор настройки контрастности дисплея, его можно установить на любую сторону
  • конденсаторы системы питания
  • кнопки управления
  • активный зуммер
  • реле (если нужно)

Кнопки управления необходимо подобрать под высоту стоек в корпусе – либо 6x6x13 мм при стойках 11 мм, либо 6x6x15 мм при стойках 13 мм.

С помощью капелек припоя выбираем, какой тип интерфейса будет использоваться в данном приборе – I2C или RS485. Но можно сделать это и позже.

Для установки дисплея, светодиодов и разъемов потребуется корпус.

  • Размечаем отверстия для светодиодов. Для этого прикручиваем плату к передней части корпуса. Заодно проверяем, как работают кнопки. Берем булавку, нагреваем ее и пропускаем в отверстия для ножек светодиодов, легонько нажимаем. На внутренней стороне останутся следы от булавки – по этим меткам сверлим два отверстия (ну или одно, если светодиод HEAT не будет использоваться). Откручиваем плату, вставляем светодиод(ы), но не запаиваем, устанавливаем в корпус, выравниваем высоту и только после этого припаиваем выводы к плате.
  • Устанавливаем на дисплей 1602A гребенку, но не сплошную, а два ряда по 6 контактов. Опять устанавливаем плату в корпус и выравниваем дисплей относительно окна. Фиксируем скотчем и припаиваем.
  • Размечаем ширину разъемов на корпусе и удаляем “лишнюю” часть с помощью ножа, дремеля или подручных инструментов. 

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

 

Пора переходить к программированию.

 


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

Для подключения к компьютеру потребуется любой USB-TTL адаптер с поддержкой 3.3В на линиях данных, например как на картинке ниже.

При этом необходимы только две линии – RX и TX. Разъем для подключения интерфейса UART0 предусмотрен в верхней стороне платы. При подключении обращаем внимание на то, что RX адаптера подключается к TX на плате и наоборот.

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

Автоматической схемы перевода ESP32 в режим программирования не предусмотрено, поэтому для программирования необходимо зажать кнопку BOOT (или MODE), затем нажать RESET и только после этого отпустить кнопку BOOT (или MODE). В монитор порта будет выведено сообщение “Waiting for download…” – можно нажимать кнопку upload.

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

Два готовых к работе устройства

 


Ссылки

1. Схемы и файлы для изготовления печатных плат (здесь лодки кода нет)

 


Ну а на этом пока все, разрешите откланяться. До новых встреч.


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

-= Каталог статей (по разделам) =-   -= Архив статей (подряд) =-

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

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