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

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

Герой данного повествования – небольшая плата разработчика в формате Arduino UNO, но на базе современного микроконтроллера ESP32-S3. Называется она ESP32-S3 UNO и встречается в дикой природе повсеместно – от али до озонов с ягодками. Причем все онлайн-магазины уверены, что производится эта плата компанией Wemos, хотя в официальном списке плат такая не числится. Впрочем, в этом списке много чего нет. Ссылок не будет, так как это не реклама, а технический обзор.

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

Почему именно для тестирования? Потому что к платам этого формата очень удобно (из-за разъемов типа “мама”) подключать периферию (датчики, экраны, реле и т.д.) с помощью проводников со штекерами DuPont буквально “на коленке”, то есть без макетной платы. Это позволяет за пять минут собрать прототип несложного проекта и проверить его работоспособность. На мой взгляд, платы с гребенками типа “папа” для целей прототипирования подходят немного хуже. 

 


Описание и основные технические характеристики

  • Микроконтроллер : ESP32-S3 (двухъядерный процессор Xtensa LX7), подробное описание здесь и здесь
  • Тактовая частота : до 240 МГц
  • Флэш-память : 16 МБ (зависит от характеристик модуля, установленного на плате)
  • Дополнительная PSRAM : 8 МБ (зависит от характеристик модуля, установленного на плате)
  • Рабочее напряжение микроконтроллера: 3,3 В (поэтому плата может быть не совместима с 5В-модулями Arduino без дополнительного согласования уровней)
  • Напряжение питания (VIN) : 5~36 В (5В через USB или больше через разъем внешнего питания)
  • Размеры : 54 мм * 69 мм, размеры совместимы с форм-фактором Arduino UNO

Предупреждение! Не смотря на то, что размеры и форма платы соответствуют Arduino UNO, данная плата не полностью совместима с платами расширения Arduino. В первую очередь из-за того, что микроконтроллеры ESP могут нормально функционировать только при напряжении не выше 3,6В, поэтому подавать любые сигналы напряжением 5В на контакты платы (кроме контактов и разъемов питания, разумеется) я бы настоятельно не рекомендовал.

Основные функциональные модули платы:

 


CPU

На плате установлен модуль, собранный на базе микроконтроллера ESP32-S3 (подробное описание здесь и здесь), произведенный, вероятнее всего, не в компании Espressif, а сторонними производителями. ESP32-S3 имеет два ядра Xtensa® LX7 с разрядностью 32-бит и частотой до 240 МГц. Также имеется ULP-сопроцессор (RISC-V или FSM) для сверхнизкого энергопотребления в режиме сна.

Встроенная в чип оперативная память с произвольным доступом SRAM имеет размер 512 КБ. Но к чипу можно подключить до 16 МБ внешней оперативной памяти PSRAM. Размер доступной флеш-памяти, а также наличие и размер дополнительной оперативной памяти зависят от того, какая модификация модуля установлена на плате.

Мне попалась с плата с модулем S3-N16R8, то есть с flash-памятью 16 Мб и дополнительной оперативной памятью PSRAM размером 8 МБ на борту. Большой размер flash-памяти дает возможность создавать прошивки большего размера, а также хранить довольно большие массивы данных. А дополнительная оперативная память позволяет легко работать с изображениями или или другими объемными массивами информации в памяти. Не забываем также, что ESP32-S3 предназначен, в том числе, для работы с AI и распознаванием образов.

На моем экземпляре модуля установлен разъем IPEX для подключения внешней антенны, но по умолчанию резистор-перемычка установлен на работу с печатной антенной.

Красным отмечен резистор – перемычка для переключения типа антенны

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

Модуль имеет до 45 программируемых GPIO, что существенно больше, чем предусмотрено в формате плат Arduino UNO. поэтому часть выводов пришлось размещать во втором ряду, разъемы на них не установлены.

ESP32 также имеет большой набор встроенных аппаратных контроллеров: SPI, I2S, I2C, UART, PCNT, PWM, RMT, ADC, SD/MMC host, TWAI® (CAN), LCD, камера, USB OTG, сенсоры касания, температурный датчик и др. В отличие от Arduino, ESP32 для большинства не имеет жестко закрепленных за этими интерфейсами выводов, так как многие функции можно маршрутизировать на любой свободный вывод через матрицу GPIO MATRIX. Например выводы SPI, I2S, UART, PWM можно переназначить на любые контакты модуля. Но есть и исключения: например входы ADC всегда закреплены за определенными контактами модуля. 

 


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

Плата может работать либо от разъема внешнего питания с напряжением питания от 5 до 36 В, либо от разъема программирования USB Type C (только 5В).

Схема питания микроконтроллера состоит из двух отдельных составляющих:

