Интересуетесь ESP32-C3 от Espressif? Являясь одноядерной и экономичной альтернативой ESP8266, ESP32-C3 использует открытую архитектуру RISC-V. Давайте взглянем на него поближе.
ESP32-C3 от Espressif многие ждали с нетерпением. В его основе работает только одно ядро вместо двух ядер в контроллерах на базе ESP32. Это ядро, однако, использует свободную и открытую архитектуру набора команд RISC-V, которая конкурирует с контроллерами на базе ARM, широко используемыми для приложений Интернета вещей. Давайте рассмотрим ESP32-C3 и ESP32-C3-DevKitC-02. Следует заметить. что программная поддержка ESP32-C3 все еще находится в стадии разработки. Кит для разработки, рассматриваемый в этом обзоре, оснащен 2 версией чипа ESP32-C3. К нему прилагается лист с исправлениями формата А4 (напечатанный с обеих сторон), в котором перечислены проблемы, которые были выявлены на данный момент. Помимо прочего, версия 2 страдает от бессонницы — то есть потребляет высокий большой ток в режиме глубокого сна, а последовательный адаптер USB / JTAG в чипе не функционирует. В более поздней версии 3 эти проблемы должны быть решены.
Репозиторий Espressif ESP-IDF, поддерживающий ESP32-C3, также находится в стадии разработки и может содержать ошибки. Поскольку поддержка Arduino основана на нем, любые ошибки также будут перенесены на эту платформу. На момент написания этой статьи в Arduino IDE, которую вы используете, необходимо будет установить версию пакета поддержки Arduino для разработки. Для этого в Менеджерt дополнительных плат в разделе "Preference" введите следующую ссылку : https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json. Это устоновит версию пакета 2.0.0-rc1.
Покупателям наборов для разработки на базе ESP32-C3 будут отгружать последнюю версию чипа rev.3, о чем можно прочитать в посте на форуме по адресу https://esp32.com/viewtopic.php?t=21040 . Предварительная версия rev.2 была установлена только в ограниченном количестве первых поставляемых девкитов.
ESP32-C3 DevKitC-02
Сначала мы взглянем на ESP32-C3 и DevKitC-02 (рис. 1).
Чип ESP32-C3 фактически является преемником микросхемы Espressif ESP8266. Как и ESP8266, он также использует одноядерный процессор, который может работать с тактовой частотой до 160 МГц, и имеет чип Wi-Fi BGN 2,4 ГГц с полной реализацией стека TCP / IP. Но на этом сходство с ESP8266 заканчивается. ESP32-C3 включает в себя гораздо больше периферийных устройств, связанных с ESP32, который является преемником ESP8266. В дополнение к Wi-Fi, ESP32-C3 включает в себя BLE 5.0 и Bluetooth Mesh. Он также использует удобную матрицу GPIO, так что практически любая функция может быть назначена практически любому PIN-коду. На рисунке 2 показана структурная схема ESP32-C3, которая включает в себя адаптер USB serial/JTAG.
Структурная схема функций контроллера приведена на рисунке 2 и показывает явное наследование от устройства ESP32, с такой спецификацией:
- RISC-V CPU на частоте 160 MHz
- 400 KB SRAM ( 16 KB Flash Cache )
- Встроенный 2.4 GHz Wi-Fi (BGN)
- Bluetooth LE 5.0
- Crypto Hardware Accelerator
- 22 программируемых GPIO
- 2 x 12-Bit SAR ADC
- 3 x SPI (поддерживает SPI, Dual SPI, Quad SPI и QPI)
- 2 x UART (поддерживает RS232, RS485 IrDA до 5 MBоd)
- 1 x I2C (до 800 kbit/s)
- 1 x I2S
- RMT (remote control peripheral devices)
- TWAI (совместимый с CAN 2.0 b / ISO 11898-1)
- PWM
- Внутренний адаптер USB/JTAG
Благодаря 384 КБ оперативной памяти ESP32-C3 предлагает почти в пять раз больше места в оперативной памяти, чем ESP8266 (80 Кб).
Основным компонентом, который отличает ESP32-C3 от всех других чипов ESP32 или ESP8266, является ядро процессора. В то время как его предшественники используют RISC-процессор Tensilica L106 или LX6/LX7 [5], ESP32-C3 оснащен процессором RISC-V. Это означает, что с этим ядром можно использовать компиляторы и другие программы из набора инструментов RISC-V. Усовершенствования этих компиляторов и соответствующих инструментов, таким образом, принесут пользу пользователям ESP32-C3.
Плата DevKitC-02A включает в себя USB-последовательный преобразователь, а также RGB-светодиод, совместимый с WS2812. Подробную принципиальную схему платы можно найти в [6]. На рисунке 3 показаны обе стороны платы.
Другой взгляд на Мигалку
Установленный на плате RGB-светодиод, совместимый с WS2812, управляется с помощью последовательного протокола, так что мы не можем отделаться простой установкой высокого уровня на каком либо порте ввода-вывода для включения светодиода. К счастью, библиотека Adafruit NeoPixel содержит подпрограммы, которые работают с этим типом светодиодов. Если он еще не установлен, вы можете добавить его в свою Arduino IDE обычным способом. Код ниже заставляет светодиод RGB мигать красным. Вам не нужно вносить какие-либо специальные изменения в код, чтобы он работал на ESP32-C3. Загрузить код так же просто, как и с ESP 32. Благодаря матрице GPIO светодиоды типа WS2812 также можно полключать и к другим выводам.
Код для мигания светодиодом:
/* This sample needs the Adafruit NeoPixel library */
#include <Adafruit_NeoPixel.h>
#define PIN 8
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pixels.clear(); // Set all pixel colors to ’off’
}
void loop() {
delay(1000); // wait for a second
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.show();
delay(1000); // wait for a second
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.show();
}
Чтение типа и версии чипа
С чипами ESP 32 можно считывать информацию, хранящуюся на чипе, показывая ее основные свойства. В листинге 2 показана эта информация, считываемая через последовательный интерфейс, работающий со скоростью 115200 бод (связь со скоростью 9600 бод, с чипом версии 2, использующим встроенный преобразователь USB-to-serial, выводит искаженные символы). Здесь вы сможете прочитать, какая версия чипа установлена в вашем комплекте ESP32-C3. Когда вы увидите список известных ошибок, связанных с версией 2, вы будете рады, когда сможете убедиться, что у вкас 3 версия чипа.
/* From the IDF documentation at https://github.com/espressif/esp-idf/components/esp_hw_support/include/
esp_chip_info.h */
/*
typedef enum {
CHIP_ESP32 = 1, //!< ESP32
CHIP_ESP32S2 = 2, //!< ESP32-S2
CHIP_ESP32S3 = 4, //!< ESP32-S3
CHIP_ESP32C3 = 5, //!< ESP32-C3
CHIP_ESP32H2 = 6, //!< ESP32-H2
} esp_chip_model_t;
// Chip feature flags, used in esp_chip_info_t
#define CHIP_FEATURE_EMB_FLASH BIT(0) //!< Chip has embedded flash memory
#define CHIP_FEATURE_WIFI_BGN BIT(1) //!< Chip has 2.4GHz WiFi
#define CHIP_FEATURE_BLE BIT(4) //!< Chip has Bluetooth LE
#define CHIP_FEATURE_BT BIT(5) //!< Chip has Bluetooth Classic
#define CHIP_FEATURE_IEEE802154 BIT(6) //!< Chip has IEEE 802.15.4
typedef struct {
esp_chip_model_t model; //!< chip model, one of esp_chip_model_t
uint32_t features; //!< bit mask of CHIP_FEATURE_x feature flags
uint8_t cores; //!< number of CPU cores
uint8_t revision; //!< chip revision number
} esp_chip_info_t;
*/
void setup() {
Serial.begin(115200);
}
void loop() {
delay(5000);
Serial.println(“esp_chip_info()”);
Serial.println(“----------------------------------------------------------------”);
esp_chip_info_t info;
esp_chip_info(&info);
Serial.print(“Chip Model: “);
switch(info.model){
case 1:{
Serial.println(“ESP32”);
}break;
case 2:{
Serial.println(“ESP32-S2”);
}break;
case 4:{
Serial.println(“ESP32-S3”);
}break;
case 5:{
Serial.println(“ESP32-C3”);
}break;
case 6:{
Serial.println(“ESP32-H2”);
} break;
default:{
Serial.print(“Unknown Chipmodel”);
Serial.println(info.model);
}
}
Serial.print(“Featues :”);
if(info.features&CHIP_FEATURE_EMB_FLASH){
Serial.print(“ Embedded Flash “);
}
if(info.features&CHIP_FEATURE_WIFI_BGN){
Serial.print(“ WiFi(BGN) “);
}
if(info.features&CHIP_FEATURE_BLE){
Serial.print(“ BLE “);
}
if(info.features&CHIP_FEATURE_BT){
Serial.print(“ BT CLassic “);
}
if(info.features&CHIP_FEATURE_IEEE802154){
Serial.print(“ IEEE802.155.4 “);
}
Serial.println(“”);
Serial.print(“Cores: “);
Serial.println(info.cores);
Serial.print(“Chip Revision: “);
Serial.println(info.revision);
Serial.println(“----------------------------------------------------------------”);
Serial.println();
}
Перенос проектов ESP32
Одними из наиболее полезных функций ESP32-C3 являются встроенные возможности связи Wi-Fi и BLE. Вместе с SPIFFS или файловой системой LittleFS для управления веб-страницами и другими данными на ESP32 это делает платформу идеальной для широкого спектра приложений Wi-Fi. Тем, кто работает со старой версией Arduino IDE 1.X, потребуется установить исправленный плагин [https://github.com/lorol/arduino-esp32fs-plugin/releases] для загрузки файлов в файловую систему ESP32. Оригинальная версия me-no-dev [https://github.com/me-no-dev/arduino-esp32fs-plugin] не работает с ESP32-C3.
В качестве примера мы использовали код [https://github.com/ElektorLabs/180662-mini-NTP-ESP32], который создает мини-NTP-сервер на базе GPS ESP32 [www.elektormagazine.com/labs/mini-ntp-server-with-gps]. Это может обеспечить транслирование времени через NTP в своей собственной сети и написано для Arduino-Framework. После нескольких настроек портов GPIO код может быть без проблем скомпилирован и загружен в ESP32-C3. Этот базовый пример показывает, что большая часть существующего кода и знаний из ESP32 будет непосредственно переносима на ESP32-C3, поэтому даже новички в средах RISC-V не должны испытывать проблем.
Большинство существующих примеров ESP 32 также будут работать на ESP32-C3, и поскольку FreeRTOS и здесь работает в фоновом режиме, вы можете использовать все преимущества и недостатки, которые он приносит, как и в случае с ESP 32. Поскольку ESP32-C3 в настоящее время поддерживается только в ветке разработчиков чипов ESP32 в Arduino framework, не все IDE пока полностью поддерживают этот чип. По мере развития фреймворка можно ожидать улучшения уровня поддержки.
Одноядерное решение
ESP32-C3 является одноядерной, экономичной альтернативой ESP8266 и имеет многие периферийные устройства, как у ESP32. Встроенный адаптер USB/serial и JTAG позволяет легко обмениваться файлами и данными через USB. Вы даже можете начать отладку кода (при условии, что в версии 3 чипа не произойдет ничего непредвиденного).
Благодаря платформе Arduino существующий код можно повторно использовать с ESP32-C3, а большой объем оперативной памяти и флэш-памяти позволяет стрить более крупные проекты. Заглядывая в будущее, мы уверены, что в магазинах начнет появляться множество плат ESP 32C3 сторонних производителей, будет интересно посмотреть, какие новые функции будут предлагать эти платы. Любой, у кого дома есть ESP32-Dev Kit C02, сможет начать писать и тестировать код для этой среды прямо сейчас.