Статья о небольшой эпопее с поиском ошибки в работе WiFi на плате ESP32-C3 SuperMini, с которой пришлось разбираться в процессе отладки кода прошивки для контроллера батареи АКБ (О контроллере батареи ИБП (вопрос к читателям Хабра) и О контроллере батареи ИБП (часть 2)).
Изначально пробовал задействовать в работе ИИ "мешок слов", но без положительного результата. Самые простые примеры кода работают нормально, но как только начинаешь сводить все работающие части в одну прошивку, ИИ с многократными извинениями начинает генерировать неработающий, а зачастую и откровенно неправильный код. В результате множества неудачных попыток пришлось завершить эксперименты с вайб-кодингом и все писать вручную по старинке.
А сама симптоматика проблемы с WiFi следующая: после включения питания и начала авторизации по WiFi плата ESP32-C3 SuperMini через какое-то время зависает, вплоть до срабатывания сторожевого таймера. Поиск решения проблемы в интернете не помог, но было замечено, что в эти моменты на плате очень сильно нагревается стабилизатор напряжения 3.3V, да так, что даже рука не терпит, тогда как при работе тестовых примеров (где WiFi работает нормально) такого эффекта не наблюдается.
Из-за этого решил немного покопать именно в этом направлении.

LLM любезно предоставил ссылки на официальные документы Espressif для ESP32-C3, где указаны токи потребления Wi-Fi:
ESP32-C3 Series Datasheet (PDF): https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
Смотрите раздел Power Consumption / Electrical Characteristics — таблицы с Wi-Fi TX/RX current (передача/приём). Там приведены типичные значения тока для 802.11b/g/n при разных уровнях мощности.ESP32-C3 Hardware Design Guidelines (PDF): https://www.espressif.com/sites/default/files/documentation/esp32-c3_hardware_design_guidelines_en.pdf
В этом документе приведены рекомендации по питанию. Espressif указывает, что источник питания для 3.3 V должен обеспечивать запас по току порядка 500 mA из-за кратковременных пиков при работе радиомодуля (Wi-Fi).
Если посмотреть схему самой платы ESP32-C3 SuperMini

то стабилизатор ME6211 как раз рассчитан на максимальный выходной ток 0.5A, и по даташиту кажется, что все хорошо. Однако если его внимательно почитать, то можно увидеть занятные маркетинговые странности:
Маркетинговые странности LDO стабилизатора ME6211
ME6211 выпускается в нескольких типах корпусов:
3-pin SOT89-3, SOT23-3
4-pin SOT343R, FBP1*1-4L
5-pin SOT23-5, SOT353
6-pin DFN2*2-6L
У которых разная рассеиваемая мощность:
SOT23-5 - 300mW
SOT353 - 250mW
SOT89 - 500mW

Максимальный допустимый ток 500 мА указан как "Maximum Output Current: 500mA (IN =4.3V, V OUT =3.3V)".
Меня сразу смутил какой-то странный уровень входного напряжения 4.3V, но прикинув рассеиваемую мощность (а LDO стабилизатор работает как нагрузочный резистор и рассеивает всю лишнюю мощность на своем корпусе), и если брать для входа стандартные 5 вольт с USB, то мы получаем (5V−3.3V) * 0.5A = 0.85Вт, т.е. больше, чем может рассеивать даже самый большой корпус SOT89, а в моем случае превышение по рассеиваемой мощности для использованного корпуса SOT23-5 получается почти трехкратное!
В самом этом факте нет ничего странного, и если сравнить корпуса SOT23-5 и SOT89, то можно понять, почему последний может рассеивать почти вдвое большую мощность.

SOT23-5 - 300mW - обычный миниатюрный пластмассовый корпус без теплоотвода

