Многие пользователи микроконтроллеров ESP32 хорошо знакомы с двумя основными ядрами Xtensa, между которыми распределяются основные задачи и фоновые процессы. Однако на том же кристалле скрывается дополнительный и малоизвестный компонент — ультранизкопотребляющий сопроцессор Ultra-Low Power или ULP. Большинство разработчиков даже не подозревают о его существовании, пока не сталкиваются с задачей максимальной оптимизации автономной работы устройства.

Как устроен и работает скрытый сопроцессор ULP
Главная задача третьего ядра заключается в сохранении полной функциональности в те моменты, когда остальные элементы платы отключены. При переходе микроконтроллера в режим глубокого сна основной двухъядерный процессор и большая часть памяти полностью отключаются. Сопроцессор ULP не подвержен этому правилу, поскольку он функционирует в области питания часов реального времени RTC, потребляя минимальное количество энергии.
Для доступа к памяти ULP использует небольшой выделенный участок медленной памяти RTC, объем которого на классическом микроконтроллере составляет 8 КБ. Там хранятся программные инструкции и логические данные, необходимые для выполнения простых фоновых операций. В активном режиме основной процессор ESP32 потребляет около 240 миллиампер и более, в то время как сопроцессор ULP расходует около 200 микроампер, что на несколько порядков меньше. В режиме глубокого сна этот показатель может падать всего до 10 микроампер.
Роль сопроцессора в энергосбережении автономных проектов
Сопроцессор ULP не является полноценной заменой основных вычислительных ядер. Он спроектирован для выполнения узкого спектра задач, нецелесообразных для главного процессора с точки зрения экономии заряда. Большинство проектов на базе различных датчиков проводят основную часть времени в бездействии — проверяют неизменную температуру, состояние кнопки или уровень воды. Запуск таких процедур на главном двухъядерном процессоре приводит к неэффективному расходу энергии.
Вместо этого ULP берет на себя мониторинг сенсоров, опрос выводов общего назначения GPIO, снятие показаний аналого-цифрового преобразователя и проверку выхода значений за пороговые уровни. Если устройству требуется выполнить сложные операции, такие как подключение к беспроводной сети Wi-Fi, обработка информации или управление распределением памяти, сопроцессор пробуждает основной процессор. Таким образом, вспомогательное ядро берет на себя рутинную работу, а энергоемкая часть чипа активируется только при реальной необходимости.

Практическое применение микроконтроллера для долгой работы
Если проект не требует жесткой оптимизации глубокого сна, разработчики могут вообще не задействовать сопроцессор ULP. Однако в тех случаях, когда устройство должно работать от компактной батареи на протяжении многих месяцев, без него не обойтись. Датчик влажности почвы на садовом участке, удаленный датчик температуры или детектор протечки под раковиной могут функционировать годами, поскольку основной чип большую часть времени остается выключенным.
Периодически ULP просыпается для опроса датчиков и сохраняет результаты в памяти RTC, откуда их считывает главный процессор после пробуждения. Сам по себе ESP32 представляет собой доступную и производительную отладочную плату, которая превосходит многих конкурентов по ряду характеристик и включает встроенные модули Wi-Fi и Bluetooth. Если проект не нуждается в постоянном беспроводном соединении или регулярных тяжелых вычислениях, задействование скрытого сопроцессора ULP позволяет многократно увеличить время автономной работы устройства.

Несмотря на то, что ESP32 обходится дешевле, чем Arduino и Raspberry Pi Pico, он превосходит большинство своих конкурентов. Наличие встроенных интерфейсов Wi-Fi и Bluetooth в каждой плате делает микроконтроллер отличным выбором для проектов, где устройство невозможно постоянно держать подключенным к ПК физически.
Важно учитывать, что ULP обладает реальными аппаратными ограничениями, но это заложено в его конструкцию изначально. Сопроцессор никогда не планировался для выполнения сложных задач и справляется со своими базовыми низковольтными функциями идеально.

Особенности аппаратного проектирования и реальные возможности сопроцессора
Аппаратные ограничения сопроцессора заложены в его конструкцию изначально и являются осознанным решением разработчиков. ULP никогда не планировался для выполнения сложных задач, однако со своими базовыми низковольтными функциями он справляется идеально.

В то время как классический ESP32 во время активного выполнения кода требует около 240 мА и более, энергопотребление сопроцессора составляет всего порядка 200 мкА. В состоянии глубокого сна этот показатель снижается до минимальных 10 мкА.
Для каких задач создано третье ядро ESP32
Большинство сенсорных проектов тратят подавляющее большинство времени на бездействие:

- проверку температуры, которая остается прежней;
- опрос кнопки, которая все еще не нажата;
- отслеживание уровня воды, который не изменился.
Выполнение подобных рутинных процедур на главном двухъядерном процессоре крайне неэффективно для устройств с батарейным питанием. ULP берет на себя мониторинг датчиков, снятие показаний ADC, опрос пинов GPIO и проверку на пересечение заданного порогового значения.
Когда устройству требуется выполнить ресурсоемкие операции — подключиться к Wi-Fi, обработать данные или управлять распределением памяти, — сопроцессор самостоятельно будит главный CPU.

Примеры долговечных автономных устройств
Если проект не требует жесткой оптимизации глубокого сна, задействовать ULP нет никакой необходимости. Но если устройство должно работать от небольшой батарейки на протяжении многих месяцев, без этого скрытого компонента не обойтись:
- датчик влажности почвы в саду;
- удаленный датчик температуры;
- детектор протечки воды под раковиной.
Благодаря тому, что основной чип остается полностью выключенным большую часть времени, такие приборы могут функционировать годами. Сопроцессор просыпается для периодического опроса и сохраняет результаты в специальной RTC-памяти, откуда их считывает главный процессор после пробуждения.