Импульсного преобразователя DC-DC на 5 вольт на микросхеме CN3903, который преобразует входное напряжение от 5 до 36 В в пять вольт. Этот преобразователь работает на частоте 500кГц и может обеспечивать ток в нагрузке до 3.5А. Вход внешнего питания снабжен защитным диодом, поэтому если вы случайно перепутаете полярность подключения блока питания – ничего страшного не произойдет.

Линейного стабилизатора на 3.3 В на аналоге микросхемы AMS1117-3.3, который понижает 5в до необходимых микроконтроллеру 3,3В. 

Импульсный DC-DC преобразователь питания на 5В

Первая ступень работает только в случае, если напряжение на плату подано через разъем внешнего питания или контакт VN. В случае питания платы от USB-разъема DC-DC преобразователь не работает. 

 


USB-интерфейс

ESP32-S3, как мы знаем, можно программировать двумя способами:

  • либо через порт UART0, который выведен на контакты RXD и TXD
  • либо через порт USB Serial / JTAG, который выведен на контакты IO19 и IO20.

На данном изделии производитель решил по старинке воспользоваться старым способом – через UART0. Для этого на плате установлен мост USB – UART CH340C, а для перевода чипа в режим программирования предусмотрена стандартная схема “на волшебных транзисторах”:

При этом кнопки для “ручного” перевода микроконтроллера в режим программирования на плате не предусмотрено. Поэтому, если “что-то пошло не так”, придется воспользоваться контактом IO0 и внешней кнопкой. Подробнее обо всем этом здесь.

 


GPIO

Как я уже мельком упомянул выше, ESP32-S3 имеет до 45 программируемых GPIO и большое количество аппаратных контроллеров различных интерфейсов: SPI, I2S, I2C, UART, PCNT, PWM, RMT, ADC, SD/MMC host, TWAI® (CAN), LCD, камера, USB OTG, сенсоры касания, температурный датчик и др. Большинство контроллеров интерфейсов (например SPI, I2S, I2C, UART, PCNT, PWM и т.д.) можно назначить на произвольные GPIO с помощью матрицы GPIO MATRIX. Но некоторые из них – нельзя (например ADC, USB, TOUCH). Более подробно обо всем этом описано в статье ESP32-S3: чипы, модули & pinout.

Исходная таблица выводов стандартных модулей ESP32-S3 выглядит так:

Карта выводов модуля ESP32-S3. Нажмите для увеличения

 

Теперь трансформируем это применительно к рассматриваемой плате.

Все контакты микроконтроллера разбиты на несколько весьма условных групп. Так как выводов у ESP32 много больше, чем это было на Arduino UNO, пришлось расположить их не только по краю платы, но и “внутри”. Часть из них снабжена разъемами DuPont “мама”, часть оставлена “как есть”, в виде контактных площадок на плате.  Предполагается, что пользователь сам впаяет “гребенку” при необходимости.

Производитель явно старался соответствовать “стандартам” расположения выводов Arduino Uno, но, ввиду специфики ESP32, у него это получилось “не очень”. Например, разъем помеченный как ANALOG, на самом деле содержит контакты, которые не имеют функции ADC в принципе.

Назначение выводов ESP32 нанесено шелкографией с двух сторон, что несомненно, удобно:

 

Трансформируем эту таблицу применительно к Wemos ESP32-S3 UNO, расположение разъемов указано при взгляде сверху:

Обозна-чение GPIO Канал ADC Дополнительная информация
Левая сторона, первый ряд, разъем питания
IO0 GPIO0   Перевод микроконтроллера в режим программирования (если 0 при сбросе МК)
5V   x Питание 5В (можно подать внешнее или выход DC-DC преобразователя)
RST   x Аппаратный сброс, параллельно кнопке RESET
3V3   x Питание микроконтроллера 3,3В (выход LDO), можно использовать для питания подключаемых устройств
5V   x Питание 5В (можно подать внешнее или выход DC-DC преобразователя)
GND   x Общий проводник, “земля”, минус питания
GND   x Общий проводник, “земля”, минус питания
VIN   x Внешнее питание 5 ~ 36В
Левая сторона, первый ряд, “аналоговый” разъем
IO2 GPIO2  –  
IO1 GPIO1  –  
IO7 GPIO7 ADC1_CH6  
IO6 GPIO6 ADC1_CH5  
IO5 GPIO5 ADC1_CH4  
IO4 GPIO4 ADC1_CH3  
Левая сторона, второй ряд (контактные площадки)
IO45 GPIO45 Strapping pin, который управляет питанием flash-памяти. Нельзя подтягивать к 1 при старте CPU
IO16 GPIO16 ADC2_CH5  
IO15 GPIO15 ADC2_CH4  
IO47 GPIO47  
IO48 GPIO48 Подключен светодиод на плате
Правая сторона, второй ряд, разъем 1
IO9 GPIO9 ADC1_CH8  
IO8 GPIO8 ADC1_CH7  
RST   Аппаратный сброс, параллельно кнопке RESET
GND   Общий проводник, “земля”, минус питания
IO12 GPIO12 ADC2_CH1  
IO13 GPIO13 ADC2_CH2  
IO11 GPIO11 ADC2_CH0  
IO10 GPIO10 ADC1_CH9  
IO46 GPIO46 Перевод чипа в режим программирования (при 0 уровне)
IO21 GPIO21  
Правая сторона, второй ряд, разъем 2
IO14 GPIO14 ADC2_CH3  
IO3 GPIO3 ADC1_CH2 Управляет доступностью встроенного USB Serinal / JTAG
IO20 GPIO20 ADC2_CH9 USB Serinal / встроенный отладчик JTAG. Можно программировать через этот порт, а можно использовать как обычные GPIO
IO19 GPIO19 ADC2_CH8
IO17 GPIO17 ADC2_CH6  
IO18 GPIO18 ADC2_CH7  
TXD GPIO43 UART0: программирование и отладка через монитор порта, не стоит использовать в проектах
RXD GPIO44
Правая сторона, второй ряд (контактные площадки)
IO35 GPIO35  
IO36 GPIO36  
IO37 GPIO37  
IO38 GPIO38  
IO39 GPIO39  
IO40 GPIO40  
IO41 GPIO41  
IO42 GPIO42  

