ESP32 для начинающих, описание пинов и онлайн-учебник

Учебник по ESP32 DevKit для начинающих — 13 уроков
ESP32 DevKit с Type-C — самая популярная плата семейства ESP32 в современном исполнении: два ядра до 240 МГц, Wi-Fi, Bluetooth и 25 доступных GPIO по цене обычной Arduino. В этой статье — учебник для начинающих из 13 уроков с готовыми скетчами, а затем описание платы: распиновка на 30 выводов, назначение каждого вывода и подводные камни, из-за которых проект может не запуститься.
Что за плата
Плата построена на модуле ESP-WROOM-32: в нём микроконтроллер ESP32, 4 МБ флеш-памяти, кварц и антенна. На плате разъём USB Type-C с преобразователем CH340C для прошивки и монитора порта, стабилизатор 3,3 В, кнопки EN (сброс) и BOOT (GPIO0), светодиод питания PWR и светодиод D2 на GPIO2.
Type-C удобнее старого micro-USB: кабель вставляется любой стороной, а такие кабели сегодня есть у всех — от зарядки телефона. Если у вас уже есть проекты под старую плату, ничего переделывать не придётся: у версии с micro-USB и CP2102 та же распиновка, отличаются только разъём и драйвер USB.
| Параметр | Значение |
|---|---|
| Процессор | 2 ядра Xtensa LX6, до 240 МГц |
| Память | 520 КБ SRAM, 4 МБ флеш-памяти |
| Wi-Fi | 802.11 b/g/n, 2,4 ГГц |
| Bluetooth | Bluetooth 4.2: классический (SPP, A2DP) и BLE |
| GPIO на гребёнке | 25, из них 4 — только вход |
| АЦП | 12 бит, 15 каналов на гребёнке |
| ЦАП | 2 канала, 8 бит (GPIO25, GPIO26) |
| Сенсорные входы | 9 (Touch0, Touch2–9) |
| Интерфейсы | 3 × UART, 2 × I2C, 2 × SPI для периферии, 2 × I2S, ШИМ на любом выходе |
| Питание | 5 В через USB или вывод VIN; логика 3,3 В |
Распиновка ESP32 DevKit на 30 выводов
Плата на 30 выводов — два ряда по 15. Подписи на плате (D23, D22…) совпадают с номером GPIO, а номер в Arduino IDE равен номеру GPIO: pinMode(23, OUTPUT) — это GPIO23. В таблице выводы идут по порядку от антенны к разъёму USB.

