Новая игрушка
В ноябре 2020 года Espressif анонсировала новую SoC под названием ESP32-C3. Они разослали несколько инженерных прототипов для тестирования и первого ознакомления.
Так довелось, что мне попался один из них на руки и я успел немного поиграться с ним. Надеюсь, мой краткий опыт будет интересен сообществу, так как тут есть на что посмотреть и ESP32-C3 имеет хороший шанс получить свою нишу в мире встраиваемых систем, так и в области DIY. Меня как раз больше интересует подход со стороны DIY, поэтому статья будет больше с этим уклоном.
В чём разница?
ESP32-C3 пытается занять нишу между ESP32/ESP32-S и нашим старым другом ESP8266. Даже больше хочет вытеснить ESP8266, чем быть дополнением к линейке ESP32.
Не знаю что там будет с ценами, но переход на RISC-V, упрощение периферии и прочее может сделать ESP32-C3 достаточно привлекательным, что бы он смог заменить ESP8266 полностью. В итоге мы получим достойную замену старичку, с которым мы вместе с 2014 года.
В таблице ниже я привёл основные отличия ESP32-C3 от предыдущих ESP32 и ESP32-S2. Так же у Espressif недавно был анонсирован ESP32-S3 с двумя ядрами, но я пока не буду его приводить ниже в силу отсутствия его в широкой продаже.
CPU | Xtensa LX6 | Xtensa LX7 | RISC-V (RV32IMC) |
Частота CPU | 160 / 240 MHz | 160 / 240 MHz | 160 MHz |
Количество ядер CPU | 2 / 1 | 1 | 1 |
ULP CPU | ULP-FSM | ULP-RISC-V ULP-FSM | - |
SRAM | 520 KB | 320 KB | 400 KB |
RTC SRAM | 16 KB | 8 KB | 8 KB |
WiFi | 802.11bgn 150 Mbit | 802.11bgn, 802.11mc 150 Mbit | 802.11 bgn, 802.11mc 150 Mbit |
Bluetooth | 4.2 BR/EDR BLE | - | Bluetooth 5 |
GPIO | 34 | 43 | 22 |
12-bit ADC | 1 18 каналов | 2 20 каналов | 2 6 каналов |
8-bit DAC | 2 | 2 | - |
Touch sensor | 10 | 14 | - |
SPI | 4 | 4 | 3 |
I2S | 2 | 1 | 1 |
I2C | 2 | 2 | 1 |
UART | 3 | 2 | 2 |
SDIO | 1 | - | - |
Ethernet MAC | 1 | - | - |
PWM | 16 | 8 | 6 |
USB OTG | - | 1 | - |
Потребление | До 240 мА | До 310 мА | До 325 мА |
Modem sleep | 27 - 68 мА | 12 - 19 мА | 15 - 20 мА |
Light sleep | 0,8 мА | 0,45 мА | 0,13 мА |
Deep sleep | 0,01 - 0,15 мА | 0,02 - 0,19 мА | 0,005 мА |
Корпус | 48 выводов | 56 выводов | 32 вывода Как ESP8266, но не все выводы такие же |
DevKit плата
ESP32-C3 приехал ко мне в виде платы ESP32-C3-DevKitM-1, на которой установлен модуль ESP32-C3-Mini-1 со встроенной 4 МБ флеш-памятью.
Так же на этой плате стоит USB-Serial конвертер CP2102 для подключения и прошивки по USB. На GPIO подключен RGB светодиод WS2812.
Сам модуль ESP32-C3-Mini-1 физически по размеру заметно меньше того же ESP-12E на базе ESP8266. И в то же время ESP32-C3 имеет намного больше возможностей.
"Engineering Sample Notes"
С платой была одностраничное приложение с некоторыми пометками.
Например, там написано, что потребление на DevKit'е ещё не достаточно оптимизировано и потому не рекомендуется для оценки в Deep-sleep режиме.
Так же сказано, что в данной версии чипа поддержка USB Serial/JTAG отсутствует, но она будет присутствовать в финальной версии.
Текущая версия ESP-IDF в процесс работы по добавлению поддержки ESP32-C3. Работа в этом направлении ведётся в ветках "master" и "release/v4.3".
Поддержка ESP-IDF
ESP-IDF является официальным фреймворком для разработки под ESP32. Сама среда поддерживает всю линейку ESP32. Большинство примеров можно собрать под Xtensa LX6/LX7, так и под RISC-V. Переключение сводится к одной команде "idf.py set-target esp32c3", которая выставляет riscv32-esp-elf- и прочие параметры в sdkconfig. Теперь после компиляции у нас готова прошивка для нового ESP32-C3.
Предварительно надо подготовить окружение в зависимости от ОС: Windows, Linux или macOS.
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
# Linux/macOS
./install.sh
# Windows
install.ps1
Установочный скрипт скачает компиляторы и дополнительные пакеты для ESP-IDF. После этого надо импортировать окружение для начала работы:
# Linux/macOS
. ./export.sh
# Windows
export.bat
Рекомендую для проверки собрать "hello world":
cd examples/get-started/blink
# По-умолчанию настроено для ESP32, но если надо собрать прошивку для ESP32-S2
idf.py set-target esp32s2
# Или для ESP32-C3
idf.py set-target esp32c3
# Сборка, прошивка, USB консоль
idf.py build flash monitor
Не все примеры собираются под ESP32-C3, но Espressif активно работает над ESP-IDF для поддержки этого чипа.
CoreMark
Ради интереса запустил CoreMark бенчмарк для оценки производительности нового RISC-V ядра и сравнил эти данные с предыдущим ESP32 (к сожалению, у меня нет ESP32-S2 для более широкого сравнения).
Ниже приведены попугаи для разной частоты процессора и для общего ознакомления добавлены значения при компиляции с выключенными оптимизациями (-O0):
CoreMark 1.0 | GCC | Частота CPU | |
ESP32-C3 | 388 | GCC8.4.0 -O3 | 160 МГц |
98 | GCC8.4.0 -O0 | 160 МГц | |
ESP32 (одно ядро) | 313 | GCC8.4.0 -O3 | 160 МГц |
77 | GCC8.4.0 -O0 | 160 МГц | |
469 | GCC8.4.0 -O3 | 240 МГц | |
115 | GCC8.4.0 -O0 | 240 МГц |
Я сделал измерения ESP32-C3 на 80 МГц, но значения получились ровно в два раза ниже, что и предполагалось и поэтому в таблице не привожу.
В попугаях RISC-V получился примерно на 24% быстрее. Конечно, обычные задачи, которыми мы загружаем такие микроконтроллеры будут сильно отличаться от синтетических бенчмарков, но было интересно посмотреть.
Надо так же не забывать, что ESP32 поддерживает работу на частоте 240 МГц, а у ESP32-C3 максимальная частота только 160 МГц. Так же ESP32 имеет два ядра, которые можно задействовать в зависимости от задач.
Но повышенная частота 240 МГц так же скажется на потреблении устройства. То есть, ESP32-C3 за каждый попугай будет просить меньше электронов (я не измерял потребление, но есть несколько замеров других наблюдателей).
ESP RainMaker
Вместе с этой новой платой Espressif продвигает платформу ESP RainMaker. Это некая среда, которая позволяет быстро создавать концепты и прототипы для IoT устройств.
На ESP32-C3-DevKitM-1 плате уже была прошивка ESP RainMaker, с которой можно получить общее представление об этом платформе.
Идея примерно такова:
На плате настроен обычный бинарный переключатель. При подключении платы через USB консоль мы получаем QR код, который надо отсканировать в приложении ESP RainMaker (доступно для Android и iOS) для первоначальной конфигурации настроек WiFi и добавлении этого устройства в приложение.
После этого можно управлять встроенным RGB светодиодом на плате через Espressif облако, которое находится на Amazon AWS.
ESP RainMaker SDK позволяет создавать разнообразные устройства, не только бинарный переключатель как в примере. Это может быть датчик измерения температуры или влажности, LCD экран, несколько выключателей сразу или много разных устройств вместе сразу. В последнем случае одна плата будет показана как несколько устройств в приложении.
Для того, что бы поиграться с ESP RainMaker не обязательно ждать когда можно купить ESP32-C3. Сама платформа замечательно работает на ESP32 и ESP32-S2. Для сборки прошивки достаточно иметь настроенный ESP-IDF:
git clone --recursive https://github.com/espressif/esp-rainmaker.git
cd esp-rainmaker/examples/switch
# По-умолчанию настроено для ESP32, но если надо собрать прошивку для ESP32-S2
idf.py set-target esp32s2
# Или для ESP32-C3
idf.py set-target esp32c3
# Сборка, прошивка, USB консоль
idf.py build flash monitor
В консоле появится QR код и дальше уже всё в приложении.
Выводы
Большее количество микроконтроллеров для фанатов DIY всегда позитивно, так как при большем выборе можно подобрать более подходящий МК и плату в зависимости от того, что более важно в новом проекте.
Всегда будут востребованы микроконтроллеры с большим количеством периферии, так и мелкие с хорошим соотношением потребления к производительности, но имеют достаточно памяти для разных свистелок и хотелок.
Отдельное спасибо Espressif за то, что сделали WiFi доступным для встраиваемых устройств 7 лет назад. А там и другие производители подтягиваются. Мы только в плюсе.
DrPass
Так а в чём, собственно, смысл существования этой платы при наличии ESP32? Я не понял, если честно. Путь и более быстрый на такт микроконтроллер, но все равно меньшая итоговая производительность. Несколько меньший функционал, несколько большее энергопотребление.
nochkin Автор
Потребление должно быть меньше.
Я так понял, что ESP32-C3 будет более дешёвым вариантов ESP32 и может пойти на замену ESP8266.
RISC-V на такт быстрее как раз будет, чем Xtensa ядро.
isden
Ну есть же ESP32-SOLO. Все то же что и обычный ESP32, но 1 ядро и дешевле.
nochkin Автор
ESP32-C3 должен быть дешевле, более экономичным в плане потребления и меньше корпус (хотя, этот фактор не так критичен для большинства).
Так же у него Bluetooth 5. И потенциально у ESP32-C3 ещё будет отладка по USB.
Я не нашёл точного подтверждения, но вроде говорят, что даже просыпание WiFi из сна на новых -S2 и -C3 будет быстрее.
isden
Посмотрим что в итоге выкатят, очень интересно.
nochkin Автор
Попробовал ради интереса поискать где купить ESP32-Solo, но нашёл очень мало предложений и все они были даже дороже обычного ESP32 и ESP32-S2.
Не то, что я побегу покупать, но есть где они действительно дешевле? Просто любопытства ради. Могу предположить, что из-за низкого спроса они такие дорогие, но я мог пропустить что-то очевидное.
isden
Я тупо в чип-дип купил горсть с полгода назад, вышло по ~300р.
Сейчас смотрю — за 320 (от 8 штук) можно там взять.
Там же сейчас (для сравнения):
nochkin Автор
Это оба не Solo.
Там же Solo стоит 580р если покупать не партию.
ESP32-WROOM-32D стоит 390р если не партия, а он два ядра.
Я к тому, что Solo дешевле не получается.
На Mouser'е, кстати, такая же ситуация.
isden
Ну я для сравнения и привел цены на 2-х ядерные.
Solo за 320 — тоже мин. партия 8 шт.
nochkin Автор
Мне просто стало любопытно по поводу более раннего комментария: «Ну есть же ESP32-SOLO. Все то же что и обычный ESP32, но 1 ядро и дешевле.».
Вот и стало интересно «дешевле ли?». Получилось, что нет.
isden
Когда я покупал, мне вышло заметно дешевле (2-х ядерные тогда в районе 370-400 были).
nochkin Автор
Интересно. Возможно, это были какие-то косячные ценообразования у чип-дипа.
Но мы уже не узнаем наверняка, так как не с чем сравнить в тот момент времени.
nixtonixto
Очень некорректно сравнивать цены по ЧиДу и делать выводы, да ещё в розничных количествах. Сравнивайте хотя бы по диджику.
Хотя S2 на плате сейчас стоит 1,99, чип без платы вроде вообще доллар… Экономический смысл в С3, да ещё без ULP, будет, только если в него с минимальными правками портируется код от больших ЕСП32…
nochkin Автор
Я на Mouser'e сравнил выше. Если это тоже не достаточно корректно, то на DigiKey версия ESP32-Solo стоит $3.74, а обычный ESP32-WROOM-32U $2.68. Есть ещё с большим флешем за $2.99.
S2 даже дешевле, верно.
Если код на C/C++, то портировать даже ничего не надо будет. Достаточно сделать «idf.py set-targed esp32c3» и пересобрать проект. Об этом в топике написано как раз.
Если что-то совсем хитрое делается с периферией или специфичное для Xtensa, то тогда надо будет что-то делать. Но большинство проектов в такие дебри не уходит.
В связи с большей популярностью RISC-V, компилятор под него более отлаженный и оптимизированный. С портированием (если оно вообще будет) нормального кода проблем быть не должно.