Корпус SOT89 - 500mW с небольшим теплоотводом под корпусом
Ну а когда я наткнулся на Обзор режимов сна ESP32 и энергопотребления в них, то практически поверил, что удалось выяснить причину проблемы и что я на правильном пути, (хотя данная статья и относится к ESP32, а не ESP32-C3, которая вроде как специально оптимизированная для пониженного энергопотребления):
Поскольку активный режим постоянно поддерживает все модули в работоспособном состоянии (особенно модуль WiFi, ядра процессора и модуль Bluetooth), для работы микросхемы требуется ток более 240 мА. Также при одновременном использовании WiFi и Bluetooth иногда достигаются пики мощности до 790 мА.
"Верить в наше время нельзя никому, порой даже самому себе."
Правда меня немного смутила табличка потребления ESP32-C3 в зависимости от типа WiFi.
Table 5-7. Wi-Fi Current Consumption Depending on RF Modes
802.11b, 1 Mbps, @21 dBm 335 mA
802.11g, 54 Mbps, @19 dBm 285 mA
802.11n, HT20, MCS7, @18.5 dBm 276 mA
802.11n, HT40, MCS7, @18.5 dBm 278 mA
802.11b/g/n, HT20 84 mA
802.11n, HT40 87mA1.3.2 Power Supply
The general recommendations for power supply design are:
• When using a single power supply, the recommended power supply voltage is 3.3 V and the output current is no less than 500 mA.
• It is suggested to add an ESD protection diode and at least 10 μF capacitor at the power entrance.
The power scheme is shown in ESP32-C3 Series Datasheet > Figure ESP32-C3 Power Scheme.
More information about power supply pins can be found in ESP32-C3 Series Datasheet > Section Power Supply.
В ней хоть и рекомендуется использовать источник тока не менее 500 мА, но такого потребления нет ни в одном из описанных режимов работы, и самое главное, это не должно приводить к зависанию прошивки микроконтроллера!
Более того, при тестировании нескольких плат (чтобы подтвердить, что это системная проблема, а не косяк одной конкретной платы), я выяснил, что у меня в наличии есть два типа ESP32-C3 SuperMini, и одни греются при зависании WiFi, а другие нет.
Пришлось изучать компоненты плат под микроскопом, и сразу выявилось различие в их комплектующих. На платах различался как раз стабилизатор напряжения, хотя вся схемотехника вроде бы полностью одинаковая.

Маркировка на корпусе микросхемы стабилизатора напряжения S2W соответствует микросхеме ME6211, тогда как маркировка LLVB соответствует совершенно другой микросхеме LP5907MFX-3.3.

Причем греются платы ESP32-C3 SuperMini только с последней микросхемой (с маркировкой LLVB), и, открыв на нее даташит, можно понять почему:
Стабилизатор LP5907MFX не является полным аналогом ME6211
Максимальное входное напряжение 5.5 V;
Максимальный выходной ток - 0.25A;
Номинальное выходное напряжение 3.3 В;
Причем эта микросхема имеет встроенную защиту от тепловой перегрузки:
7.3.5 Thermal Overload Protection (TSD)
Thermal shutdown disables the output when the junction temperature rises to approximately 160°C which allows the device to cool. When the junction temperature cools to approximately 145°C, the output circuitry enables.
Based on power dissipation, thermal resistance, and ambient temperature, the thermal protection circuit may cycle on and off. This thermal cycling limits the dissipation of the regulator and protects it from damage as a result of overheating.
The thermal shutdown circuitry of the LP5907 has been designed to protect against temporary thermal overload conditions. The TSD circuitry was not intended to replace proper heat-sinking. Continuously running the LP5907 device into thermal shutdown may degrade device reliability.
Ага, ну теперь все понятно, при перегреве стабилизатор может просто отключаться! Но вот только есть несколько маааленьких нюансов. Температура 60-70°C - это на сотню градусов меньше 160°C, при которой должна срабатывать тепловая защита, да и при остывании до 145°C стабилизатор обратно должен включаться, но самое главное, прибором я не фиксирую отключения питания микроконтроллера! И судя по отладочным логам, происходит не отключение питания, а перезагрузка по сторожевому таймеру.
Другими словами, несмотря на то, что есть серьезные подозрения на схемотехнику и на различия в комплектующих у двух партиях плат, я не могу подтвердить аппаратные проблемы экспериментально, и все указывает именно на программный баг.
Ну что же, отрицательный результат - тоже результат.
Очень смешной итог
Потратив несколько дней на поиск проблем в схемотехнике и убедившись, что железо тут ни при чем, в результате проблема решилась очень просто.
Перелопатив весь код руками и по частям отключая различную функциональность, я локализовал проблему - это оказался программный модуль библиотеки ESP32, предназначенный для вывода логов через USB - usb_serial_jtag_driver, а сами зависания происходят во время вызова функции usb_serial_jtag_write_bytes, когда программный модуль WiFi начинает писать множество диагностических сообщений в логи об инициализации, авторизации на точке доступа и т.д.
И после обновления ESP-IDF на актуальную версию (на момент изучения проблемы это была v5.5.1), WiFi заработал идеально, и проблема с зависанием ESP32-C3 SuperMini при работе по WiFi и с выводом логов через USB исчезла сама собой :-)
Комментарии (23)

