Новая игрушка
В ноябре 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 лет назад. А там и другие производители подтягиваются. Мы только в плюсе.