Начало работы с ESP32-C3 Super Mini
ESP32-C3 Super Mini — это компактная отладочная плата на базе чипа Espressif ESP32-C3, входящего в семейство ESP32. Её основные преимущества перед другими платами ESP32 — малый размер и низкое энергопотребление в режиме глубокого сна. В этом руководстве мы познакомимся с ESP32-C3 Super Mini, рассмотрим её характеристики и распиновку, покажем, как программировать её с помощью Arduino IDE, и запустим несколько примеров для тестирования платы.
Знакомство с ESP32-C3 Super Mini
ESP32-C3 Super Mini — это компактная отладочная плата с чипом ESP32-C3, имеющим встроенный Wi-Fi и Bluetooth. В отличие от других моделей плат ESP32, этот чип — одноядерный. Плата имеет очень маленький форм-фактор и оптимизирована для низкого энергопотребления, потребляя всего около 43 мкА в режиме глубокого сна, согласно даташиту. На плате 16 контактов, из которых 11 программируемых GPIO поддерживают ADC, PWM, UART, I2C и SPI.
На плате есть кнопки RST (сброс) и BOOT. Кнопка BOOT используется для перевода платы в режим загрузчика (bootloader) для загрузки кода, а кнопка RST сбрасывает плату — полезно для перезапуска и выполнения только что загруженного кода.
Плата также оснащена интерфейсом USB-C, который можно использовать для питания платы, загрузки кода или последовательной связи. В качестве альтернативы можно запитать плату от внешнего источника 5В через контакты 5V и GND — но обратите внимание, что порт USB-C не следует использовать одновременно с внешним источником питания.
Как и многие другие модели плат ESP32, она оснащена встроенным светодиодом. Но в данном случае он подключён к GPIO 8 (а не к GPIO 2, как у большинства плат).
Технические характеристики ESP32-C3 Super Mini
Вот краткое описание технических характеристик ESP32-C3:
Процессор: 32-битный RISC-V CPU с тактовой частотой до 160 МГц
Протоколы IEEE 802.11b/g/n WiFi и Bluetooth 5 (LE)
400 КБ SRAM, 384 КБ ROM и встроенная 4 МБ flash-память
Компактная SMD-антенна
11 GPIO, поддерживающих следующие интерфейсы:
4 контакта ADC
PWM
UART
I2C
SPI
Встроенный светодиод на GPIO 8
Кнопки Reset и Boot
Сверхнизкое энергопотребление: всего 43 мкА в режиме глубокого сна
Малый форм-фактор
Вы также можете ознакомиться со следующей таблицей:
Микроконтроллер (процессор) |
Espressif ESP32-C3 (32-бит RISC-V, одноядерный, до 160 МГц) |
Flash-память |
4 МБ (встроенная SPI flash) |
SRAM |
400 КБ |
ROM |
384 КБ |
Wi-Fi |
802.11 b/g/n, 2.4 ГГц, до 150 Мбит/с |
Bluetooth |
Bluetooth 5.0 LE |
Контакты GPIO |
11 доступных GPIO |
Аналоговые входы (ADC) |
2 x 12-бит SAR ADC, до 6 каналов |
Каналы PWM |
6 каналов |
SPI |
3 x SPI интерфейса (SPI0, SPI1 зарезервированы) |
I2C |
1 x I2C интерфейс |
UART |
2 x UART интерфейса |
I2S |
1 x I2S интерфейс |
USB-интерфейс |
USB-C, поддержка USB CDC |
Питание |
5В через USB-C или 3.3В–6В через контакт VIN (5V); встроенный регулятор 3.3В (до 500 мА) |
Рабочее напряжение |
3.3В (логический уровень для GPIO) |
Режим глубокого сна |
43 мкА |
Кнопки |
1 x кнопка Reset, 1 x кнопка Boot (GPIO9) |
Светодиод |
1 x встроенный светодиод (на GPIO8, активный низкий) |
Программирование |
Arduino IDE, ESP-IDF, MicroPython, PlatformIO/pioarduino |
Где купить ESP32-C3 Super Mini?
Плата ESP32-C3 Super Mini широко доступна во многих магазинах. Перейдите по следующей ссылке, чтобы сравнить цены в разных магазинах:
Периферийный интерфейс ESP32-C3 Super Mini
ESP32-C3 Super Mini имеет 16 контактов, 11 из которых — программируемые GPIO, которые можно использовать для управления периферийными устройствами и считывания датчиков. Поддерживаются следующие периферийные интерфейсы:
Цифровой ввод/вывод
PWM
ADC
PWM
UART
I2C
SPI
Распиновка ESP32-C3 Super Mini
На следующем рисунке показана распиновка платы ESP32-C3 Super Mini. Обратите внимание, что распиновка может незначительно отличаться в зависимости от производителя. Поэтому сверьтесь с маркировкой на шёлкотрафарете вашей платы.
В следующей таблице описано назначение контактов и их функции.
Контакт |
Функция |
|---|---|
3V3 |
Выход/вход 3.3В (выходное напряжение от встроенного регулятора или вход для внешнего источника питания 3.3В) |
5V |
Вход/выход 5В (подключён к USB-C 5В или внешнему источнику 5В) |
GND |
Контакт земли |
GPIO 0 |
GPIO общего назначения, ADC1, PWM |
GPIO 1 |
GPIO общего назначения, ADC1, PWM |
GPIO 2 |
GPIO общего назначения, ADC1, Strapping Pin (режим загрузки) (избегайте для общего использования) |
GPIO 3 |
GPIO общего назначения, PWM |
GPIO 4 |
GPIO общего назначения, PWM, по умолчанию контакт SPI SCK |
GPIO 5 |
GPIO общего назначения, PWM, по умолчанию контакт SPI MISO |
GPIO 6 |
GPIO общего назначения, PWM, по умолчанию контакт SPI MOSI |
GPIO 7 |
GPIO общего назначения, PWM, по умолчанию контакт SPI SS |
GPIO 8 |
Подключён к встроенному светодиоду (активный низкий); Strapping Pin (избегайте для общего использования); по умолчанию контакт I2C SDA |
GPIO 9 |
Подключён к кнопке BOOT (LOW для входа в загрузчик), Strapping Pin (избегайте для общего использования); по умолчанию контакт I2C SCL |
GPIO 10 |
GPIO общего назначения, PWM |
GPIO 20 |
GPIO общего назначения, PWM, по умолчанию контакт UART RX |
GPIO 21 |
GPIO общего назначения, PWM, по умолчанию контакт UART TX |
Strapping-контакты
GPIO 2: strapping-контакт для входа в режим загрузчика — избегайте для общего использования.
GPIO 8: подключён к встроенному синему светодиоду (инвертированная логика/активный LOW); также является strapping-контактом;
GPIO 9: подключён к кнопке BOOT — избегайте для общего использования;
Вы по-прежнему можете использовать strapping-контакты в своих проектах, однако учитывайте колебания состояния этих GPIO при сбросе ESP32 или переходе в режим загрузчика.
Контакты питания
Для питания доступны контакты 5V, 3V3 и GND.
Контакт 3V3 обеспечивает напряжение 3.3В от встроенного регулятора или принимает 3.3В от внешнего источника питания. Аналогично, контакт 5V можно использовать как вход для питания платы, или он выдаёт 5В от USB-источника.
PWM
Все GPIO общего назначения могут выводить ШИМ-сигналы (PWM).
Аналоговые (ADC) контакты
GPIO 0, 1, 2, 3, 4 и 5 поддерживают аналоговое считывание:
GPIO 0: ADC1_CH0
GPIO 1: ADC1_CH1
GPIO 2: ADC1_CH2
GPIO 3: ADC1_CH3
GPIO 4: ADC1_CH4
GPIO 5: ADC1_CH5
UART, I2C и PWM
Благодаря функции мультиплексирования ESP32, интерфейсы UART, SPI и I2C могут быть назначены практически на любой GPIO.
Однако при использовании Arduino IDE и выборе платы ESP32 C3 в меню Boards по умолчанию используются следующие контакты:
UART: по умолчанию GPIO 20 (RX) и GPIO 21 (TX)
SPI: по умолчанию GPIO 6 (MISO), GPIO 7 (MOSI), GPIO 10 (SCK) и GPIO 5 (SS)
I2C: по умолчанию GPIO 8 (SDA) и GPIO 9 (SCL)
Даташит платы
Для получения дополнительной информации о плате ознакомьтесь с её даташитом по ссылке ниже:
Программирование ESP32-C3 Super Mini с Arduino IDE
Вы можете программировать ESP32-C3 Super Mini с помощью Arduino IDE, как и любой другой модуль ESP32. Для этого выполните следующие шаги.
1) Установка Arduino IDE
Сначала установите Arduino IDE и платы ESP32.
Перейдите на сайт Arduino и скачайте версию для вашей операционной системы.
Windows: запустите скачанный файл и следуйте инструкциям мастера установки (для Windows мы рекомендуем первый вариант).
Mac OS X: скопируйте скачанный файл в папку Applications.
Linux: распакуйте скачанный файл и откройте файл arduino-ide, который запустит IDE.
Если у вас возникнут вопросы, обратитесь к Руководству по установке Arduino.
Нужна плата ESP32-C3 Super Mini? Вы можете купить её здесь.
Рекомендуем прочитать: ESP32 Development Boards Review and Comparison
2) Установка плат ESP32 в Arduino IDE
Чтобы установить платы ESP32 в Arduino IDE, выполните следующие инструкции.
Откройте Boards Manager. Перейдите в Tools > Board > Boards Manager… или просто нажмите на значок Boards Manager в левом боковом меню.
Найдите ESP32 и нажмите кнопку установки для esp32 by Espressif Systems version 3.X.
Вот и всё. Установка завершится через несколько секунд.
3) Перевод ESP32-C3 Super Mini в режим загрузчика
Подключите ESP32-C3 Super Mini к компьютеру в режиме загрузчика (Bootloader Mode) — готовом для загрузки кода через USB. Возможно, вам нужно будет сделать это при первом подключении платы к компьютеру.
В моём случае мне нужно было выполнить эту процедуру только один раз, но я читал отзывы некоторых пользователей, которым приходилось делать это каждый раз при загрузке нового кода.
Выполните следующие шаги:
Удерживайте кнопку BOOT.
Нажмите и отпустите кнопку RESET (продолжая удерживать BOOT).
Затем отпустите кнопку BOOT.
4) Загрузка кода на ESP32-C3 Super Mini
Скопируйте следующий код в Arduino IDE. Этот код просто мигает встроенным светодиодом (подключённым к GPIO 8) и выводит в Serial Monitor текущее состояние GPIO.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
*********/
// ESP32 C3 Super Mini on-board LED (works with inverted logic)
const int ledPin = 8;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
Serial.println("LED OFF");
delay(1000);
digitalWrite(ledPin, LOW);
Serial.println("LED ON");
delay(5000);
}
Теперь выберите плату и COM-порт. Нажмите на выпадающее меню вверху и выберите ESP32C3 Dev Module. Затем выберите соответствующий COM-порт.
Затем включите следующую опцию в меню Tools > USB CDC on Boot.
Наконец, нажмите кнопку загрузки для загрузки кода.
Нажмите кнопку RST на плате, чтобы она начала выполнять только что загруженный код.
Встроенный светодиод будет мигать каждую секунду.
Одновременно вы можете открыть Serial Monitor со скоростью 115200 бод. В нём будет отображаться текущее состояние светодиода.
Тестирование Wi-Fi на ESP32-C3 Super Mini (веб-сервер)
Для тестирования Wi-Fi ESP32-C3 Super Mini мы подготовили веб-сервер, управляющий встроенным светодиодом.
1) Скопируйте следующий код в Arduino IDE.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include <WiFi.h>
#include <WebServer.h>
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Assign output variable to GPIO pin
const int output = 8;
String outputState = "OFF";
// Create a web server object
WebServer server(80);
// Function to handle turning GPIO on
void handleGPIOOn() {
outputState = "ON";
digitalWrite(output, LOW);
handleRoot();
}
// Function to handle turning GPIO off
void handleGPIOOff() {
outputState = "OFF";
digitalWrite(output, HIGH);
handleRoot();
}
// Function to handle the root URL and show the current state
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
html += "<link rel=\"icon\" href=\"data:,\">";
html += "<style>";
html += "html { font-family: Helvetica; text-align: center; background: #f5f7fa; margin: 0; padding: 20px; }";
html += "body { max-width: 600px; margin: 0 auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }";
html += "h1 { color: #333; font-size: 28px; margin-bottom: 20px; }";
html += "p { color: #555; font-size: 18px; margin: 10px 0; }";
html += ".button { background: #4CAF50; border: none; color: white; padding: 12px 24px; text-decoration: none; font-size: 20px; border-radius: 8px; cursor: pointer; transition: background 0.2s ease; display: inline-block; width: 120px; box-sizing: border-box; }";
html += ".button:hover { background: #45a049; }";
html += ".button2 { background: #555555; }";
html += ".button2:hover { background: #666666; }";
html += "</style></head>";
html += "<body><h1>ESP32 Web Server</h1>";
// Display GPIO controls
html += "<p>GPIO - State " + outputState + "</p>";
if (outputState == "ON") {
html += "<p><a href=\"/off\"><button class=\"button button2\">OFF</button></a></p>";
} else {
html += "<p><a href=\"/on\"><button class=\"button\">ON</button></a></p>";
}
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// Initialize the output variable as output
pinMode(output, OUTPUT);
// Set the onboard LED to LOW (inverted logic)
digitalWrite(output, HIGH);
// Connect to Wi-Fi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set up the web server to handle different routes
server.on("/", handleRoot);
server.on("/on", handleGPIOOn);
server.on("/off", handleGPIOOff);
// Start the web server
server.begin();
Serial.println("HTTP server started");
}
void loop() {
// Handle incoming client requests
server.handleClient();
}
2) Вставьте учётные данные вашей Wi-Fi сети в следующие строки.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
3) Загрузите код на плату.
4) Откройте Serial Monitor со скоростью 115200 бод.
5) Нажмите кнопку RST на плате.
6) IP-адрес будет выведен в Serial Monitor.
7) Откройте веб-браузер в вашей локальной сети и вставьте IP-адрес. Вы должны получить доступ к веб-серверу. Нажмите кнопку для управления встроенным светодиодом.
Режимы сна ESP32-C3 Super Mini
Одно из главных преимуществ ESP32-C3 Super Mini, помимо малого форм-фактора, — это низкое потребление в режиме сна.
Плата поддерживает режимы глубокого сна (deep sleep) и лёгкого сна (light sleep). Подробнее о функциях сна можно узнать в документации.
У нас есть несколько уроков, объясняющих использование глубокого и лёгкого сна с ESP32 (однако имейте в виду, что некоторые функции внешнего пробуждения отличаются для ESP32-C3 Super Mini).
* в случае внешнего пробуждения для ESP32-C3 Super Mini необходимо использовать функцию esp_deep_sleep_enable_gpio_wakeup() вместо стандартной.
ESP32-C3 Super Mini — глубокий сон с пробуждением по таймеру
Следующий пример — упрощённый код, который переводит ESP32 в режим глубокого сна на одну минуту. После каждой минуты плата просыпается и мигает светодиодом, подключённым к GPIO 8.
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/getting-started-esp32-c3-super-mini/
*********/
#define uS_TO_S_FACTOR 1000000ULL // Microseconds to seconds
#define TIME_TO_SLEEP 60 // Deep sleep duration in seconds
#define LED_PIN 8 // LED connected to GPIO 8
void setup() {
delay(100);
pinMode(LED_PIN, OUTPUT);
// Blink LED (on-board LED works with inverted logic)
digitalWrite(LED_PIN, LOW);
delay(1000);
digitalWrite(LED_PIN, HIGH);
// Set deep sleep timer
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// Enter deep sleep
esp_deep_sleep_start();
}
void loop() {
}
Чтобы перевести ESP32 в режим глубокого сна и разбудить его по таймеру, вызовите функцию esp_sleep_enable_timer_wakeup() и передайте количество микросекунд сна в качестве аргумента.
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
После настройки источника пробуждения можно перевести ESP32 в режим глубокого сна с помощью esp_deep_sleep_start().
esp_deep_sleep_start();
Для тестирования этого кода убедитесь, что к GPIO 8 подключён светодиод, или используйте встроенный светодиод.
Примечание: мне не удалось использовать Serial Monitor с ESP32-C3 Super Mini в режиме глубокого сна, потому что плата не подключалась к Serial Monitor автоматически после пробуждения.
Важно: после загрузки кода глубокого сна на плату, для повторного программирования необходимо выполнить последовательность нажатий кнопок для перехода в режим загрузчика.
Удерживайте кнопку BOOT.
Нажмите и отпустите кнопку RESET (продолжая удерживать BOOT).
Затем отпустите кнопку BOOT.
Энергопотребление
Используя предыдущий пример на ESP32-C3 Super Mini, я измерил потребление в режиме глубокого сна — приблизительно 600 мкА. Это выше указанных в даташите 40 мкА. Вероятно, это связано с неоптимизированными конфигурациями, такими как плавающие GPIO; или необходимо использовать ESP-IDF для применения более эффективных функций.
Энергопотребление ESP32-C3 Super Mini в режиме глубокого сна
Плата ESP32 DOIT — энергопотребление в режиме глубокого сна
Тем не менее, по сравнению с обычным ESP32, который потребляет около 10 мА в режиме глубокого сна, измеренные 600 мкА у ESP32-C3 всё равно более эффективны и являются значительным улучшением без каких-либо модификаций кода.
Заключение
Надеемся, это руководство по началу работы с ESP32-C3 Super Mini было для вас полезным. Когда вы познакомитесь с платой и её распиновкой, вы сможете использовать наши другие проекты ESP32 с этой конкретной платой — просто убедитесь, что правильно назначили контакты при необходимости.
Если вы хотите узнать больше об ESP32, обязательно ознакомьтесь с нашими ресурсами:
—
Источник: :doc:`Getting Started with the ESP32-C3 Super Mini <../getting-started-esp32-c3-super-mini/index>` — Random Nerd Tutorials, Rui Santos & Sara Santos