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

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

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

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

 


Железо

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

 

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

 

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

 

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

 


Платформы и софт для программирования

Самый популярный вопрос у тех, кто впервые столкнулся с ESP32:

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

 

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

 

Вопрос: Какую платформу лучше использовать для программирования ESP32?
Ответ: Основных платформы всего две: Arduino ESP32 и ESP-IDF, и обе используют язык C/C++ и основаны на операционной системе FreeRTOS. Есть ещё возможность программировать на MicroPython и LUA, но это больше из разряда “для опытов” (впрочем может я и ошибаюсь). А вот IDE можно использовать несколько разных: Arduino IDE, PlatfromIO и Espressif IDE. Что выбрать? Сложный вопрос… Но я попытался описать все эти тонкости в статье “Как и на чем программировать ESP32 и ESP8266

 


Проблемы с программированием ESP32

Вопрос: Как прошить или перепрошить ESP32, если на плате нет 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-кабель – программа загрузки прошивки не “видит” микроконтроллер. При этом в этих ваших интернетах  можно прочитать утверждение мол “китайцы шалят, брака полно – выбросьте в окно”. На мой взгляд – весьма и весьма спорное утверждение. Причин может быть много – но самая вероятная – микроконтроллер отказывается переходить в режим прошивки по причине неверных логических состояний на Strapping Pins из-за подключенного внешнего оборудования. Доходит даже до того, что flash-память может просто лишиться питания, так как этим тоже управляет вывод GPIO5. Если Ваша ESP32 подключена к схеме через панельку (а я всегда рекомендую так делать) – выньте её из основной схемы и повторите попытку. Если прошивка “свободной” ESP32 завершиться успешно – причина именно в Strapping Pins. Будьте внимательны при выборе выводов для проекта. Либо попытайтесь перевести чип в режим программирования вручную, как описано выше.

 


GPIO

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

 

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

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

 

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

 

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

 


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


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

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

  1. Александр

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

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

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

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

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