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

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

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

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

 


Чипы, модули, платы…

Вопрос: Почему все носятся с этим ESP32, когда скажем STM32 гораздо круче?
Ответ: Ответ прост: это, пожалуй, единственный массовый микроконтроллер с WiFi и BT “на борту”. И дешевый. Да он далеко не идеален, но альтернатив с таким же набором характеристик и такой же ценой – по сути нет.

 

Вопрос: Чем что обозначает буква после обозначения ESP32 – например ESP32-C, ESP32-S, ESP32-P  и т.д.?
Ответ: Буква обозначает серию, в настоящий момент компания Espressif выпускает следующие серии чипов:

Серия Позиционирование Архитектура CPU Беспроводная связь Ключевые особенности
ESP8266 Ветеран, первый чип широкого распространенный с WiFi Tensilica L106 (одноядерный) @ 160 МГц Только Wi-Fi 4 (802.11 b/g/n) Минимальная цена, простейшая обвязка, колоссальное сообщество. Нет Bluetooth, нет аппаратной защиты памяти. Мало памяти (тянет только одно TLS одновременно).
ESP32  Универсальная и не стареющая классика Xtensa LX6 (двухъядерный) @ 240 МГц Wi-Fi 4Bluetooth Classic + BLE 4.2 Единственная серия с Classic BT для аудио. Огромное количество периферии (сенсоры, Ethernet, CAN т.д.).
ESP32-C Современный бюджетная серия (идейный наследник 8266) RISC-V (одно- или двухъядерный) Wi-Fi 4/6 + BLE 5.x
(+ Thread/Zigbee в C6)
Самая низкая цена среди RISC-V процессоров Espressif. C3 — прямая замена 8266 по цене, но с BT и безопасностью.
ESP32-S Современная серия, с упором на производительность и AI (например для графики и камер) Xtensa LX7 (одно- или двухъядерный) @ 240 МГц Wi-Fi 4 + BLE 5.0 (кроме S2) Ускорители нейросетей, интерфейс LCD/Камера. Максимальный объем RAM (до 512 КБ)
ESP32-H Mesh-сети (Thread/Zigbee), без WiFi RISC-V (одно- или двухъядерный) BLE 5.x + Thread + Zigbee
Без Wi-Fi
Минимальное энергопотребление в спящем режиме (мкА). Для батарейных датчиков.
ESP32-P Edge AI, HMI и вычислительный монстр Высокопроизводительный RISC-V (двухъядерный) @ до 400 МГц Отсутствует (только внешний чип) Поддержка USB 2.0 HS, MIPI-CSI (камеры), I3C. Самый мощный CPU среди всех серий Espressif.

 

Вопрос: Большая “микросхема” с жестяной крышечкой и антенной это и есть чип ESP?
Ответ: Нет, это модуль. Внутри него, под крышечкой, установлен сам чип (SoC), кварцевый резонатор, микросхема flash-памяти, иногда микросхема дополнительной PSRAM памяти, схема согласования антенны радиоканала и некоторые другие элементы. То есть все минимально необходимые для работы компоненты. Об этом можно подробнее почитать в статье “Чипы, модули, платы“.

 

Вопрос: Как выбрать нужный для проекта модуль и не запутаться в этих самых сериях?
Ответ: Можно ориентироваться на следующий алгоритм:

  • Вам нужно дешево и сердито, только Wi-Fi, без сложной логики (включить свет, отправить одну цифру на сервер без TLS раз в минуту) → Берите ESP8266. Это все еще рабочий вариант для самых простых проектов, хотя и устаревший.
  • Нужен Wi-Fi + Bluetooth или чуть больше памяти → ESP32-C3, он почти такой же дешевый, как 8266, но современный и безопасный.
  • Нужен Wi-Fi + Bluetooth Classic (для колонки) или хотите использовать очень много готовых библиотек → ваш выбор оригинальный ESP32.
  • Нужны Zigbee/Thread (Matter) и работа от батареекESP32-H2, у него нет Wi-Fi, но он потребляет единицы мкА.
  • Нужна работа с камерой, дисплеем или голосовой ассистентESP32-S3. Ну или просто современный выбор взамен “классики”.
  • Нужна мощь без встроенного радио (обработка видео, USB-накопители) → ESP32-P4.

Важное предостережение про ESP8266: не пытайтесь использовать его в промышленных устройствах, которым нужна защита от взлома, или в проектах с большим количеством RAM, прерываний и таймеров — его архитектура для этого не предназначена. Но для прототипов и простейшей домашней автоматики — вполне подойдет.

 