| Вывод | Тип | Функции | Примечание |
|---|---|---|---|
| Ряд с EN — от антенны к USB | |||
| EN | Вход сброса | Кнопка EN | LOW — сброс, HIGH — работа |
| GPIO36 (VP) | Только вход | АЦП ADC1_CH0 (SENSOR_VP) | Нет внутренней подтяжки — для кнопки нужен внешний резистор |
| GPIO39 (VN) | Только вход | АЦП ADC1_CH3 (SENSOR_VN) | Нет внутренней подтяжки |
| GPIO34 | Только вход | АЦП ADC1_CH6 | Нет внутренней подтяжки |
| GPIO35 | Только вход | АЦП ADC1_CH7 | Нет внутренней подтяжки |
| GPIO32 | Вход/выход | АЦП ADC1_CH4, сенсор Touch9, ШИМ | |
| GPIO33 | Вход/выход | АЦП ADC1_CH5, сенсор Touch8, ШИМ | |
| GPIO25 | Вход/выход | ЦАП DAC1, АЦП ADC2_CH8, ШИМ | |
| GPIO26 | Вход/выход | ЦАП DAC2, АЦП ADC2_CH9, ШИМ | |
| GPIO27 | Вход/выход | АЦП ADC2_CH7, сенсор Touch7, ШИМ | |
| GPIO14 | Вход/выход | АЦП ADC2_CH6, сенсор Touch6, HSPI SCK, ШИМ | При загрузке кратковременно выдаёт ШИМ-сигнал |
| GPIO12 | Вход/выход | АЦП ADC2_CH5, сенсор Touch5, HSPI MISO, ШИМ | Вывод обвязки: при включении должен быть LOW, иначе плата может не запуститься |
| GPIO13 | Вход/выход | АЦП ADC2_CH4, сенсор Touch4, HSPI MOSI, ШИМ | |
| GND | Общий (GND) | — | |
| VIN | Питание, вход 5 В | — | Вместо USB можно подать 5 В |
| Ряд с D23 — от антенны к USB | |||
| GPIO23 | Вход/выход | VSPI MOSI, ШИМ | |
| GPIO22 | Вход/выход | I2C SCL (по умолчанию в Arduino), ШИМ | |
| GPIO1 (TX0) | Вход/выход | UART0 TX (Serial) | Подключён к USB-UART: через него прошивка и монитор порта. Лучше не занимать |
| GPIO3 (RX0) | Вход/выход | UART0 RX (Serial) | Подключён к USB-UART: через него прошивка и монитор порта. Лучше не занимать |
| GPIO21 | Вход/выход | I2C SDA (по умолчанию в Arduino), ШИМ | |
| GPIO19 | Вход/выход | VSPI MISO, ШИМ | |
| GPIO18 | Вход/выход | VSPI SCK, ШИМ | |
| GPIO5 | Вход/выход | VSPI SS, ШИМ | Вывод обвязки: при включении должен быть HIGH. При загрузке выдаёт ШИМ-сигнал |
| GPIO17 | Вход/выход | UART2 TX, ШИМ | |
| GPIO16 | Вход/выход | UART2 RX, ШИМ | |
| GPIO4 | Вход/выход | АЦП ADC2_CH0, сенсор Touch0, ШИМ | |
| GPIO2 | Вход/выход | АЦП ADC2_CH2, сенсор Touch2, ШИМ | Вывод обвязки: при прошивке должен быть LOW или не подключён |
| GPIO15 | Вход/выход | АЦП ADC2_CH3, сенсор Touch3, HSPI SS, ШИМ | Вывод обвязки: LOW при включении отключает загрузочные сообщения в UART. При загрузке выдаёт ШИМ-сигнал |
| GND | Общий (GND) | — | |
| 3V3 | Питание, выход 3,3 В | — | Суммарный ток внешних устройств — не больше 100 мА |
«Вход/выход» — вывод можно настроить как цифровой вход (с внутренней подтяжкой к питанию или к земле) или как цифровой выход. ШИМ можно вывести на любой вывод, работающий на выход.
Выводы только на вход
GPIO34, 35, 36 (VP) и 39 (VN) работают только как входы: управлять с них светодиодом или реле не получится. Внутренней подтяжки у них тоже нет, поэтому кнопку на такой вывод подключайте с внешним резистором 10 кОм к 3,3 В или к земле. Зато это отличные аналоговые входы: все четыре относятся к АЦП1 и работают вместе с Wi-Fi.
Какие выводы лучше не занимать
| Вывод | Почему |
|---|---|
| GPIO1 (TX0), GPIO3 (RX0) | Подключены к USB-UART: через них идёт прошивка и монитор порта. Если занять их своей схемой, плата может перестать прошиваться |
| GPIO6–11 | Заняты встроенной флеш-памятью. На плате на 30 выводов они не выведены, а на версии на 38 выводов выведены — но подключать к ним ничего нельзя |
| GPIO0, 2, 5, 12, 15 | Выводы обвязки — использовать можно, но с оглядкой (см. ниже) |
Выводы обвязки (strapping pins)
В момент включения ESP32 читает уровни на пяти выводах и по ним выбирает режим работы. Если подключённая схема задаст неправильный уровень, плата не запустит программу или не прошьётся.
| Вывод | Что задаёт | Какой уровень нужен при включении |
|---|---|---|
| GPIO0 | Режим запуска | HIGH — запуск программы (есть подтяжка), LOW — режим прошивки. Подключён к кнопке BOOT |
| GPIO2 | Режим прошивки | LOW или не подключён — иначе плата не войдёт в режим прошивки. На нём светодиод платы |
| GPIO12 | Напряжение флеш-памяти | LOW. При HIGH флеш-память получит 1,8 В вместо 3,3 В, и плата не запустится. Самый коварный вывод: не вешайте на него подтяжку к питанию |
| GPIO15 | Вывод загрузочных сообщений | При LOW плата не печатает служебный лог при включении. На работу не влияет |
| GPIO5 | Тайминг интерфейса SDIO | HIGH (есть подтяжка). На обычную работу не влияет |
После запуска это обычные GPIO. Без опаски к ним можно подключать то, что при включении не тянет вывод в «запрещённый» уровень: светодиоды через резистор, транзисторы для реле, входы датчиков.
Интерфейсы и выводы по умолчанию
Почти любой интерфейс ESP32 можно назначить на любые свободные выводы. Если выводы в программе не указаны, Arduino использует такие:
| Интерфейс | Выводы по умолчанию |
|---|---|
| I2C | SDA — GPIO21, SCL — GPIO22 |
| SPI (VSPI) | MOSI — GPIO23, MISO — GPIO19, SCK — GPIO18, SS — GPIO5 |
| SPI (HSPI) | MOSI — GPIO13, MISO — GPIO12, SCK — GPIO14, SS — GPIO15 |
| UART0 (Serial) | TX — GPIO1, RX — GPIO3 (занят USB) |
| UART2 (Serial2) | TX — GPIO17, RX — GPIO16 |
| ЦАП | GPIO25, GPIO26 |
Пример запуска I2C на других выводах:
Wire.begin(32, 33); // SDA = GPIO32, SCL = GPIO33
АЦП ЦАП и сенсорные входы
У ESP32 два 12-битных АЦП. АЦП1 — GPIO32–39, АЦП2 — GPIO0, 2, 4, 12–15 и 25–27. АЦП2 не работает, пока включён Wi-Fi, поэтому в проектах с Wi-Fi подключайте аналоговые датчики к GPIO32–39. Измеряемое напряжение — не выше 3,3 В. Учтите, что АЦП ESP32 нелинеен у краёв диапазона: при настройке по умолчанию точнее всего он измеряет примерно от 0,15 до 2,45 В, выше показания заметно искажаются, а около 3,1 В АЦП упирается в максимум. Для точных измерений ставьте делитель так, чтобы сигнал оставался в этом диапазоне.
Два 8-битных ЦАП на GPIO25 и GPIO26 выдают настоящее аналоговое напряжение — например, для простого звука или управления яркостью без ШИМ. У ESP32-S3 и ESP32-C3 ЦАП нет.
Сенсорные (ёмкостные) входы: Touch0 — GPIO4, Touch2 — GPIO2, Touch3 — GPIO15, Touch4 — GPIO13, Touch5 — GPIO12, Touch6 — GPIO14, Touch7 — GPIO27, Touch8 — GPIO33, Touch9 — GPIO32. К ним можно подключить металлическую площадку и сделать кнопку без механики:
void setup() { Serial.begin(115200); }
void loop() {
Serial.println(touchRead(4)); // Touch0 = GPIO4: чем меньше число, тем ближе палец
delay(200);
}
Встроенный светодиод
Светодиод D2 на плате подключён к GPIO2. Проверка платы — классический Blink:
void setup() { pinMode(2, OUTPUT); }
void loop() {
digitalWrite(2, HIGH); delay(500);
digitalWrite(2, LOW); delay(500);
}
Настройки Arduino IDE
| Параметр | Значение |
|---|---|
| Плата | ESP32 Dev Module |
| Flash Size | 4MB (32Mb) |
| Upload Speed | 921600, если прошивка сбоит — 115200 |
| Драйвер USB | CH340 — для версии с Type-C, CP2102 — для старой версии с micro-USB. В Linux и свежих Windows обычно ставится сам. Если Windows не видит плату, скачайте драйвер CH340 |
Если при прошивке висит надпись «Connecting…» — зажмите кнопку BOOT, пока не начнётся загрузка, затем отпустите.
Чем классическая ESP32 отличается от S3 и C3
Новые ESP32-S3 и ESP32-C3 во многом удобнее, но у классической ESP32 есть то, чего у них нет:
- Классический Bluetooth. Только классическая ESP32 умеет Bluetooth SPP (беспроводной COM-порт, связь с приложениями на телефоне) и A2DP — то есть может работать как Bluetooth-колонка или передавать звук на наушники. S3 и C3 поддерживают только Bluetooth LE.
- Два ЦАП для аналогового выхода.
- Огромное количество примеров и библиотек — большинство проектов в интернете написаны именно под ESP32 DevKit.
Если нужен Bluetooth-звук, связь по Bluetooth с телефоном через последовательный порт или просто проверенная плата «под любой урок» — берите классическую ESP32.
Питание
Плату можно питать от USB или подать 5 В на вывод VIN. Вывод 3V3 — выход стабилизатора платы, который питает и сам модуль ESP32. Суммарный ток всех устройств на выводе 3V3 не должен превышать 100 мА. Этого хватит для маломощных датчиков и небольшого дисплея. Датчики газа серии MQ, сервоприводы, светодиодные ленты и реле питайте от отдельного источника 5 В. Если на 3,3 В нужно больше тока, поставьте отдельный понижающий преобразователь, например Mini360 или LM2596: он почти не греется, в отличие от линейного стабилизатора на плате.
Все GPIO работают с логикой 3,3 В: подавать на них 5 В нельзя. Для датчиков с выходом 5 В нужен преобразователь уровней или резистивный делитель.
Учебник по ESP32 DevKit: 13 уроков
Распиновка — это справочник, а научиться работать с платой проще на практике. Все уроки рассчитаны на эту плату и проверены на ядре ESP32 для Arduino версии 3.x:
- Подготовка Arduino IDE и драйвер — ядро ESP32, драйвер CH340, что делать с «Connecting…».
- Мигаем светодиодом — встроенный светодиод на GPIO2 и внешний через резистор.
- Монитор порта — сообщения на компьютер и команды плате.
- Кнопки и подтяжка — кнопка BOOT, дребезг и выводы только на вход.
- Сенсорная кнопка — touchRead() и выключатель без механики.
- Потенциометр и АЦП — почему с Wi-Fi работают только GPIO32–39.
- ШИМ: плавная яркость — ledcAttach() в ядре 3.x.
- ЦАП: плата говорит «Дуино» — воспроизводим записанный голос через GPIO25.
- Сканер Wi-Fi — сети вокруг и уровень сигнала.
- Веб-сервер — включаем светодиод с телефона.
- Часы из интернета — точное время по NTP и часовой пояс.
- Bluetooth: связь с телефоном — классический Bluetooth SPP, которого нет у S3 и C3.
- Глубокий сон — пробуждение по таймеру и от касания.
В каждом уроке — готовый скетч с кнопкой «Копировать», объяснение и схема платы с выделенными выводами. Для большинства уроков хватит самой платы, для остальных — светодиода, кнопки и потенциометра.
0 комментариев