413x
17.11.2025 08:02У меня с ESP32-C3 SuperMini еще Wi-Fi стартует не всегда, причем зависит от сложности прошивки вроде как, если прошивка легкая работает стабильно, усложняешь и все, иногда работает, иногда нет. Пробовал клеить на спинку фольгу, по советам, не помогло. Видимо как раз эта проблема. Нагревается тоже иногда.

Xius
17.11.2025 08:02Попробуйте расположить её вертикально перпендикулярно оси роутера. И мощность уменьшить (у меня работают на 8,5dBi).

Xius
17.11.2025 08:02На ESPHome словил проблему на такой ESP32-C3 SuperMini пару недель назад после обновления. Я в дебри не полез, увидел в логах "Auth Expired", загуглил и нашёл решение на форумах - уменьшить мощность до 8,5dB. Предположительно много шума создаёт антенна этого модуля, в этом и проблема. Ну и от положения её в пространстве зависит качество сигнала, лучшее при вертикальном расположении, при горизонтальном до 5% потерь пакетов.

VT100
17.11.2025 08:024,3 - это напряжение полностью заряженного LiPo/LiIon аккумулятора.
"60 на корпусе" - это вполне может быть 160 на кристалле. Учтите тепловое сопротивление корпуса.
rsashka Автор
17.11.2025 08:02Максимальное напряжение для LiPo/LiIon это 4.2, а не 4,3 именно поэтому такой непонятный уровень напряжение и смутил.
"60 на корпусе" - это вполне может быть 160 на кристалле.
В теории, наверно да, но отладочный вывод не показывал выключение питания, и сами питание не отключалось

VT100
17.11.2025 08:02У полимерных уже и 4,35 встречается.
Просадки питания - лучше посмотреть осциллографом.
rsashka Автор
17.11.2025 08:02Ну так 4,35, это тоже не ровно 4,3, поэтому мне и кажется, что номинал выбран только для расчетной формулы (чтобы уложиться по величине максимальной рассеиваемой мощности для этого типа корпуса)

pavelsc
17.11.2025 08:02А вы в начале перегрев стаба хотели разрулить как-то схемотехнически или просто пруфы по даташитам искали, чтоб забраковать эти конкретные с3?

rsashka Автор
17.11.2025 08:02Если бы дело было в перегреве, тогда можно было бы победить схемотехнически.
Я сделал входной стабилизатор от 30В и если бы дело было в стабе, то просто опустил бы его напряжение в текущих 5 вольт до 3,7-4,0, чтобы снизить рассеиваемую мощность или пришлось бы сами модули отбраковывать по типу стабилизатора .

