Сегодня мы рассмотрим один интересный контроллер из моей коллекции, это (широко известная в узких кругах) плата OLIMEX ESP32-EVB. Это одна из первых плат, построенных на основе ESP32, которая за прошедшие годы претерпела несколько ревизий и выпускается до сих пор, то есть при желании вы можете её заказать и использовать в своих проектах.

Плата производится компанией OLIMEX, которая обладает своим оригинальным «технологическим почерком» — на ESP32-EVB всё сделано немного не так, как у других производителей контроллеров — все эти особенности мы разберём в этой статье.

Кроме того, сама плата ESP32-EVB обладает довольно широкими возможностями: на фирменный красный квадрат текстолита размером всего 75х75 мм компания OLIMEX умудрилась поместить ESP32, LAN8710A, microSD картридер, IR приёмник и передатчик, CAN трансивер, 2 реле, разъёмы расширения, подсистему зарядки и обслуживания аккумулятора и прочие элементы — по плотности упаковки деталей на квадратный сантиметр платы ESP32-EVB находится на одном из первых мест среди рассмотренных мной контроллеров.

Программирование этого чуда тоже не совсем обычная задача — множество компонентов плотно «посажены» на нестандартные GPIO и имеют свои особенности работы, далее мы попробуем со всем этим разобраться — в результате вы сможете легко и просто использовать маленький технологический шедевр ESP32-EVB в своих проектах.

Внешний вид


Начнём с внешнего вида и упаковки. ESP32-EVB поставляется в небольшой «брендированной» картонной коробке, сама плата находится в антистатическом пакете. Обратите внимание на «ножки» для платы — это простое, но полезное дополнение, которое позволяет плате не скользить по столу и не царапать его острыми выводами элементов с обратной стороны платы.



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



Крупным планом плата, уже установленная на комплектных ножках. Правда ножек (и крепёжных отверстий в плате) всего три, четвёртое должно было быть на месте установки микроконтроллера ESP32. Видимо это связано с плотной упаковкой элементов на плате — для четвёртого отверстия просто не хватило места.



Вид с обратной стороны платы. Силовые линии реле очень мощно и «объёмно» залужены, но защитных прорезей в плате нет. Также видна маркировка разъёмов и технологических перемычек. Окно для антенны ESP32 решили не просто освободить от проводников, но и вообще вырезать в текстолите.

Технические характеристики


Теперь давайте разберёмся с тем, какие компоненты и подсистемы содержит в себе плата OLIMEX ESP32-EVB. Начнём с формального перечисления ТТХ.

  • Микроконтроллер ESP-WROOM-32
  • microSD картридер
  • Ethernet интерфейс на LAN8710A
  • 2 реле 10A
  • IR приёмник
  • IR передатчик
  • Интерфейс CAN
  • Разъём EXT (все GPIO)
  • Разъём UEXT (стандартный разъём расширения OLIMEX)
  • Интерфейс UART1
  • Интерфейс I2C
  • Интерфейс SPI
  • Кнопка RST (Reset)
  • Кнопка BUT1 (User)
  • Подсистема заряда аккумулятора (схема и разъём)
  • Разъём Micro-USB для питания и программирования
  • Разъём Barrel Jack DC 5В

В общем, тут присутствует весь джентльменский набор, не хватает только интерфейса RS485. Но ESP32-EVB это можно простить, учитывая очень небольшие размеры платы. А свободная доступность в разъёмах интерфейсов UART, I2C и SPI, позволяет дополнить ESP32-EVB практически любым нужным вам оборудованием, включая, например, внешние I2C блоки Wiren Board.

Также обращает на себя внимание необычный подход разработчиков компании OLIMEX к проектированию разъёмов. Например, на плате присутствует разъём EXT, в который выведены все (!) GPIO микроконтроллера ESP32. То есть мы получаем доступ ко всем GPIO, несмотря на их использование (или неиспользование) внутренними элементами контроллера. Это абсолютно уникально и не встречается больше нигде, кроме плат OLIMEX.

Как я уже отметил, на этой плате встречается множество нестандартных решений, которые мы далее разберём подробно при описании схемотехники ESP32-EVB и работы его подсистем.

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


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

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

Рассмотрение схемотехники ESP32-EVB мы начнём с фотографии платы сверху.



Хорошо видна плотность упаковки элементов на плате. Видимо уменьшение размеров платы было одной из целей разработчиков, чтобы ESP32-EVB можно было встроить в какие-то небольшие устройства или малогабаритные корпуса.



На обратной стороне видна подробная маркировка, в том числе полная таблица GPIO выводов разъёма EXT. Видно также, что разработчики «не поленились» сделать разводку всех GPIO в этот разъём (что уникально).

Внешние подключения


Ниже приведена схема расположений разъёмов и внешних подключений ESP32-EVB:



Подсистема зарядки и питания