Примечания:

  • Красным и синим цветом выделена подтяжка вывода “по умолчанию” – красным к питанию, синим – к земле.
  • Желтым цветом выделены выводы, на которые следует обратить особое внимание. Если вы не уверены, как их правильно использовать в проекте – лучше совсем не использовать их, чтобы не нарушить логику работы микроконтроллера
  • Большинство остальных функций (пользовательские SPI, I2C, PWM, UART, PCNT, TWAI и т.д.) – можно и нужно программно назначать на любые свободные выводы
  • Для некоторых других функций, маршрутизируемых только через IO MUX, пожалуйста обратитесь к таблице выше. Кроме ADC – эту функцию я перенес в отдельный столбец.

 

На плате также имеется встроенный светодиод, подключенный к GPIO 48 – им можно помигать, вообще не подключая никаких проводов и светодиодов к плате.

 

Предупреждения

1. При работе с платой следует учитывать, что контакты IO (GPIO) не рассчитаны на напряжение 5В. Поэтому для подключения периферийных устройств и датчиков с логическими уровнями 5В следует применять устройства согласования уровней: их можно собрать или найти готовые на транзисторах, оптронах или специализированных микросхемах.

2. Максимальный ток, который можно “снять” с одного вывода GPIO ESP32 без её повреждения – 40 мА (для высокого выходного уровня). Но по умолчанию на большинстве выводов настроен режим ограничения тока – 20 мА. Подробнее об этом можно почитать тут. Суммарный ток по всем выводам не должен превышать 1200 мА.

 


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

О том, с помощью каких программных инструментов можно работать с данной платой, я довольно подробно описывал в статье: Как и на чём программировать ESP32 и ESP8266. Если кратко – то основные платформы всего две: ESP-IDF и Arduino ESP32. А вот IDE (программ для программирования) немного больше:

  • Arduino IDE (платформа Arduino)
  • VSCode + PlatformIO (платформы Arduino и ESP-IDF)
  • Espressif IDE (платформа ESP-IDF)

Лично я предпочитаю ESP-IDF, и на этом сайте вы можете найти множество статей на эту тему: Программирование ESP32 с помощью ESP-IDF

Если вы все-таки предпочитаете Arduino ESP32, то статей на эту тему здесь вы найдете гораздо меньше: Программирование ESP32 с помощью Arduino ESP32. Но в этих ваших интернетах информации на эту тему очень и очень много. 

 


FAQ: Вопросы и ответы

  • Можно ли одновременно подключать кабель USB к компьютеру и внешний источник питания, например 12В?
    Можно. Плата имеет схему защиты, и напряжение с выхода DC-DC не попадет на линию питания USB интерфейса
  • Можно ли подключить, например, датчик, у которого напряжение питания 5В и напряжение на линиях данных тоже 5В?
    Можно, но потребуется дополнительная схема согласования
  • А на форумах пишут, что ESP32 толерантна к 5В!
    Это известная байка, которая гуляет по сети. На заборах тоже много чего написано бывает. А в техническом паспорте ESP написано иначе. Давайте доверять официальным документам, а не форумам.
  • Можно ли программировать ESP32-S3 в общем, и эту плату в частности, на Python?
    Можно. Но мне не нравиться этот способ и я его избегаю. Поэтому помочь в этом вопросе лично я не смогу. Но в сети достаточно источников информации по данному вопросу
  • Непонятно, к каким контактам подключать линии SDA и SCL для того чтобы подключить IIC датчик? На Arduino UNO было четко обозначено!
    Подключайте к любым двум свободным контактам, кроме strapping pins. А при инициализации шины просто укажите эти GPIO. И будет вам счастье

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

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

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

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