Добрый день, уважаемый читатель!
В данной статье мы поговорим про усы, лапы, и хвост; (тьфу, крылья, ноги, хвосты, опять не то) чипы, модули и платы ESP32.
Разбираться в модулях Esspressif, которые поставляет компания, дело неблагодарное. В списке доступных к заказу их несколько сотен. На Ali, конечно, предлагают поменьше, но новичкам всё равно ничего не понятно. Это даже хуже, чем выбирать смартфон от Xiaomi. Но всё таки давайте попробуем разобраться.
Для начала определимся с терминологией. В этой статье (да и в других статьях цикла) я буду использовать следующие термины:
- чип – собственно микроконтроллер (или core в документации espressif, он же
ЖораSoC {System On Crystal – система на одном кристалле}, он жеГогаMCU {MicroController Unit}); то есть собственно микросхемка без антенны, кварцевого резонатора, микросхемы FLASH-памяти и прочей обвязки - модуль – готовый микромодуль с напаянными внутри чипом, памятью, антенной или разъемом; чаще всего закрыт экраном с маркировкой
- плата – как правило под этим термином я буду понимать различные отладочные платы с установленным модулем, USB-конвертором и стабилизатором
Серии (линейки) чипов Espressif
Если обратиться к сайту производителя, то можно увидеть, что компания сейчас выпускает в основном пять линеек продукции: ESP8266, ESP32, ESP32-S*, ESP32-C* и ESP32-H.
Давайте рассмотрим самые популярные серии чуть-чуть поподробнее:
ESP8266
ESP8266 – предшественник ESP32 на базе 32-разрядного RISC-процессора Tensilica® L106, с максимальной тактовой частотой 160 МГц. Я пользовался модулями этой линейки несколько лет, на мой взгляд, модуль получился не очень удачным, особенно в первое время (ESP-01 и т.д.). Производитель заявляет поддержку FreeRTOS, но поддержка эта “так себе”. Хотя для опытов с Arduino и WiFi вполне сгодится. В данной статье мы не будем его рассматривать.
ESP32
ESP32 – “классическая” серия ESP32. выпущенная в 2016 году на базе двухъядерного процессора Xtensa® 32bit LX6 (или одноядерного в некоторых вариантах) с максимальной тактовой частотой 240 МГц. Работает с использованием относительно старых протоколов WiFi 2.4 MHz. Самая популярная линейка среди самодельщиков, так как его возможностей хватает “с избытком”, множество предложений на Aliexpress, а цена невелика (даже по сравнению с ESP8266).
- Два (или одно) ядра ЦП с изменяемой тактовой частотой 80 / 160 / 240 МГц.
- Выходная мощность WiFi +19,5 дБм обеспечивает достаточную дальность связи
- Классический Bluetooth с поддержкой L2CAP, SDP, GAP, SMP, AVDTP, AVCTP, A2DP (SNK) и AVRCP (CT)
- Поддержка Bluetooth Low Energy (Bluetooth LE), включая профили L2CAP, GAP, GATT, SMP и GATT, такие как BluFi, SPP-подобные и т. д.
- Ток сна составляет менее 5 мкА, что делает его пригодным для приложений с батарейным питанием и носимой электроники.
- Периферийные устройства включают емкостные сенсорные датчики, датчик Холла, интерфейс SD-карты, Ethernet, высокоскоростной SPI, UART, I2S и I2C.
- Внешняя RAM и флэш-память может быть подключена только через относительно небольшое “окно” в адресном пространстве (без DMA)
ESP32-C
ESP32-C(2,3,5,6) – недорогая линейка на базе одноядерного RISC-V процессора, предназначенная в первую очередь для встраиваемых устройств типа “умных розеток” и “умных лампочек”. Это скорее не “урезанный” ESP32, а “усовершенствованный” ESP8266. В отличие от ESP8266 новый SoC имеет поддержку безопасной загрузки, флэш-шифрования и современных беспроводных стандартов связи. Имеет меньшее количество GPIO, чем классическая ESP32, но у нее и назначение другое.
- 32-битный одноядерный процессор RISC-V с четырехступенчатым конвейером, работающий на частоте до 160 МГц (в зависимости от серии).
- Поддержка современных протоколов беспроводной связи WiFi и Bluetooth
- 400 КБ SRAM и 384 КБ ПЗУ на чипе, а также интерфейсы SPI, Dual SPI, Quad SPI и QPI, которые позволяют подключать внешнюю флэш-память.
- Надежные функции безопасности, обеспечиваемые безопасной загрузкой на основе RSA-3072, флэш-шифрованием на основе AES-128-XTS, инновационной цифровой подписью и периферийным устройством HMAC, поддержкой аппаратного ускорения криптографических алгоритмов.
- Богатый набор периферийных интерфейсов и GPIO, идеально подходящий для различных сценариев и сложных приложений.
- ESP32-C5 — это первая двухдиапазонная SoC Wi-Fi 6 от Espressif с частотой 2,4 и 5 ГГц.
ESP32-S
ESP32-S(2,3) – относительно новая (2020 год) линейка ESP32 базе процессора следующего поколения Xtensa® 32-bit LX7 с максимальной тактовой частотой 240 МГц. В качестве основных преимуществ по сравнению с предыдущей линейкой производитель отмечает улучшенную криптографию (шифрование FLASH памяти, безопасную загрузку прошивки, защиту от атак) и поддержку современных беспроводных протоколов связи. Имеет большее количество GPIO, чем классическая ESP32. Но меньшее количество встроенной памяти (см. таблицу ниже). Зато у новых чипов имеется высокоскоростной интерфейс Quad SPI и Octal SPI,через которые можно подключать внешнюю память.
- 32-битный одноядерный (-S2) или двухъядерный процессор Xtensa® LX7 (-S3), работающий на частоте до 240 МГц.
- 512 КБ SRAM и 384 КБ ПЗУ на чипе, а также интерфейсы SPI, Dual SPI, Quad SPI, Octal SPI, QPI и OPI, которые позволяют подключать флэш-память и внешнюю RAM через DMA.
- Дополнительная поддержка векторных инструкций в ESP32-S3, что обеспечивает ускорение вычислений нейронных сетей и рабочих нагрузок обработки сигналов.
- Периферийные устройства включают до 45 программируемых GPIO, SPI, I2S, I2C, PWM, RMT, ADC и UART, хост SD/MMC и TWAI
- Сверхнизкое энергопотребление: мелкозернистая синхронизация, динамическое масштабирование напряжения и частоты.
- Функции безопасности: eFuse, флэш-шифрование, безопасная загрузка, проверка подписи, встроенные алгоритмы AES, SHA и RSA.
ESP32-H
ESP32-Н – SoC на базе 32-битного одноядерного процессор RISC-V, работающего на частоте до 96 МГц. Как и серия ESP32-C, данная серия предназначенна в первую очередь для встраиваемых устройств типа “умных розеток” и “умных лампочек” с небольшими требованиями. Но в отличие от чипов серии ESP32-C, данная серия не имеет поддержки WiFi, взамен предлагая ультранизкое электропотребление.
- 32-битный одноядерный процессор RISC-V, работающий на частоте до 96 МГц.
- 320 КБ SRAM, 128 КБ ROM, 4 КБ LP-памяти, работает с внешней флэш-памятью.
- 19 программируемых GPIO с поддержкой UART, SPI, I2C, I2S, периферийных устройств дистанционного управления, светодиодной ШИМ, полноскоростного USB-контроллера Serial/JTAG, GDMA, MCPWM
- Может использоваться для создания конечных устройств Thread, а также пограничного маршрутизатора Thread и моста Matter путем объединения его и ESP Wi-Fi SoC.
В таблице ниже вы можете сравнить характеристики серий более подробно.
Характ-ка | Серия ESP32 | Серия ESP32-S2 | Серия ESP32-C3 | Серия ESP32-S3 |
---|---|---|---|---|
Год выпуска | 2016 | 2020 | 2020 | 2020 |
Описание | ESP32 Datasheet | ESP32-S2 Datasheet | ESP32-C3 Datasheet | ESP32-S3 Datasheet |
Процессор | Xtensa® dual-/single core 32-bit LX6 | Xtensa® single-core 32-bit LX7 | 32-bit single-core RISC-V | Xtensa® dual-core 32-bit LX7 |
Wi-Fi | 802.11 b/g/n, 2.4 GHz | 802.11 b/g/n, 2.4 GHz | 802.11 b/g/n, 2.4 GHz | 802.11 b/g/n, 2.4 GHz |
Bluetooth® | Bluetooth v4.2 BR/EDR and Bluetooth LE | ✖️ | Bluetooth 5.0 | Bluetooth 5.0 |
Частота ядра | 240 MHz (160 MHz for ESP32-S0WD) | 240 MHz | 160 MHz | 240 MHz |
SRAM (в SoC) | 520 KB | 320 KB | 400 KB | 512 KB |
ROM (в SoC) | 448 KB для загрузчика и ядра | 128 KB для загрузчика и ядра | 384 KB для загрузчика и ядра | 384 KB для загрузчика и ядра |
Flash (модуль) | 2 MB, 4 MB, или ничего | 2 MB, 4 MB, или ничего | 4 MB или ничего | 8 MB или ничего |
Flash (внешняя) | До 16 MB, адресация 11 MB через буфер 248 KB | До 1 GB, адресация одновременно 11.5 MB | До 16 MB, адресация одновременно 8 MB | До 1 GB, адресация одновременно 32 MB |
RAM (внешняя или в модуле) | До 8 MB, адресация 4 MB одновременно | До 1 GB, адресация одновременно 11.5 MB | ✖️ | До 1 GB, адресация одновременно 32 MB |
Кэш | ✔️ Two-way set associative | ✔️ Four-way set associative, independent instruction cache and data cache | ✔️ Eight-way set associative, 32-bit data/instruction bus width | ✔️ Four-way or eight-way set associative for instruction cache; four-way set associative for data cache, 32-bit data/instruction bus width |
Периферия | ||||
ADC | Два 12-bit, 18 каналов | Два 12-bit, 20 каналов | Два 12-bit SAR ADC, максимум 6 каналов | Два 12-bit SAR ADCs, 20 каналов |
DAC | Два 8-bit канала | Два 8-bit канала | ✖️ | ✖️ |
Таймеры | Четыре 64-битных таймера общего назначения и три сторожевых таймера | Четыре 64-битных таймера общего назначения и три сторожевых таймера | Два 54-битных таймера общего назначения и три сторожевых таймера. | Четыре 54-битных таймера общего назначения и три сторожевых таймера. |
Датчик температуры | ✖️ | 1 | 1 | 1 |
Сенсоры касания | 10 | 14 | ✖️ | 14 |
Датчик Холла | 1 | ✖️ | ✖️ | ✖️ |
GPIO | 34 | 43 | 22 | 45 |
SPI | 4 | 4 | 3 | 4 |
LCD interface | 1 | 1 | ✖️ | 1 |
UART | 3 | 2 1 | 2 1 | 3 |
I2C | 2 | 2 | 1 | 2 |
I2S | 2, могут быть настроены для работы с разрешением 8/16/32/40/48 бит в качестве входного или выходного канала | 1, может быть настроен для работы с разрешением 8/16/32/40/48/64 бит в качестве входного или выходного канала | 1, может быть настроен для работы с разрешением 8/16/24/32 бит в качестве входного или выходного канала | 2, могут быть настроены для работы с разрешением 8/16/24/32 бит в качестве входного или выходного канала |
Camera interface | 1 | 1 | ✖️ | 1 |
DMA | Выделенные DMA to UART, SPI, I2S, SDIO slave, SD/MMC host, EMAC, BT, и Wi-Fi | Выделенные DMA to UART, SPI, AES, SHA, I2S, и ADC Controller | Общего назначения: 3 канала TX, 3 канала RX | Общего назначения: 5 каналов TX, 5 каналов RX |
RMT | 8 каналов | 4 канала | 4 канала: 2 RX + 2 TX | 8 каналов: 4 RX + 4 TX |
Счетчик импульсов | 8 каналов | 4 канала | ✖️ | 4 канала |
LED PWM | 16 каналов | 8 каналов | 6 каналов | 8 каналов |
MC PWM | 2, шесть PWM выходов | ✖️ | ✖️ | 2, шесть PWM выходов |
USB OTG | ✖️ | 1 | ✖️ | 1 |
TWAI® контроллер (ISO 11898-1) | 1 | 1 | 1 | 1 |
SD/SDIO/MMC host controller | 1 | ✖️ | ✖️ | 1 |
SDIO slave controller | 1 | ✖️ | ✖️ | ✖️ |
Ethernet MAC | 1 | ✖️ | ✖️ | ✖️ |
ULP сопроцессор | ULP FSM | PicoRV32 core with 8 KB SRAM, ULP FSM | ✖️ | PicoRV32 core with 8 KB SRAM, ULP FSM |
Debug Assist | ✖️ | ✖️ | 1 | ✖️ |
Безопасность | ||||
Secure boot | ✔️ | ✔️ Быстрее и безопаснее по сравнению с классической ESP32 | ✔️ Быстрее и безопаснее по сравнению с классической ESP32 | ✔️ Быстрее и безопаснее по сравнению с классической ESP32 |
Flash шифрование | ✔️ | ✔️ Поддержка шифрования PSRAM. Безопаснее, по сравнению с ESP32 | ✔️ Безопаснее, по сравнению с ESP32 | ✔️ Поддержка шифрования PSRAM. Безопаснее, по сравнению с ESP32 |
OTP | 1024-bit | 4096-bit | 4096-bit | 4096-bit |
AES | ✔️ AES-128, AES-192, AES-256 (FIPS PUB 197) | ✔️ AES-128, AES-192, AES-256 (FIPS PUB 197); DMA support | ✔️ AES-128, AES-256 (FIPS PUB 197); DMA support | ✔️ AES-128, AES-256 (FIPS PUB 197); DMA support |
HASH | SHA-1, SHA-256, SHA-384, SHA-512 (FIPS PUB 180-4) | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA-512/t (FIPS PUB 180-4); DMA support | SHA-1, SHA-224, SHA-256 (FIPS PUB 180-4); DMA support | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA-512/t (FIPS PUB 180-4); DMA support |
RSA | Up to 4096 bits | Up to 4096 bits | Up to 3072 bits | Up to 4096 bits |
RNG | ✔️ | ✔️ | ✔️ | ✔️ |
HMAC | ✖️ | ✔️ | ✔️ | ✔️ |
Digital signature | ✖️ | ✔️ | ✔️ | ✔️ |
XTS | ✖️ | ✔️ XTS-AES-128, XTS-AES-256 | ✔️ XTS-AES-128 | ✔️ XTS-AES-128, XTS-AES-256 |
Другое | ||||
Deep-sleep (режим, контролируемый ULP) | 100 μA (когда АЦП работают с рабочим циклом 1%) | 22 μA (когда сенсорные датчики работают с рабочим циклом 1%) | Не поддерживается | TBD |
Размеры чипа | QFN48 5*5, 6*6, в зависимости от исполнения | QFN56 7*7 | QFN32 5*5 | QFN56 7*7 |
В данной статье я буду рассматривать в основном чипы и модули “базовой линейки” ESP32, так как про ESP8266 – уже не интересно, а сериями ESP32-S и ESP32-С я лично ещё не пользовался (ну вот не было такой необходимости), поэтому поделиться опытом я не могу. А зачем писать про то, чего сам не знаешь? Если у Вас есть желание подробнее ознакомиться с новыми сериями, Вы можете сделать это самостоятельно на сайте производителя. Но судя по поиску на AliExpress, новые модули пока не сильно распространены.
Чипы классической линейки ESP32
В настоящее время Espressif производит модули ESP32 на базе следующих чипов (SoC):
- ESP32-D0WDQ6 – исторически самый первый чип, выпущенный Espressif, сейчас не доступен для заказа. Модули на основе этого чипа я рассматривать так же не буду (а смысл?).
- ESP32-D0WD – некоторое время основной SoC, на основе которого создавались модули ESP32-WROOM-32, ESP32-WROOM-32D, ESP32-WROOM-32U и серии ESP32-WROWER (не все модели! подробности ниже). Имел некоторые аппаратные проблемы, поэтому в конце концов был снят с производства и заменен на исправленную версию ESP32-D0WD-V3 и сейчас не доступен для заказа на сайте Espressif, но его вполне ещё можно купить на Aliexpress.
- ESP32-D0WD-V3 – исправленная версия ESP32-D0WD с маркировкой ECO V3. Например исправлена ошибка кэша при работе с внешним ОЗУ (PSRAM), если таковое присутствует в модуле. Если есть желание, можете ознакомиться со списком изменений самостоятельно ( или на форуме ).
- ESP32-D0WDR2-V3 – этот более продвинутый вариант ESP32-D0WD-V3, который имеет на борту 2 МБ встроенной PSRAM. Используется только в продвинутом модуле ESP32-WROOM-DA.
- ESP32-S0WD – “урезанный” одноядерный вариант ESP32-D0WD. Собственно этим всё сказано. Не вижу смысла, но производителю виднее. На Aliexpress присутствует только в виде чипов и модулей, плат на основе этого чипа нет. Видимо, спроса нет.
- ESP32-U4WDH – ещё один вариант ESP32, данные о нем весьма противоречивы: на сайте Espressif написано, что это одноядерный модуль с частотой 160 MHz и с 24 GPIO, а судя по datasheet- это вполне себе обычный ESP32 с 28 выводами GPIO. На Aliexpress отсутствует.
- ESP32-PICO-V3-02 – в основе этого модуля лежит тот же самый чип ESP32 (ECO V3), но разработанный с использованием маломощной технологии TSMC 40 нм. На Aliexpress присутствует только в виде чипов и модулей.
Модули классической линейки ESP32
На первый взгляд, во всей этой “мешанине” модулей, выпускаемых Espressif, легко запутаться. Но если разобраться, то всё оказывается просто и логично довольно (на самом деле не всегда).
Во первых – название серии модулей (после ESP32-) определяет, есть ли в модуле дополнительная внешняя оперативная память или другие конструктивные особенности. На данный момент компания Espressif выпускает три “классических” серии модулей ESP32 (повторюсь, модули линеек ESP32-S и ESP32-С, я не буду рассматривать в рамках данной статьи):
- Серия ESP32-WROOM – модули на базе чипа ESP32-D0WD и его модификаций со встроенной флэш-памятью. Эти модули поддерживают Wi-Fi и Bluetooth/Bluetooth LE и обеспечивают высокую двухъядерную производительность. Самая массовая и популярная серия, на Aliexpress присутствует в самых разных вариантах.
- Серия ESP32-WROVER – по сути это тот же самый ESP32-D0WD, только дополнительно оснащенный “внешней” памятью SPIRAM (другое название PSRAM)*. То есть вне чипа, но внутри модуля. Из-за этого он имеет большие габариты. WROWER хорошо подходит для приложений, требующих больше памяти, например при обработке видео или ИИ.
- Серия ESP32-MINI – основана на ESP32-U4WDH, что обеспечивает экономичное решение для простых приложений подключения на основе Wi-Fi и Bluetooth/Bluetooth LE. Стоимость модулей на Ali выше, чем обычных, а единственная отладочная плата имеет совершенно “конский” ценник.
* Примечания к ESP32-WROVER:
1. Из-за того, что выводы MCU IO16 и IO17 заняты в интерфейсе QSPI для подключения SPIRAM, их нельзя использовать (да они и не выведены на контакты).
2. SPIRAM это совсем НЕ то же самое, что интегрированная в чип SRAM! Доступ к SPIRAM осуществляется MCU не непосредственно, а постранично через буферизированное “окно” в адресном пространстве. Поэтому “внешняя” память SPIRAM работает существенно медленнее обычной. В некоторых приложениях (связанных с обработкой видео, например), это может быть критичным. По умолчанию SPIRAM не доступна для malloc() и calloc(), её нужно “подключать” через sdkconfig.
Кроме того, есть подозрения (лично видел issue на github), что SPIRAM гораздо быстрее фрагментируется, чем обычная. Впрочем это может быть чисто программной проблемой, которую можно устранить.
Буква на конце маркировки (D, U, E, I и т.д.) определяет конструктивные особенности модуля:
- Если буква на конце маркировки отсутствует, то чип внутри такого модуля может стоять какой угодно – либо новый ESP32-D0WD-V3, либо ESP32-D0WD, либо вообще доисторический ESP32-D0WDQ6. Одно известно совершенно точно: такие модули имеют печатную антенну. На AliExpress модулей с обозначением ESP32-WROOM-32 сейчас “пруд пруди”, но сайт производителя уверяет нас, что без буквы маркированы только устаревшие модули (на базе ESP32-D0WDQ6), давно снятые с производства. Могу предположить, что это могут быть “не совсем оригинальные” модули, но это не точно. Как правило, встречаются на платах ESP32 DevKit V1 и подобных (на ESP32 DevKitС V4, имеющихся в моем распоряжении, стоят модули с буквами D или E).
- Буква D или E (для WROOM) или B (для WROVER) обозначает модули с печатной антенной. Буква D на конце маркировки модуля указывает на чип ESP32-D0WD, буква E указывает на новый чип ECO V3 (ESP32-D0WD-V3). На первый взгляд, существенных отличий модулей с буквой Е по от предыдущих моделей нет. Но если взглянуть на контакты модуля, можно заметить, что часть контактов, задействованных в QSPI интерфейсе (через который может подключаться внешняя FLASH память), не подключена. Но для абсолютного большинства “любительских” применений эти контакты всё равно не имеют никакого значения, так что разницы вы не заметите.
- Буква U (для WROOM) или I (для WROVER) на конце маркировки модуля указывает на то, что вместо печатной антенны установлен разъем U.FL / IPEX для подключения внешней антенны. Модули с печатной антенной MIFA (Meandered Inverted-F Antenna) удобно применять, когда в точке размещения модуля сигнал WiFi достаточно сильный (или вообще не требуется подключение к сети). Модули с разъемом U.FL / IPEX (имеющие букву U в названии) подойдут, если вы хотите установить ESP32 в металлическом боксе или если уровень сигнала WiFi оставляет желать лучшего (во дворе, в гараже и т.д.). Но антенну придется прикупить отдельно.
- Буквы IB или IE (только для WROVER) на конце маркировки модуля указывают на то, что модуле можно использовать как печатную, так и внешнюю антенну. Жаль что такого варианта для серии WROOM не существует.
Внимание! На модуле с внешней антенной нельзя активировать WiFi, если антенна не подключена – можно спалить передатчик. Я уже это проверил и убедился – это действительно так.
Размер установленной FLASH-памяти может дополнительно обозначаться буквой N и цифрами. На сайте Expressif доступны модули c 4 MB или 8 MB или 16 MB FLASH памяти. На AliExpress так же есть в продаже модули WROOM с 8 или 16 MB, но только в виде собственно модулей (плат я не видел, но это не большая проблема). Больший размер FLASH может пригодится для накопления каких-либо данных без использования microSD карт.
Запутались? Не пугайтесь – ниже будут примеры с “расшифровкой”.
В качестве иллюстрации приведу картинки с одного известного китайского сайта:
Характеристики
По большей части в “классической” линейке ESP32 все модули обладают сходными характеристиками, так как используются похожие чипы.
- Процессор: Xtensa® dual-/single-core 32-bit LX6 с тактовой частотой 80 / 160 / 240 MHz
- ROM: 448 KB
- SRAM: 520 KB
- FLASH: 4 / 8 / 16 MB
- WiFi: IEEE 802.11 b/g/n; 2.4 GHz; HT20/40; up to 150 Mbps
- GPIO: WROOM 26 / WROWER 24
- ADC: 12-bit до 18 каналов (на самом деле не совсем)
- DAC: 2 × 8-bit
- PWM: Motor PWM, LED PWM до 16
- Интерфейсы: 4 × SPI | 2 × I2S | 2 × I2C | 3 × UART | 1 host (SD/eMMC/SDIO) | 1 slave (SDIO/SPI) и т.д.
Так как данная статья лишь обзорная, я не буду подробно останавливаться на всех этих функциях и интерфейсах. Более подробно с ними вы можете познакомиться из других статей на данном сайте. Например, про GPIO есть отдельная статья, про I2C – другая. В данной статье пока что хочу обратить ваше внимание на два факта:
1. В этих ваших интерьнетах довольно часто встречается заблуждение, что “выводы esp32 и esp8266 толерантны к напряжению 5в” / “не очкуй Славик, я сто раз так делал“. Лично я категорически не согласен с этим утверждением, и вот почему.
- Во-первых, основной официальный документ на ESP32 – технический паспорт (или по аглицки datasheet) однозначно утверждает, что максимально допустимый уровень напряжения на любом GPIO – VDD+0.3В, то есть 3,3+0,3 = 3,6В. Фраза “можно и 5В” в нем нигде не встречается.
- Во вторых на многих микроконтроллерах каждый GPIO защищен двумя диодами – на GND и на +3.3В, то есть при подаче на вход 5В диод откроется и сбросит “лишнее” напряжение на шину питания. Лучше от этого не станет никому – ни микроконтроллеру, ни источнику 5В.
- В третьих – на практике ESP32 шина I2C при подnяжке SDA и SCL к +5в отказывается работать, что и следовало ожидать. Впрочем это не мешает китайцам делать как им вздумается.
2. Так же хочу обратить ваше внимание на то, что, согласно спецификации, выводы GPIO допускают ток аж до 40 mA “высокого” уровня и до 28 mA “низкого” уровня. Это позволяет управлять различными слаботочными устройствами типа светодиодов напрямую, без применения коммутирующих транзисторов. Причем ток в нагрузке можно регулировать программным способом, без использования ШИМ, в некоторых переделах. Дополнительное исследование на эту тему вы можете найти тут.
Подробнее о том, какие выводы можно использовать, а какие нет – рассказано чуть ниже. А есть ещё и отдельная статья, посвященная данной теме.
Модули ESP32
В списке ниже приведены основные модули, которые можно приобрести в настоящее время, в том числе и на AliExpress. Редкие модели я не буду рассматривать, но внизу есть ссылка на сайт espressif, где вы можете найти информацию по любым модулям. Сам я использую пока что только модули серий WROOM и WROWER. Кликните по названию модуля, чтобы открыть технический паспорт модуля.
Серия ESP32-WROOM (без дополнительной внешней памяти):
- ESP32-WROOM-32 – модуль с печатной антенной, скорее всего на базе чипа ESP32-D0WD – вероятнее всего “левого” происхождения; но существует вероятность что внутри установлен чип ESP32-D0WDQ6
- ESP32-WROOM-32D – несколько устаревший, но всё еще актуальный модуль с чипом ESP32-D0WD и печатной антенной, на текущий момент сняты с производства и не доступны к отгрузке на сайте Espressif. Но на складах AliExpress, их, видимо ещё достаточно, и их легко можно заказать.
- ESP32-WROOM-32U – версия модуля на базе чипа ESP32-D0WD (то есть аналог …-D), но с разъемом для внешней антенны
- ESP32-WROOM-32E – современная версия на основе “исправленных” чипов ESP32-D0WD-V3 и печатной антенной. Уже доступны к заказу на AliExpress, но стоят пока немного дороже.
- ESP32-WROOM-32UE – современная версия с чипом ESP32-D0WD-V3 и с разъемом для внешней антенны
Серия ESP32-WROVER (c дополнительной внешней памятью SPIRAM):
- ESP32-WROVER – модуль с печатной антенной и дополнительной внешней памятью SPIRAM, скорее всего на базе чипа ESP32-D0WD-V3 – вероятнее всего “левого” происхождения; но существует вероятность что внутри установлен чип ESP32-D0WD
- ESP32-WROVER-B – несколько устаревший, но всё еще актуальный модуль с чипом ESP32-D0WD и печатной антенной
- ESP32-WROVER-IB – несколько устаревший, но всё еще актуальный модуль с чипом ESP32-D0WD, печатной антенной плюс с разъемом для внешней антенны
- ESP32-WROVER-E – современная версия на основе “исправленных” чипов ESP32-D0WD-V3 и печатной антенной
- ESP32-WROVER-IE – современная версия на основе “исправленных” чипов ESP32-D0WD-V3, печатной антенной плюс с разъемом для внешней антенны
Дополнительно могут быть указаны размеры flash-памяти и внешней RAM, например:
- N4R8 – 4 Mb flash и 8 Mb SPIRAM
- N8R8 – 8 Mb flash и 8 Mb SPIRAM
- N16R8 – 16 Mb flash и 8 Mb SPIRAM
Есть ещё несколько модулей в классической серии, но они пока редко распространены в дикой природе (aliexpress – прим.авт.). Информацию по другим модулям вы можете найти здесь.
В заключение хочу отметить, что если вы хотите разрабатывать устройства, используя “чистые” модули ESP32-WROOM, то можно попробовать приобрести вот такую плату с загадочным названием “тесты доска горелки“, с помощью которой теоретически можно прошить модуль, а уже потом впаять его в готовую плату:
Не пугайтесь – это не приспособление для сжигания инструмента, как нам вещает сайт. Увы, но прошить модули с помощью этой платы я так и не смог (а через адаптер USB – UART – легко).
Платы ESP32
На AliExpress можно найти платы разработчика на любой вкус и кошелек. Я редко использую собственно “чистые” модули, только когда требуется особая компактность. В большинстве случаев гораздо удобнее использовать готовые платы с уже напаянным модулем, стабилизатором питания и интерфейсом USB. Если использовать специальные разъемы, то можно легко снимать плату для перепрошивки или замены, а под ней можно разместить дополнительные компоненты в целях компактности. На рисунке ниже пример устройства под плату ESP32 DevKitС V4.
Однако, использование “плат разработчика” накладывает некоторые ограничения, которые следует учитывать. Рассмотрим их ниже на примере ESP32 DevKitC V4.
ESP32 DevKitС V4
“Официальная” (разработка Espressif) и самая популярная плата на основе “классической” линейки ESP32-WROOM или ESP32-WROVER. Кстати, продаются также “пустые” платы (без модуля), на который вы можете припаять любой выбранный модуль самостоятельно.
Если обратиться к документации, можно увидеть следующую схему выводов платы:
Что очень удобно, из под ESP-IDF для большинства интерфейсов можно использовать произвольные выводы, а не только заранее определенные. Но не всё так гладко, как кажется сначала.
Ограничения выводов ESP32 DevKitС
Согласно документации, модуль WROOM-32 имеет 34 GPIO. Но, не все контакты можно использовать в своих проектах.
- Нельзя использовать GPIO 6-11 (D0, D1, D2, D3, SCK, CMD), так как эти выводы используются для доступа к FLASH памяти. Сразу исключайте их из своих проектов, причём это справедливо и при использовании “чистых” модулей. Кстати, на новых модулях ECO V3 (с индексами E) они просто не выведены. Профессиональные разработчики, которые используют эти контакты для подключения своих flash модулей, очень расстроены этим фактом.
- Нельзя использовать порт SERIAL 0: GPIO 1 и GPIO 3 (RX, TX), так как он использован для подключения USB конвертора. Если вам очень необходим “основной” serial – используйте модуль вместо платы.
- Не рекомендуется использовать GPIO 0, так как он используется для прошивки микроконтроллера через UART0. Это основной вывод из так называемых “Strapping Pins” / “Биты обвязки“. ESP32 войдет в режим прошивки, когда GPIO 0 удерживается на низком уровне при сбросе. Таким образом, внешняя подтяжка GPIO 0 нарушит работу системы прошивки через UART0. Но его вполне можно использовать для управления нагрузкой, если это крайне необходимо.
- GPIO 2, 5, 12, 15, судя по схеме модуля, на платке никуда не задействованы, но так же помечены как “Strapping Pin Functions” / “Биты обвязки“. Это означает, что состояние этих выводов считывается процессором по время работы системы сброса микроконтроллера (в том числе сброс при включении питания, сброс по сторожевому таймеру RTC и сброс по BrownOut). Защелки на этих выводах удерживают логические уровни до тех пор, пока микропроцессор не будет перезапущен. Биты обвязки настраивают режим загрузки устройства, рабочее напряжение VDD_SDIO и другие начальные настройки системы. Использовать эти выводы можно, но очень осторожно. Возможно придется вытащить плату с модулем или сам модуль из панельки для перепрошивки через последовательный порт.
– GPIO 0 (повторюсь) должен иметь низкий уровень “0“, чтобы войти в режим загрузки микропрограммы через последовательный порт UART0. Иначе будет использован обычный режим запуска.
– GPIO 2 должен быть либо оставлен неподключенным/плавающим, либо иметь низкий уровень, чтобы войти в режим загрузки прошивки через UART0.
– GPIO 5 каким-то образом связан с внешней flash-памятью, хотя лично мне из документации сложно понять, как именно.
– GPIO 12 управляет напряжением питания внешней flash-памяти. Если установлено значение “1“, напряжение флэш-памяти (VDD_SDIO) составляет 1,8 В вместо 3,3 В по умолчанию. Это может препятствовать прошивке и загрузке, если используется флэш-память 3,3 В, а этот контакт вытянут на высокий уровень, что приводит к физическому отключению флэш-памяти по питанию. Имеет внутреннюю слабую подтяжку к земле, поэтому по умолчанию на данном выводе будет низкий уровень.
– GPIO 15 управляет отладочными сообщениями при запуске микроконтроллера. Если задано значение “0“, отключаются загрузочные сообщения, распечатываемые загрузчиком. Имеет внутреннюю слабую подтяжку к питанию, поэтому по умолчанию на данном выводе будет высокий уровень.
– * GPIO 4 так же включен в список GPIO_STRAP, но в настоящее время никак не используется. Поэтому вы можете использовать его по своему желанию абсолютно свободно. - Если вы используете плату с ESP32-WROWER или ESP32-SOLO-1 на борту, то вы не сможете использовать GPIO 16 и 17, так как они задействованы в QSPI интерфейсе, причём это справедливо и при использовании “чистых” модулей (о чем я писал выше).
- GPIO 34,35,36,39 можно использовать только “на вход”, следовательно, нельзя подключать к ним светодиоды, зуммеры, датчики типа DHT22 и DS18B20 и управлять какой-либо нагрузкой.
- Документация обещает нам 16 выводов, доступных как ADC в двух отдельных каналах. Мало того, что сам ADC реализован “чудесато”, так оказывается, что канал ADC 2 нельзя использовать, если вы подключены к WiFi. Более подробно о ADC поговорим в отдельной статье.
На данной плате установлен красный светодиод, который не подключен ни к одному из выводов, а просто и тупо отображает наличие питания 5В на плате. При использовании данной платы в каком-либо устройстве на постоянной основе светящийся светодиод может только мешать (подсвечивать корпус изнутри), да это ещё и лишний потребляемый ток впустую. Поэтому я просто сдуваю светодиод паяльным феном. Можно аккуратно “сковырнуть” его тонкой отверткой, но будьте очень аккуратны – можно легко повредить соседнюю дорожку к кнопке сброса.
Я использую примерно такой excel-файл для распределения выводов на те или иные функции в проекте:
В пустых ячейках “Назначение в проекте” записываю функции, которые будут назначены этим выводам. И только после распределения выводов переношу эти данные в код проекта. Это очень удобно и наглядно, не нужно постоянно держать в памяти номера выводов, которые не рекомендуется использовать и почему. Скачать пример такого файла можно по ссылке.
Есть и ещё платы разработки, выпускаемые Espressif, но в рамках данной статье я не буду их рассматривать. Не пробовал, не знаю…
Клоны и модификации
Существует просто огромное количество плат на основе ESP32, я просто “пробегусь” по некоторым из них, которые у меня есть или просто мне приглянулись.
ESP32 DevKit V1 38 pin
Очень похожая на ESP32 DevKitС V4 плата. Отличие состоит в том, что светодиод подключен не к питанию, а к одному из GPIO, поэтому может как использоваться как индикатор. Кроме того, данная плата не предусматривает установку модулей WROVER. Из-за того, что модуль напаян поверх платы, “дальнобойность” WiFi может быть немного ниже. В принципе нормальная платка, до сих пор где-то работает.
ESP32 DevKit V1 30 pin
Модификация предыдущей платы, из которой исключены контакты GPIO 6-11, которые всё равно нельзя использовать. Из-за этого платка получилась немного компактнее. Долго лежала в коробке, в прошлом году собрал на ней термостат. В термостате проработала всю зиму на улице, и ничего, жива…
NodeMCU-32 v1.3
Ещё одна похожая на ESP32 DevKitС плата, но выпускается уже под брендом Ai Thinker. Расположение выводов совпадает с DevKitC V4 полностью, но нумерация нанесена на обратную сторону, что несколько затрудняет отладку при подключении щупов и сборке прототипов на монтажных платах. Использован другой тип преобразователя USB-интерфейсов, так что, возможно, придется установить ещё один драйвер в систему. Ещё одно отличие – наличие дополнительного светодиода на GPIO2, который можно использовать для какой-либо индикации в тестовых проектах.
AI Thinker ESP32-CAM
Ещё одна отладочная плата от Ai Thinker, предназначенная для работы с камерой. Позволяет дешево и сердито собрать самодельное видеонаблюдение или фотокамеру. На мой взгляд довольно неоднозначное устройство.
ESP-IDF поддерживаются сразу несколько моделей камер. По умолчанию установлен сенсор OV2640, но поддерживаются и другие – список сенсоров довольно обширный. Для обеспечения съемки в условиях низкой освещенности на стороне камеры установлен довольно мощный светодиод, который можно использовать как вспышку или подсветку. Во время работы с камерой процессор может сильно нагреваться, поэтому если вам не нужна камера – её следует периодически отключать.
На модуле нанесена маркировка ESP32-S, что казалось бы, призрачно намекает на новую S-серию, но на деле внутри модуля установлен обычный ESP32-D0WD-V3 с 4Мб Flash на борту. Модуль позволяет при необходимости использовать внешнюю IPEX антенну путем перепайки перемычки, но перемычка очень и очень маленькая.
На плате также установлен чип внешней PSRAM-памяти объемом от 4 до 16Мб (на моем экземпляре 8Мб) – это позволяет временно хранить большие изображения в оперативной памяти. Но если вам требуется долговременное хранение отснятых материалов – на плате предусмотрен картридер для внешних карт памяти формата MicroSD.
Интерфейс USB для прошивки на данной плате не предусмотрен, поэтому прошивать данную плату придется через внешний адаптер USB-TTL. Но кнопки IO0, которая требуется для входа в режим перепрошивки на плате не предусмотрено, поэтому для прошивки придется подключать внешнюю. В продаже также имеются сугубо специальные платы-адаптеры конкретно для ESP32-САМ, но и они не без недостатков – на них может глючить вывод отладочных сообщений в UART.
Довольно неплохой обзор ESP32-CAM здесь.
ESP32 MINI
Миниатюрная версия для упрощенной сборки прототипов устройств в виде “этажерки”. Существуют подходящие по размерами и контактам платы с реле и различными сенсорами, что позволяет без пайки и проводов собрать необходимое устройство.
Прекрасно подойдет в качестве “детского” конструктора, паять ничего не придется. Но если делать на основе нее прибор, то разводить дорожки не очень удобно. Впрочем, если заказать плату на заводе в Китае, то можно и на ней. Но тогда уж лучше сразу под “чистый” модуль заказывать плату.
Wemos D1 R32: ESP32 в форм-факторе Arduino
Если вы привыкли работать с “большими” платами Arduino, то вам может понравиться данная плата. Но она так же больше подходит для опытов, чем для реальной эксплуатации. Но это на мой взгляд.
Йотик 32
Ещё одна плата для опытов и обучения электронике и программированию. На этот раз от отечественных разработчиков. Плата имеет довольно хорошую защиту от неумелых действий пользователя, а также снабжена аппаратными устройствами согласования логических уровней 3,3 / 5В, поэтому к ней безболезненно можно подключать большинство Arduino-совместимых модулей. Недостаток – относительно высокая цена. Но если вы только осваиваете мир микроконтроллеров, имеет смысл переплатить, чем вывести из строя более дешевое устройство в первый же час освоения. Подробный обзор тут.
WT32-SC01: ESP32 с 3,5′ LCD экраном
Если Вам нужен достаточно большой LCD экран, можно найти версию ESP32 с интегрированным экраном размером до 4 дюймов. Мне понадобилась панель управления умным домом, заказал вот такую, жду…
Релейный модуль с ESP32
Для удаленного управления нагрузкой можно заказать вот такую плату с реле. Реле может быть и больше, на плате может быть так же блок питания 220В или стабилизатор 12В. Иногда есть модели с корпусами. Но для меня такая плата не очень удобна – так как я предпочитаю взваливать на хрупкие плечи ESP множество задач и задействую выводы по максимуму. Здесь же без танцев с бубном и “колхоза” только ничего не подключить.
Релейный модуль ESP32R4 v3 с расширителем на 8 реле
Довольно интересный модель для автоматизации в корпусе на DIN-рейку. В базовом варианте имеет 4 реле, 4 кнопки и необходимый минимум разъемов для подключения внешних устройств. При необходимости к нему можно подключить дополнительный расширитель на 8 реле. Подробный обзор тут.
ESP32 Relay X4 и ESP32 Relay X8
Ещё один вариант платы от другого производителя. В продаже встречается несколько вариантов – на 2, 4 и 8 реле. Платы отлично входят в готовые корпуса на DIN-рейку. Кроме реле на плате установлен стабилизаторы питания +5В и +3,3В и это всё! Все остальные GPIO выведены на разъемы и вы можете использовать их как вам вздумается. Подробный обзор тут.
Kincony
В заключение хотелось бы отметить одного китайского производителя плат для “самоделкиных”, называется он Kincony. Список выпускаемой продукции у них довольно обширный, поэтому выбрать можно на любой вкус и кошелек. Можете считать это рекламой, хотя я с магазином никак не связан. Обзор одной из моделей можете почитать тут.
Надеюсь, статья помогла вам понять “что есть что” в мире ESP32.
Полезные ссылки
Как всегда, в заключении привожу список полезных ссылок и источников информации для статьи:
На этом пока всё, до встречи на сайте и на telegram-канале!
💠 Полный архив статей вы найдете здесь
Пожалуйста, оцените статью:
Очень полезная статья, спасибо. После прочтения задумался о том какие недавно купил модули. На шильдике написано ESP32-WROOM-32 без каких либо дополнительных букв. Но тем не менее esptool.py выдает: Chip is ESP32-D0WD-V3 (revision 3)
Спасибо за замечание. Подкорректировал статью.
Да, кстати, тоже попадались такие. Но сайт espressif говорит, что без букв на конце это старый чип, снятый с производства. Так что кому верить – неизвестно. Я подозреваю, что это может быть не родной модуль. Просто собирают на другом заводе, используя родные чипы. Выяснить можно, прогрев модуль феном и сняв крышечку.
У меня термостат в гараже уже год на таком работает, вроде бы все ок. Зиму пережил нормально.
Судя по тому что подавляющее большинство модулей и плат продающихся на Ali имеют маркировку отличающуюся от той что описана на сайте Espressif, похоже что это все “не совсем оригинальные” модули на базе на базе чипов Espressiff и узнать что там внутри можно только считав chip revision.
Существуют следующие chip revision (от этого зависит errata)
0 – в последнее время не попадались
1.0 (1.1) выпускались в двух вариантах D0WDQ6 (QFN48 6×6 mm) и D0WD (QFN48 5×5 mm) – отличаются только размером корпуса чипа. Сам чип один и тот же. Сам Espressif выпускал модули WROOM-32 (D0WDQ6) и WROOM-32D (D0WD). Модули отличаются тольк размером, если вы используете платы то никакой разницы нет (chip revison один и тот же)
3.0 (3.1) – чип D0WD-V3, модуль от Espressif WROOM-32E
Судя по последним заказам на Ali практически все модули “не совсем оригинальные”, если обозначение модуля WROOM-32, то будет revision 1. Что там внути D0WDQ6 или D0WD “без вскрытия” не узнаешь, да и это значения не имеет, если обозначение модуля WROOM-32E то скорее всего будет revision 3.
“На Ali модули и платы “не совсем оригинальные”” – тут даже никто спорить не будет, так оно и есть. Китайцы у китайцев “тырят”…
PlatformIO, насколько я помню, показывает версию чипа не только в виде версии, но в “расшифровке”. Хотя, может быть я и ошибаюсь, проверить не на чем
Мне понравился обзор и я прикупил плату с модулем ESP32-WROOM-32E +4 реле и два источника питания. Изучил даташит и возникли вопросы прошивки.
Собираюсь использовать программатор USB-UART CP2102. Но у него нет DTR. На периферийной схеме модуля указана перемычка JP2 и кнопка SW1 активации модуля. Может это можно использовать для прошивки?
Еще вопрос по источникам питания. Использовать 3,3 для подачи на программатор ?
Разобрался с релейной платой. там есть обе кнопки для ручного управления прошивкой EN и BOOT. Беспокоит только подача питания. Подключу релейную плату к внешнему источнику (12В) а пин 3,3в программатора с 3V3 на модуле. Правильно?
Для подключения адаптера, на мой взгляд, по минимуму достаточно трех проводов – RX, TX и GND. Питание адаптер и от USИ прекрасно получит.
Использую плату очень похожую на ESP32 DevKit V1 38 pin, указанную на сайте.
Возникла проблема запуска платы от внешнего блока питания. Замечен не стабильный запуск МК, хотя от компьютера запускается без проблем.
Решение найдено на просторах интернета, подключить Электролитический конденсатор на 10мкФ к ножке EN и GND(есть на самом чипе, не обязательно припаивать к пину платы).
В итоге, плата ESP32 стабильно запускается, без зависания. и БОНУС автоматически переходит в режим прошивки, кнопку не надо нажимать.
Ну так это просто значит, что китайцы запаяли дохлый конденсатор ?, либо на емкости сэкономили ?♂️, по схеме он там есть
Я давно уже V1 не заказывал. V4 – полна коробка. С ними проблем вроде бы нет, если сам с выводами не начудишь.
Нашел конденсатор, похоже реально на емкости сэкономили :D, выглядит крохотным. С выводами у меня получается чудить, 1.8 В подавал на вход. в итоге был дребезг. (не до конца понятно почему программно получилось дребезг убрать, лучше напряжение поднять.)
Почти все Ваши статьи прочитал. Очень интересно и полезно. Большое
спасибо за этот труд. У меня есть два вопроса.
Когда ожидается статья по ADC? мне надо измерять напряжение на аккумуляторах
3.7В, 12В и 24В. Интересно как правильно обвязать вывод. И ещё, планируется ли
статья по OTA?
Мне очень интересны эти вопросы и реализация в ESP32-IDF.
Добрый день!
Сначала отвечу на второй вопрос: по OTA статья планируется, но для этого потребуется изучить TLS-соединения и разметку FLASH-памяти, без этого никак не получится, иначе не ясно будет “что к чему”. А времени особо нет. Да и интерес читателей к каналу на Дзене угас почти совсем.
По поводу ADC – там все сложно. Дело в том, что статья уже была в черновиках, а с приходом IDF 5.0.0 все изменилось принципиально, весь API. Черновик уже не актуален. Желания переписывать уже нет.
По поводу обвязки – я использую обычный резистивный делитель, чтобы вогнать диапазон 0-12 в заданный. Хорошо бы использовать “точные” резисторы с малым температурным коэффициентом, чтобы показания не плавали. Я использовал старые “советские”, они всяко лучше китайских резюков со стальными выводами.
Про ADC я уже немного писал в статье https://kotyara12.ru/iot/esp32pinout/, и собственно по аппаратной части мне собственно добавить нечего.
Всем доброго времени суток!Может кто-нибудь знает,что означают цифры на конце модели чипа esp32-pico-v3-02?.Буду признательна знатоку.
Добрый день, Елена! Самое логичное – посмотреть у производителя. Ссылка в статье есть: https://products.espressif.com/#/product-selector?names=
Там есть в таблице и pico-v3, и pico-v3-02. У 02 меньше GPIO, но больше Flash и есть встроенная PSRAM
Flash (MB): 4 / 8
PSRAM (MB): 0 / 2
GPIO: 31 / 29
Certification: BT Certification / BT SIG
Здравствуйте! На официальном сайте esp32 появился новый чип esp32-h, возможно, стоит его упомянуть в статье. Спасибо.
Спасибо за обзор и другие полезные статьи. Очень помогло как новичку. А то мы сначала покупаем, а потом тока разбираемся, что купили 🙂
Здравствуйте, спасибо за обзор. Мне по случаю достался модуль ESP32-A1S ESP32-Audio-Kit. Кроме характеристик и того, что это звуковая плата, других развернутых описаний и обзоров я не нашел. Нет ли у Вас более подробной информации по этому устройству?