Вопрос: Допустим мне нужна оригинальная ESP32, чем отличается модуль ESP32-WROOM от ESP32-WROVER?
Ответ: Для классической линейки ESP32 модули WROVER дополнительно оснащены микросхемой внешней оперативной памяти, которая работает через достаточно узкое “окно” в адресном пространстве (для новых линеек возможен доступ к внешней памяти уже через DMA). Но взамен мы теряем два GPIO ( #16 и #17 ), которые как раз и заняты обслуживанием этой самой внешней памяти. Более подробно о чипах и модулях классической линейки я рассказывал в другой статье

 

Вопрос: В спецификациях ESP32 указан довольно небольшой размер ROM (ПЗУ). Есть ли EEPROM? Где вообще хранится прошивка и данные?
Ответ: У ESP8266 и ESP32 вообще нет чипа EEPROM в классическом понимании. А в ROM самого чипа хранится только специальная программа-загрузчик первой очереди, прошитая туда “с завода”. Вся информация (и прошивка(и) и ваши данные) хранятся на внешней микросхеме Flash-памяти, которая находится под крышечкой модуля. Весь объем Flash-памяти разбивается на несколько разделов – в некоторых из них хранится прошивка, в которых – различные данные. Подробнее об этом читайте здесь, здесь и здесь.

 

Вопрос: Что за загадочные обозначения вроде “N8R8” иногда указываются в характеристиках модулей и плат с ESP32?
Ответ: Таким образом указан объем flash-памяти (после буквы N) и дополнительной внешней RAM (ОЗУ) (после буквы R). Все это в мегабайтах. Таким образом N8R8 означает, что объем встроенной flash-памяти составляет 8 МБ, и объем дополнительной RAM тоже 8 МБ. На старых модулях (и модулях производства сторонних компаний) такого обозначения может и не быть, но на новых модулях, произведенных espressif, новая маркировка присутствует, например MFN4 ( = N4R0 ) или MGN16R8 ( =N16R8 ).

 

Вопрос: Чем отличаются отладочные платы разработчика NodeMCU и DevKit с разными чипами USB-интерфейса (CH340, CP2102, FT232)?
Ответ: С точки зрения программирования никаких отличий нет. Но потребуется установить разные драйверы в Windows. И, возможно, будет немного отличатся максимальная скорость прошивки.

 

Вопрос: Зачем на новых платах разработчика с ESP32 два USB-порта?
Ответ: Классический ESP32 можно было программировать только через последовательный порт UART0, поэтому на платах с “классикой” имеется встроенный USB-UART интерфейс. На современных сериях чипов ESP32 (ESP32-S, например) добавили поддержку встроенного USB JTAG-интерфейса. Но старый и проверенный UART тоже не убрали и он по прежнему отлично работает. Поэтому некоторые производители плат оставляют оба варианта – а вы можете выбрать тот, который вам больше подходит.

 

ВопросМожно ли ESP32 работать при напряжении питания 5 вольт?
Ответ: Чип и модуль – однозначно нет. Согласно datasheet-у, допустимое напряжение питания должно находиться в пределах 3,2~3.6В. Примерно то же самое относится и к GPIO (подробнее ниже, в разделе GPIO). Но что за 5В на выводах платы DevKit или NodeMCU? Те 5 вольт, которые подаются на плату типа DevKit, преобразуются в необходимые для питания микроконтроллера 3,3В дополнительным стабилизатором, установленным на плате. Если вы планируете использовать “голый” модуль или чип, вы должны будете озаботиться напряжением питания модуля самостоятельно.

 

Вопрос: Где почитать официальную документацию?
Ответ: Основные ссылки есть внизу этой страницы.

 


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

Вопрос: Какой софт, язык и framework (платформу) лучше использовать для программирования ESP32?
Ответ: Основных платформы две – Arduino ESP32 и ESP-IDF, и обе используют язык C/C++ и основаны на операционной системе FreeRTOS. Что выбрать? Сложный вопрос, каждый выбирает то, что ему ближе… Я попытался описать все эти тонкости в статье “Как и на чем программировать ESP32 и ESP8266“.

 

Вопрос: Что такое ESP-IDF, как оно расшифровывается и для чего оно используется?
Ответ: ESP-IDF – это основная API-платформа (framework) для программирования SoC семейства ESP32. Расшифровывается оно как Espressif IoT Development Framework. ESP-IDF содержит все необходимые API для всех аппаратных возможностей микроконтроллеров семейства. Написано это все на языке Си и в качестве основы использует операционную систему реального времени FreeRTOS. Все остальные фреймворки (например самый популярный Arduino core for ESP32) – это по сути “обертки” поверх ESP-IDF.

 

Вопрос: Что такое Arduino core (или Arduino32 или Arduino esp32)?
Ответ: Это платформа-“обертка” вокруг ESP-IDF. созданная специально для того, чтобы “впихнуть” ESP-IDF под систему разработки Arduino IDE. Авторы – та же самая Espressif, это такая же официальная платформа, но с несколько ограниченными возможностями. И таки да, она также работает на основе FreeRTOS.

 

Вопрос: Как убрать  или каким-либо образом совсем избавиться от FreeRTOS из ESP32!!!??? Зачем он мне? Что, на ESP32 без FreeRTOS никак нельзя?
Ответ: Увы, но никак. Даже если вы пишете код в Arduino – вы вполне можете “делать вид”, что жизни на марсе FreeRTOS не существует, но FreeRTOS будет работать на ESP32 по “тихому”, не зависимо от вас и вашего кода. Избавится наверное теоретически можно, но вам придется написать свой собственный загрузчик, а также свой собственный SDK для работы с “железом”, так как весь стандартный API заточен под FreeRTOS.

 

Вопрос: Почему при компиляции простейших примеров типа “Blink” и “Hello, world” получается огромный бинарник и используется так много памяти?
Ответ: Причина та же самая, что и предыдущем случае – даже в самом простейшем случае используется FreeRTOS, а значит запускается планировщик и служебные задачи. Отсюда и накладные расходы.

 

Вопрос: Как используются ядра на двухядерных версиях ESP32?
Ответ: По умолчанию на первом (нулевом) ядре процессора работает WDT (сторожевой таймер), планировщик FreeRTOS и некоторые другие служебные задачи. А второе ядро по умолчанию отдано под прикладную задачу или задачи. Но ничто не мешает вам изменить это поведение программным способом. В последних версиях платформы Arduino 32 появилась опция, позволяющая изменить это поведение с помощью стандартных настроек IDE.

 

Вопрос: Как установить ESP-IDF на свой компьютер?
Ответ: Сейчас есть достаточно простая и удобная утилита для этого – ESP-IDF Installation Manager, подробнее об ней читайте в статье “Установка ESP-IDF с помощью ESP-IDF Installation Manager“.

 

Вопрос: Можно ли из ESP-IDF использовать Arduino-совместимый код?
Ответ: В последних версия ESP-IDF можно! Для этого вам нужно создать проект ESP-IDF и подключить Arduino core for ESP32 как компонент ESP-IDF. Таким образом вы получаете возможность работать с Arduino-кодом из проекта ESP-IDF и бонусом получаете возможность настройки проекта.

 

Вопрос: Как установить PlatformIO IDE на свой компьютер?
Ответ: Это достаточно подробно было разобрано в статьях “Установка PlatformIO” и “Переползаем с Arduino IDE на VSCode + PlatformIO“.

 


Прошивка ESP32

Вопрос: Хочу программировать ESP сам! Какой кабель мне понадобится?
Ответ: Как минимум любая “отладочная” плата типа DevKit или NodeMCU-32 (со встроенным USB-портом). Если вы используете такую платку, то вам потребуется только компьютер с установленной средой программирования (это могут быть Arduino IDE, VSCode + ESP-IDF, PlatfotmIO, Espressif IDE и т.д.) и USB-кабель с соответствующим разъемом (как правило это Type C или Micro USB). Другое дело, если на используемой вами плате нет USB-порта, а есть только разъем UART – тогда понадобится преобразователь интерфейса.

 

Вопрос: Нужен ли специальный аппаратный программатор для ESP32? 
Ответ: Нет, не нужен – обычно достаточно USB-кабеля. В относительно небольшом (ROM) ПЗУ ESP с завода уже прошита специальная программа – bootloader (загрузчик). Bootloader это служебная мини-программа, которая позволяет загружать скомпилированный вами код в микроконтроллер без использования специальных аппаратных программаторов. То есть по сути это программный программатор ESP (каламбур-с). Именно он берет на себя функции получения двоичных данных из UART (или USB) и записи на flash-память. Но, кроме функций программатора, bootloader выполняет и другие функции – он управляет выбором OTA раздела и запуском записанного туда ранее кода. ESP-IDF позволяет вам использовать либо стандартный загрузчик, либо написать свой.

 

ВопросГде найти драйвер для подключения ESP32 к компьютеру? 
Ответ: Для плат с использованием моста USB-UART0 (все классические ESP32) можно воспользоваться следующими ссылками, в зависимости от того, какая микросхема использована на вашей плате: WCH CH340 / CH341, Silicon Labs CP2102, FTDI FT232. Если вы подключаете ESP32-C3 или ESP32-S3 через интегрированный порт USB, вам потребуется другой драйвер – Espressif – WinUSB support for JTAG (ESP32-C3/S3).

 

Вопрос: Hard resetting via RTS pin – это ошибка или это нормально?
Ответ: 
Это абсолютно нормальное поведение. На русский переводится как “Жесткий сброс через контакт RTS…” – то есть это о том, что прошивка успешно завершилась, и плата сейчас сама перезагрузится, чтобы запустить только что загруженный код.  Это сообщение выдает инструмент esptool.py (с помощью которого, собственно, и загружается ваша прошивка в модуль), после того, как прошивка успешно загружена и проверена. “Позвольте,” – спросит внимательный читатель – “но ведь микроконтроллер сбрасывается низким уровнем на выводе EN, а вывода RTS у ESP32 вообще нету“. Дело в том, что на многих отладочных платах программирование происходит через интерфейс USB-UART, который как раз и имеет сигнал RTS; который, в свою очередь, связан с выводом EN микроконтроллера посредством специальной схемы на так называемых “волшебных транзисторах”. Вот и получается, что “дергая” сигнал RTS, система сборки перезагружает SoC. Подробнее об этом здесь.

 

Вопрос: В спецификациях всех ESP-чипов указан очень небольшой размер ПЗУ (ROM)! Почему? Как происходит запуск прошивки на ESP?
Ответ: ESP в чем то очень похож на обычный компьютер. На всех чипах ESP встроенное ПЗУ используется только для хранения и запуска программы загрузчика первой очереди (точно также как это делает BIOS на компьютере). Ваша прошивка вместо этого хранится на внешней микросхеме Flash-памяти. После его запуска он проверяет состояние Strapping pins, подключает микросхему Flash-памяти через интерфейс SPI, загружает таблицу разделов (точно также как на компьютере), и запускает загрузчик второй очереди, который хранится в специальном разделе. Затем уже загрузчик второй очереди выбирает активный раздел для запуска прошивки, загружает ее в память и запускает.

 

Вопрос: Прошивка (скетч) не помещается на flash-память! Неужели flash-память такая маленькая, а ведь обещали 4Мб?
Ответ: Дело в том, что подключенная к микроконтроллеру flash-память используется не только для хранения кода прошивки, но и для других целей. Принцип организации flash памяти примерно тот же, что и на диске Вашего компьютера – весь общий доступного объем разбит на несколько отдельных разделов, в каждом из которых может что-то храниться. Причем разделов, используемых под хранение кода прошивки, может быть несколько. Поэтому размер раздела, выделенного под код, много меньше общего доступного объема. Подробнее об этом читайте здесь.

 

Вопрос: Как прошить или перепрошить ESP, если на плате нет USB-порта?
Ответ: В этом случае вам необходимо воспользоваться любым внешним преобразователем интерфейса USB <-> UART. Существует огромное количество вариантов таких адаптеров, но вам нужен такой, который имеет полноценную поддержку 3.3В на линиях данных. Искать на ali: usb ttl 3v3. Возможно, придется перевести чип в режим программирования “вручную” – см. ниже.

 

Вопрос: Как перевести ESP в режим программирования “вручную” (например при прошивке через COM-порт UART0)?
Ответ: Режимом загрузки прошивки в ESP32 “управляет” Strapping pin GPIO0 – низкий уровень на этом выводе при сбросе микроконтроллера означает, что загрузчику нужно быть готовым к принятию двоичных данных прошивки. К этому выводу почти на всех платах с ESP подключена кнопка BOOT. Соответственно для перевода ESP32 в режим программирования необходимо зажать кнопку BOOT, и не отпуская её, кратковременно нажать кнопку RESET. После данных манипуляций микроконтроллер переходит в режим программирования. На платах разработчика (ESP32-DevKit-V1, ESP32-DevKitС-V4 и подобных) обычно стоит специальная схема для управления уровнями на GPIO0 и RESET, поэтому нажимать кнопку BOOT обычно не требуется. Но для плат типа ESP32 Relay X4 приходится выполнять данные манипуляции вручную.

 

Вопрос: Почему иногда ESP32 не “прошиваются” через кабель USB?
Ответ: Иногда микроконтроллер никак не удается “прошить” через USB-кабель – программа загрузки прошивки не “видит” микроконтроллер, то есть ESP не переходит в режим программирования. Причин этого может быть много – от неисправности самого кабеля, до чего угодно.
Самая вероятная причина этого – микроконтроллер отказывается переходить в режим прошивки по причине неверных логических состояний на Strapping pins из-за подключенного внешнего оборудования. Доходит даже до того, что flash-память может просто лишиться питания, так как этим тоже управляет вывод GPIO12. Если Ваша ESP32 подключена к схеме через панельку (а я всегда рекомендую так делать) – выньте её из основной схемы и повторите попытку. Если прошивка “свободной” ESP32 завершиться успешно – причина именно в Strapping pins. Будьте внимательны при выборе выводов для проекта.
Если Strapping pins не задействованы и не подтянуты никуда, то попытайтесь перевести чип в режим программирования вручную с помощью кнопок, как описано выше. Если вручную режим программирования выбрать получается, причина может быть в недостаточной емкости конденсатора на выводе EN – подробности тут.

 


Система сборки

Вопрос: Что такое idf.py, где найти idf.py?
Ответ: idf.py — это основной инструмент командной строки для ESP-IDF, он используется для управления проектами: сборки, прошивки и отладки. На самом деле сам этот скрипт ничего не выполняет, это скрипт-обертка — он вызывает CMake для настройки проекта и Ninja (или GNU Make) для непосредственной компиляции; либо инструмент прошивки esptool.py — через него загружают готовую прошивку в чип. 
Файл idf.py входит в состав ESP-IDF. Его фактическое расположение зависит от ОС и способа установки — он лежит в папке tools внутри директории ESP-IDF, например: .../esp-idf/tools/idf.py. Для запуска обычно не используют полный путь, а обращаются к нему, используя переменную окружения IDF_PATH (путь к корню ESP-IDF).
Примеры команд:

  • idf.py set-target <чип> – выбор микроконтроллера
  • idf.py menuconfig – настройка параметров проекта
  • idf.py build – компиляция (сборка)
  • idf.py -p <порт> flash – прошивка на плату

 

Вопрос: Как запустить idf.py?
Ответ: Это зависит от того, откуда вы хотите его запустить:

  • Самый простой и очевидный способ – использовать встроенные команды расширения ESP-IDF в VSCode (Visual Studio Code) / Theia IDE, если вы его используете:
    Нажмите Ctrl+Shift+P → начните вводить ESP-IDF: Open ESP-IDF Terminal, затем выполните эту команду — откроется терминал с уже настроенным окружением, и idf.py будет доступен сразу.
  • Из VSCode + PlatformIO: idf.py напрямую здесь НЕ используется. так как PlatformIO использует свою собственную систему сборки. Вместо этого вы работаете с командой: pio run -t <цель>, например:
    • pio run – собрать проект
    • pio run -t menuconfig – настроить проект
    • pio run -t upload – прошить
    • pio run -t monitor – открыть монитор порта
  • Из командной строки Windows (cmd / PowerShell): перед использованием idf.py нужно активировать окружение ESP-IDF. Самый надёжный способ: запустите специальный ярлык из меню «Пуск»: ESP-IDF Command Prompt (cmd) или ESP-IDF PowerShell — он сам всё настроит, и idf.py будет доступен.
    Если вы работаете в обычном терминале (cmd или PowerShell), выполните вручную: %IDF_PATH%\export.bat, после этого idf.py станет доступен в этом окне.
  • Из командной строки Linux (bash / zsh): аналогично Windows, нужно сначала активировать окружение: выполните команду source $IDF_PATH/export.sh (или, если вы находитесь в папке с ESP-IDF: ./export.sh). После этой команды idf.py будет доступен в текущем терминале.

GPIO

Вопрос: Все ли выводы подряд можно использовать у ESP32?
Ответ: Нет, не все. Некоторое категорически нельзя, некоторые можно, но осторожно. GPIO 1 и GPIO 3 заняты основным ( programable ) портом UART0, и ни на что другое их использовать нельзя. GPIO 6-11 (D0, D1, D2, D3, SCK, CMD) заняты под SPI-интерфейс, к которому подключена flash-память – эти выводы использовать в проектах совсем нельзя (зачем тогда их вывели – а для подключения внешней дополнительной памяти и вывели, на новых модулях ESP их уже нет). Есть еще Strapping pins, про которые я уже писал в другой статье.

 

Вопрос: Что такое Strapping pins и можно ли их использовать?
Ответ: Все ESP имеют специальные Strapping pins или “выводы обвязки”, с помощью которых можно управлять режимом работы микроконтроллера при его запуске. Например самый “известный”  из них – GPIO0, который включает “режим прошивки”. Самый критичный (для ESP32) – MTDI, который управляет напряжением Flash-памяти. У разных серий ESP разные Strapping pins. Ниже таблица – пример для классической серии. Все Strapping pins работают одинаково – при запуске процессора логические уровни на них записываются в специальные защелки и эти состояния используются для настройки МК, после чего их можно использовать как обычные GPIO. Поэтому общий совет таков: “не трогать” их во время сброса / запуска, а после запуска делайте с ними что хотите.

Strapping pins для ESP32

 

Вопрос: Можно ли подключать к ESP32 периферийные устройства с TTL-уровнями 5 вольт?
Ответ: Я бы категорически не советовал так делать. Согласно datasheet-у, максимально допустимый уровень напряжения на входе – VDD+0.3В, то есть 3,3+0,3 = 3,6В.

Если напряжение на входе будет выше указанного значения – откроется внутренний защитный диод, и “сбросит” излишки напряжения на шину питания. Но ничего хорошего это точно не дает. По крайней мере, я совершенно точно знаю, что шина I2C в условиях подтяжки линий к +5В работать отказалась.

 

Вопрос: А что же делать, если ну очень-очень-очень нужно подключить к ESP32 5в устройство?
Ответ: В зависимости от обстоятельств. Если вам нужно подключить 5В только “на вход”, то можно использовать банальный резистивный делитель. В более сложных случаях можно применить оптрон или иной способ. Меня также часто выручает схема согласования уровней на полевых транзисторах – экономично и дешево:

 

Вопрос: Какой допустимый ток можно снимать с GPIO ESP32 в режиме “выхода”?
Ответ: Согласно datasheet-у, максимально допустимый ток для ESP32 классической линейки – 40 мА (миллиампер) на вывод. Но следует помнить, что в сумме по всем выводам ток не должен превышать 1200 мА (когда на всех выходах установлен высокий уровень), иначе возможен перегрев и выход чипа из строя. Но и это ещё не всё – как следует из GPIO API по умолчанию выводы настроены на ограничение тока 20 мА, а ток в 40 мА ещё нужно дополнительно настраивать с помощью gpio_set_drive_capability().

 

Вопрос: Нужно ли подтягивать свободные не используемые GPIO к +3,3 или к GND?
Ответ: Можно, но зачем? В принципе, это никогда не помешает (при этом следует обязательно учитывать, что некоторые GPIO (Strapping pins) уже подтянуты к определенному уровню и ломать это поведение нельзя). Но зачем? Внутри ESP уже есть программно подключаемые резисторы встроенной слабой подтяжки – для этих целей их вполне хватит. Поэтому проще и разумнее использовать их. Да и на Strapping pins никак не повлияет, так как будет активирована уже после запуска МК.

 

Вопрос: Можно ли подключать к ESP32 (и ESP8266) пятивольтовые релейные модули для Arduino?
Ответ: Вполне, но тут стоит понимать, что в этом случае необходимо “разделить” питание реле и оптрона, который обычно стоит на входе таких модулей. Для этого снимите перемычку “JD-VCC”, и подключите на контакт питания реле 5 вольт, а на контакт питания оптрона – 3,3В от микроконтроллера. Тогда все будет работать, и работать корректно.

 

Вопрос: Как увеличить количество входов или выходов ESP? Что делать, если выводов мало?
Ответ: Воспользоваться любым I2C-расширителем GPIO, например PCF8574, PCF8575, MCP23017 или аналогичными.

 


Официальная документация

В сети вы можете найти множество отличных сайтов, статей и видео, посвященных ESP32, в том числе и русскоязычных. Ну например:

Есть еще форумы, но лично я их не люблю и информация, там встречающаяся, зачастую весьма спорна.

Но я бы вам рекомендовал пользоваться не только русскоязычными источниками, но и официальными источниками. Просто потому, что некоторые статьи и видео на сторонних сайтах, посвященные API, довольно быстро устаревают. В том числе и на этом сайте. У Espressif есть большая команда технических писателей, которые поддерживают документацию в актуальном состоянии – дополняют, исправляют, корректируют. У меня, например, такой возможности нет чисто физически – поэтому многие статьи уже могут содержать не актуальную информацию. Я, конечно, стараюсь исправлять что-то, но… Поэтому – мой совет такой: прочли статью – проверьте изложенные факты по  официальной документации. И просьба: если нашли несоответствие на данном сайте – оставьте, по возможности, комментарий – я постараюсь исправить. Спасибо.

Итак.

Software

  • ESP-IDF Programming Guide — основной портал документации по ESP-IDF. Здесь описана настройка среды, API, периферийные драйверы, сетевые протоколы и система сборки. Всё на английском.
  • Arduino-ESP32 Online Documentation — основной портал документации по Arduino Core для ESP32. Здесь описаны все поддерживаемые чипы, настройка среды и библиотеки.
  • Getting Started (Arduino ESP32) — руководство по началу работы, где перечислены все поддерживаемые SoC (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-P4)

Компоненты и дополнительные ресурсы

  • ESP Component Registry — это официальный репозиторий, где хранятся готовые компоненты (драйверы датчиков, протоколы, решения вроде ESP-Matter). 
  • Документация по ESP Component Registry — описание того, как искать, устанавливать и публиковать компоненты.
  • ESP-IoT-Solution — набор компонентов и драйверов для периферии от Espressif
  • VS Code ESP-IDF Extension — официальное расширение для Visual Studio Code, которое интегрирует ESP-IDF и Component Registry прямо в среду разработки.
  • Официальный GitHub Espressif — здесь находятся исходные коды ESP-IDF, Arduino Core и многих других проектов.
  • Форум ESP32 (ESP32 BBS Forum) — сообщество инженеров для обсуждения проблем и обмена опытом.

Hardware

 


Продолжение следует…


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

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

Небольшой анонимный опрос: какие статьи вы предпочитаете?

33 комментария для “ESP32 в вопросах и ответах ( FAQ )”

  1. Александр

    Добрый день.
    Подскажите, как с вами можно связаться?
    Вопрос относительно помощи.
    Телеграмм
    the_versteck

  2. Добрый день. Не нашел на сайте как работать с UART. Да, да ESP32 может отправлять данные с частотой 115200, но этого мало. У меня датчик MH-Z19B, который требует отправки и приема данных на частоте 9600. Мне очень нужна ваша помощь.

    1. Про UART пока нет такой статьи. В работе статья про RS485 и Modbus, оно как раз работает поверх UART1 или 2.
      Также в планах сделать проект сравнения разных датчиков СО2, в том числе и как у вас. Но всему свое время.
      Понимаю – вам нужно здесь и сейчас, но на все разу и для всех меня не хватит

  3. Добрый день.
    При логировании данных через GSM на сервер (в БД) не всегда бывает доступна связь. Вариант – сохранения данных на SD карту. Но не совсем понятно, как нормально реализовать передачу накопленных на SD карте при восстановлении связи.

  4. Как можно полностью выпилить freertos с esp32-s3 при использовании ESP-IDF? Есть желание поработать с регистрами напрямую, не прибегая к ассемблеру.
    Также хочу потестить МК в управлении преобразователями где ОС будет только мешаться.

    1. Никак. ESP-IDF == FreeRTOS по определению.
      Напишите свой фреймворк и свой загрузчик, которые возьмут на себя все управление “железом” вместо ESP-IDF

  5. Приветствую! Есть контроллер Zont H2000+ pro V2. Установлен в котельной для управления двумя котлами через датчики NTC и 1-wire. Столкнулся с проблемой отвала 4 реле и 2 вход/выход. Завязаны они как раз на один из ESP32. Собственно у меня вопрос следующего характера: Можно ли программно отключить один из ESP32? Если да, то как это можно сделать? Либо подскажите можно ли его угробить физически и как?? На реле заведены +12V управляющие промежуточными реле, на Вх/Вых управление твердотельным реле (используется для управления сервоприводом смесителя)
    Заранее благодарен и с наступающим!

  6. Алесандр

    Имеется 2 ESP 32 установленные на одной плате, нужно наладить их общение по проводам, uart 0 и uart 1 заняты на каждом модуле, но на esp 32 вроде как имеется по 3 UART, можно ли наладить общение модулей используя третий UART на каждой плате, или лучше использовать какие-то другие способы i2c или SPI к примеру

  7. Алесандр

    Просто в интернете есть утверждения, что третий UART нежелательно использовать , не будет ли проблем, а вообще из практики через какую шину в плане скорости и стабильности лучше наладить по проводам общение двух есп 32, находится на одной плате на расстоянии пару см

    1. Нежелательно использовать uart0. Так как в него пишет логи отладка и с него ждет данных загрузчик.
      А uart1 и 2 используйте как хотите

  8. День добрый Уважаемые.
    Вопрос про загрузку любого скетча(включая примеры)
    С недавних пор загрузка изменилась и заканчивается строками:
    …………………..
    Writing at 0x0004abde… (90 %)
    Writing at 0x00053b28… (100 %)
    Wrote 292384 bytes (157534 compressed) at 0x00010000 in 2.8 seconds (effective 840.7 kbit/s)…
    Hash of data verified.
    Leaving…
    Hard resetting via RTS pin… —– я так понимаю для выхода надо сбросить через контакт RTS ? – Это как нет такого пина?

    На чёрном фоне белый текст.
    Ранее текст был красный
    (правда я с прерываниями пробовал по эксперементировать )
    кто то сталкивался с этим,?

    1. Это совершенно нормальное поведение…
      Переводится это так:

      Запись по адресу 0x0004abde… (90 %)
      Запись по адресу 0x00053b28… (100 %)
      Записано 292384 байта (157534 сжато) по адресу 0x00010000 за 2,8 секунды (эффективная скорость 840,7 кбит/с)…
      Хэш данных проверен.
      Выход…
      Жесткий сброс через контакт RTS…

      Только здесь имеется в виду не контакт ESP, а контакт USB-TTL адаптера. Почитайте тут: https://kotyara12.ru/iot/usb-ttl-adapters/

      1. Спасибо, почитал….
        т.е Это собственно штатное сообщение о завершении загрузки и сбросе этого режима в адаптaре? – я правильно понял,?

        1. Да. Только уточнение: RTS на адаптере напрямую соединен с EN контроллера. Поэтому изменение уровня на нем вызывает сброс микроконтроллера

  9. Добрый день! Подскажите на многих схемах из интернета вывод VIN на отладочной плате используется для питания силового реле, но вроде как он используется только как вход для питания платы вместо USB. Его можно использовать как выход 5в для питания внешних устройств?

        1. Я думаю, так вполне можно спалить usb порт. Если нагрузка будет мощная. Но с одним реле может и прокатить.

          1. Спасибо за ответ! Планируемая суммарная нагрузка на 2 канальном реле не больше 8Вт. Питание отладочной платы думал сделать от обычного зарядника для смартфона. Есть самодельный озонатор для обуви: пластиковая коробка(условно герметичная), внутри нее собственно сам озонатор с али, и вентилятор от ПК на 12в . Хочу что бы это все работало или по определенной заданной мной логике или управлялось со смартфона на практике станет понятней что удобней

            1. А зачем подавать питание на все это через USB-порт? Смысла никакого не вижу… Да еще 12В

    1. Может неправильно объяснил. Есть три розетки (внутри пластиковой коробки)на 220в подключенные параллельно. В первую включен озонатор , во вторую БП 12в для вентилятора, в третью зарядник для телефона который питает плату ESP32 через USB. Первая(озонатор)и вторая(БП12в) розетка размыкаются/ замыкаются через реле, которым управляет ESP32.

      1. Все равно лично я бы не стал питать реле через USB-порт. Надежнее подать 5В на соответствующий контакт платы.
        В тестовых целях питание через USB вполне допустимо и я часто этим пользуюсь. Но в устройстве, которое будет работать 24/7 это рискованно

        1. В целом так и планировал использовать, только для тестов.
          Немного не разобрался с выводом VIN как его использовать поэтому и возник такой вопрос.
          Отсюда же появился и еще один вопрос. Сгодиться ли обычный блок питания не USB с выходом на 5в и током 2A, если этот выход распаралелить и запитать одной линией плату ESP32 через VIN , а другую линию использовать для питания реле?

    2. День добрый,
      Первый пост почему-то пропал.
      Помогите разобраться с техникой вывода на графический дисплей 1,8″ 128×160 RGB
      вот часть скетча:
      tft.fillScreen(ST77XX_BLACK); //красим весь экран в черный цвет
      tft.setRotation(1); //ориентация экрана
      tft.setCursor(5, 5); //координаты начала текста
      tft.setTextSize(2); //размер текста
      tft.setTextColor(ST77XX_GREEN); //цвет текста
      tft.setTextWrap(false); //текст не переносим
      tft.print(frequency, 6); //значение пока 0.000000
      delay(1000);

      tft.setCursor(5, 5);
      tft.setTextSize(2);
      tft.print(“TEST MAY TEXT”); //
      Ожидал -что в конце получу – TEST MAY TEXT , но получил логическое сложение нулей и этой строчки
      т.е последующая строка не затирает предыдущее значение на экране.
      Пробовал забивать второе значение пробелами – вообще ничего не менялось
      Подскажите как обновить инфо в строке , без полного сброса дисплея?
      Спасибо.

      1. Он не пропал, здесь обязательная премодерация. Иначе каждый день по десятку комментариев со спамом
        Такие вопросы лучше задавать в чате, ссылка есть в правой колонке сайта: https://t.me/+JnXf9sQ4–tjMzZi
        Там наверняка есть люди, которые работали с этим и помогут

          1. А я с ардуино не дружу ))) И с дисплеем этим не работал. Поэтому сложно сказать.
            А в телеграм людей много, может кто-то что-то бы и подсказал.
            Но как знаете

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

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

    2  ×    =  8