checkpoint
17.11.2025 08:02А в этом ESP32-C3-SuperMini выводы JTAG случайно на "землю" не опущены ? Это могло бы обьяснить откуда берется такой ток и почему перегревается стаб. То, что Вы зафиксили проблему заменой библиотеки - это не совсем фикс. Вы просто замели проблему под коврик и она еще даст о себе знать.
И тут правльно заметили, что 60С на корпусе, это 160С на кристалле. Стаб просто вошел в термостабилизированный цикл. Посмотрите осциллографом на форму выходного напряжения. Если там пульсации с частотой 100-300 Гц, то это означает, что стаб постоянно входит в защиту (отключается) и выходит из неё. При таком напряжении цифровые схемы внутри ESP32 нормально работать не могут и скорее всего "залипнут" в каком нибудь нехорошем состоянии сожрав еще больше тока.

rsashka Автор
17.11.2025 08:02Форма выходного напряжения не меняется, да и судя по описанию сатабилизатора, там не термостабилизация, а триггер с гистерезисом около 20С.
На предыдущих версиях ESP32 конвертор для USB был внешний, а в этой серии его встроили на кристалл, причем выводы совмещены с GPIO. Поэтому в случае косяка в библиотеке, там действительно выводы могут подключаться к земле (что и дает такой ток), и это лечится именно в ПО .

NutsUnderline
17.11.2025 08:02я тут недавно случайно джампером закоротил выход стаба тоже на плате esp32 и с полчаса искал - куда у меня пропал отладочный вывод и че за странный запах :) :)

rsashka Автор
17.11.2025 08:02Самый прикол вашего комментария в том, что это так и есть. Первоначально я тоже заметил запах и только потом выявил причину - перегрев корпуса стабилизатора напряжения :-)

ISVLabs
17.11.2025 08:02Сильно научных исследований я не проводил, но выяснил следующее при экспериментах с Meshtastic'ом:
штатный LDO работает на пределе и любая попытка его нагрузить сверху приводит к проблемам. И проблемы возникали постоянно при питании трансивера от платы ESP. Решением стало добавление нескольких керамических конденсаторов по входу и внутренним 3в3. Трансивер запитал вообще от дополнительной AMC1117-3.3.
штатная антенна 2.4G очень плоха и вполне возможно, что из-за высокого КСВ повышается ток потребления при передаче. Так же, около "горячего" конца антенны расположен задающий кварц и при больших мощностях передачи на него могут быть наводки. Решение: антенна отпаяна, вместо неё припаял пигтейл с RP-SMA на конце и вынес антенну на корпус. Заодно сильно расширился радиус действия - теперь БТ устойчиво подключается через 2 стены из соседней комнаты.
По итогу получил улучшение приёма и стабильную работу ноды без зависаний и ребутов.

VovanPitersky
17.11.2025 08:02Доброго
На c3 столкнулся с странным багом - каждые 2 секунды внутренний счётчик тиков скачкообразно тормозится на 4 милисекунды... заказал в другом магазе - такая же фигня... партия брака?
Т.е. неожиданно в реале проходит 10 мс а функция показывает 6 мс
Потом в течении 2 секунд всё ровно
Потом опять 10мс в жизни - против 6 мс в процессоре... кажется кетайцы изобрели машину времени...
На классическом esp32 (2 ядра) и s2 (1 ядро) - такого нет... кто-нибудь сталкивался? Или чего вы хотите от мк по цене мороженного???
Arhammon
Насколько я помню не всегда - "просто отключается" при перегреве, может просто обрезать ток и выходное напряжение до некого уровня когда система термостабилизируется.
rsashka Автор
Это было просто предположение, но оно не подтвердилось
Arhammon
Всё-таки по описанию есть подозрение, что проблемы разные и лечение одной никак вторую не решает. Где потом еще вылезут предположительные просадки напряжения из-за теплозащиты хз...