ESP32-EVB имеет довольно продвинутую подсистему питания с возможностью подключения литиевого аккумулятора, светодиодной индикации режимов его зарядки, запитки от круглого «Barrel» разъёма, отдельных контактов на плате или Micro-USB разъёма.



Размер и распиновка круглого разъёма совпадают со стандартом Ардуино, но подавать на этот разъём (и контакты TERM1) можно только напряжение 5 вольт. Здесь нужно быть внимательным, иначе можно повредить контроллер.

Обслуживанием аккумулятора занимается микросхема контроллера заряда MCP73833, а напряжение 3,3 В формирует понижающий DC-DC преобразователь SY8009AAAC. Компания OLIMEX была настолько любезной, что на схеме даже указала формулы расчёта номиналов резисторов для тока заряда и выходного напряжения 3,3 В.

Ядро ESP32


На схеме дана довольно своеобразная и невероятно подробная распиновка микроконтроллера ESP32 на плате ESP32-EVB.



USB-UART


Micro-USB разъём может использоваться как для питания контроллера, так и для его программирования. USB-UART переходник выполнен на микросхеме CH340T, а схема управляющих сигналов — на двух транзисторах BC817-40 и двух сборках диодов Шоттки BAT54C. И снова компания OLIMEX оказалась настолько любезной, что привела таблицу состояний входов и выходов схемы управления DTR/RTS.



Реле


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



IR приёмник и передатчик


В качестве инфракрасного (IR) передатчика используется светодиод IR333-A, управляемый транзистором BC817-40, а в качестве приёмника — модуль приёмника инфракрасных сигналов RPM7236-H8.



Всё это хозяйство заведено на соответствующие GPIO и может свободно управляться из скетчей на Ардуино (или из кода на на вашем любимом языке программирования).

CAN


Подсистема CAN интерфейса выполнена на трансивере MCP2551-I/SN и может запитываться от 5 или 3,3 В при помощи замыкания соответствующей перемычки. По умолчанию выставлен режим питания от напряжения 5 В.



Также есть возможность подключения резистора 120 Ом при помощи ещё одной перемычки на плате CAN_T1.

Ethernet


Контроллер OLIMEX ESP32-EVB интересен ещё и тем, что здесь применена продвинутая микросхема Ethernet физики LAN8710A (обычно производители используют более простую версию LAN8720A), правда для нас это особой роли не играет, обе микросхемы работают аналогичным образом.



Также важно отметить, что обе эти микросхемы совместимы на программном уровне и нам не придётся специально переделывать код под ESP32-EVB (что очень хорошо).

Картридер microSD


Плата ESP32-EVB снабжена картридером для microSD карт памяти, что значительно расширяет её возможности — на этих картах можно хранить различные данные, конфигурационные файлы, их можно использовать для размещения страниц веб-сервера и т. д.



Кнопки


ESP32-EVB имеет две кнопки: Reset (RST1) и свободно программируемую User (BUT1), подключённую к GPIO34.



EXT


Как я уже заметил выше, ESP32-EVB содержит уникальный разъём EXT1, в который выведены все GPIO контроллера ESP32. Я такого не встречал ни на одном другом контроллере — здесь нам свободно доступны (вне зависимости от внутренних подключений) все GPIO микроконтроллера (я бы сказал, что это очень круто — не нужно ничего мудрить, если вы вдруг захотите использовать какой-то пин для своих нужд).



Маркировка разъёма EXT1 на обратной стороне платы:



UEXT


UEXT — это разъём «фирменного» стандарта OLIMEX для подключения внешних модулей. В него выведены контакты «земли», питания 3,3 В и интерфейсов UART1, I2C, SPI.



Вот более наглядное представление распиновки UEXT разъёма компании OLIMEX:



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

Технологическая информация


Ещё один пример необычного подхода OLIMEX к сопровождению своей продукции — компания предоставляет таблицы с подробной информацией о выводах GPIO и режимах их работы.



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

Распиновка


Более наглядный вариант распиновки ESP32 на плате ESP32-EVB. То, что OLIMEX на своих схемах маркирует как SPI и HS2 — это GPIO, которые переопределить как на HSPI, так и на VSPI.



Заключение


