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