В принципе, я хотел в этой статье разместить информацию и примеры кода для программирования ESP32-EVB, но это будет явно перебор — программированию этого чуда техники я посвящу следующую статью, тем более там много сложных и нетривиальных моментов и нам будет что обсудить в процессе разбора программирования ESP32-EVB.

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


  1. alex-open-plc
    03.01.2023 13:59
    +1

    Некоторые замечания разработчикам:

    • на кнопках явно не хватает ёмкостей (аппаратная фильтрация дребезга)

    • подключение реле явно бестолковое. При коммутации нагрузки например на индуктивность будут очень большие выбросы. С вероятностью 99% контроллер зависнет (в лучшем случае).


    1. smart_alex Автор
      03.01.2023 14:19

      А что и как нужно изменить в подключении реле? (вроде бы проблем пока не наблюдалось, хотя я экспериментировал только в тестовом режиме).


      1. alex-open-plc
        03.01.2023 16:37
        -5

        Думайте сами. Попытайтесь "подсмотреть" в решениях того же Siemens...


        1. F376
          04.01.2023 14:49

          А где бы посмотреть схемы решений Siemens?


          1. alex-open-plc
            04.01.2023 16:01
            +1

            Берете блок расширения контроллера. Разбираете. Изучаете.


    1. nixtonixto
      03.01.2023 16:00
      +3

      Пора уже уходить от порочной практики решать аппаратными средствами то, что решается программно. Конденсаторы для фильтрации дребезга не нужны — по первому прерыванию отключаем на этой ноге прерывание и далее в 10 мс циклах прибавляем 1 или отнимаем 3 до достижения нуля или 4...5, затем выполняем (без)действие и снова включаем прерывание. Это пара десятков строк кода, что при 4...16 МБ памяти программ ЕСП дешевле лишнего конденсатора.


      1. alex-open-plc
        03.01.2023 16:36
        +3

        Это и есть дурная практика, пытаться решить всё программно. Ёмкость сильно удорожает или усложняет решение?


        1. vau
          05.01.2023 13:15

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


      1. osmanpasha
        03.01.2023 22:42
        +6

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


        1. vau
          05.01.2023 13:08

          это и не надо. обработку всех кнопок сразу нужно делать раз в тик системного таймера для каждой кнопки увеличивая свою переменную-счетчик если на входе 1 и уменьшая если 0. нажатие и отпускание фиксируется при достижении счетчиком верхней и нижней границ соответственно. Для FreeRTOS обработку кнопок, светодиодов и т.п. очень удобно выносить в сопрограммы. Они там живут и никому не мешают


  1. na2ali
    03.01.2023 15:15
    +1

    для alex-open-plc емкости опционально, дребезг 20 мс можно давить програмно, подключение реле называется классическое, по современному там должны быть полевики , контроллер не зависнет , питание реле и ESP от разных источников.


    1. alex-open-plc
      03.01.2023 16:34

      Проходили всё это. При индуктивной нагрузке более 300 Вт (всего то...), обыкновенный электродвигатель, получите сюрпризов в полный рост. В данном решении нет полной гальванической развязки. Думайте сами, как изолировать. Обмотка реле только усиливает эффекты, не обеспечивая изоляцию.


      1. vassabi
        04.01.2023 03:02
        +2

        Думайте сами, как изолировать.

        скажите, а у вас есть примеры - где вы придумали, как изолировать? Или "у нас есть такие приборы - но мы о них не расскажем" (с)?


        1. alex-open-plc
          04.01.2023 03:15
          +2

          1. alex-open-plc
            04.01.2023 12:37

            Ну, дал ссылку, и что?! Только минусов и заработал...


            1. vassabi
              05.01.2023 14:56

              спасибо за ссылку,

              заметьте, минусов в ветке без неё - гораздо больше


  1. shadrap
    03.01.2023 19:57
    +1

    прекрасная плата. все что нужно..., цена наверное единственный минус)

    конечно управление реле без опторазвязки это не очень универсальное решение, но в подавляющем большинстве случаев будет работать. Дребезг контактов решается и хардварно и софтово. Подтяжкой и /или микросхемой анти дребезга типа мах1816, я в своих решениях вполне довольствовался и софтовым... Вопрос что все это слишком сильно раздувает размер. А здесь он укладывается в 80х80 коробку что интересно.

    Опять же не очень мне понятно игнорирование POE , потому как если Ethernet, то можно было б и питание оттуда притащить...


    1. vbifkol
      03.01.2023 23:14

      Опять же не очень мне понятно игнорирование POE , потому как если Ethernet, то можно было б и питание оттуда притащить...

      Не очень понятно зачем ПОЕ рядом с реле. КМК, если есть реле - значит где-то рядом есть проводок с питанием, 220 или 24 - по вкусу. У меня есть ряд проектов, где МК мониторят питание и щелкают релюшками, я их как-то собрал на ПОЕ бордах, потом плакал как в корпус упихивать.


      1. shadrap
        04.01.2023 00:07

        естественно на Poe релюшки лучше не вешать без развязки, еще вопрос что за Poe источник. У меня платы с poe работают с микроволновыми датчиками, никаких проблем.


      1. RTFM13
        04.01.2023 01:48

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

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


  1. Rixty
    04.01.2023 08:14

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


  1. RV3EFE
    04.01.2023 12:36
    +1

    Жаль что при указании параметров выходов, которые подключены к реле, редко указывают помимо токов реле, напряжение и косинус фи. Приходится всё равно лезть в даташит на реле.
    Это просто мысли про описание технических характеристик...