Справочник платы

ESP32 и Arduino: плата с Wi-Fi на языке скетчей

ESP32 программируется как обычная Arduino: те же setup() и loop(), тот же digitalWrite, только у платы два ядра по 240 МГц, Wi-Fi и Bluetooth. Здесь распиновка платы DevKit с выводами, которые лучше не трогать, отличия от Uno, что делать, если прошивка повисла на Connecting, и первая программа. А если на плате написано S3, C3 или C6 либо плата ещё не куплена, загляните в сравнение всех моделей в одной таблице.

Что это за плата

При чём тут Arduino, если чип — Espressif

ESP32 — микроконтроллер компании Espressif, и формально к Arduino он отношения не имеет. Но для него написана поддержка языка Arduino, так что скетчи, библиотеки и привычки переносятся почти без изменений: с Uno пересаживаются за вечер. А встроенный Wi-Fi сделал ESP32 самой частой платой в самодельном умном доме, метеостанциях и везде, где нужна сеть.

Технические характеристики ESP32

ЧипESP32 (Xtensa LX6): два ядра до 240 МГц
Память520 КБ оперативной; флеш-память модуля — обычно 4 МБ
Беспроводная связьWi-Fi 2,4 ГГц (802.11 b/g/n) + Bluetooth 4.2 и BLE
Рабочее напряжение3,3 В — пятивольтовые сигналы на входы нельзя
Питание платы5 В по micro-USB или на VIN. До 9 В на VIN можно, но стабилизатор будет горячим; 12 В — только через понижающий модуль
GPIOдо 25 на 30-контактной плате; ШИМ — почти на любом выводе
АЦП12 бит: значения 0–4095 (у классических Arduino — 0–1023)
ЦАП2 канала — выводы 25 и 26: настоящий аналоговый выход
Сенсорные входыдо 9 ёмкостных (реагируют на касание)
Интерфейсы3×UART, I²C (21/22), SPI (18/19/23/5)
USBчерез микросхему-переходник CP2102, CH340 или CH9102 — нужен драйвер
Форматы платDevKit на 30 и 38 контактов и десятки вариантов

Главное отличие от классики, о котором забывают чаще всего: логика здесь 3,3-вольтовая. Питать плату по USB можно как обычно, но подавать 5 В на входы нельзя — датчики берите с логикой 3,3 В или ставьте делитель напряжения из двух резисторов.

Распиновка ESP32 DevKit: схема выводов

Схема подходит обычной ESP32 — той, у которой на жестяной крышке модуля написано ESP32-WROOM-32, с буквой на конце или без. Если там ESP32-S3, ESP32-C3 или ESP32-C6, выводы у платы другие: сначала посмотрите, какая ESP32 у вас.

Ниже — самая распространённая учебная плата ESP32 DevKit V1 на 30 контактов, вид сверху: антенна Wi-Fi вверху, micro-USB и кнопки внизу. Наведите на категорию в легенде — её выводы подсветятся. У ESP32, в отличие от Uno и Nano, не все выводы одинаково свободны — зелёные умеют только слушать, а оранжевые не любят нагрузку в момент включения.

Распиновка ESP32 DevKit V1 — схема выводовESP32-WROOMESP32 DEVKITLEDENBOOTUSBENVP·36VN·3934353233252627141213GNDVIN23221·TX03·RX021GND1918517·TX216·RX242153V3

Плат ESP32 выпускают десятки видов: на 30, 36 и 38 контактов, с разными разъёмами USB. Номера GPIO у них одинаковые, а порядок на гребёнках бывает разным, так что сверяйтесь с надписями на своей плате. У плат на модуле WROVER выводы 16 и 17 заняты памятью PSRAM.

Распиновки плат на других чипах семейства — на их страницах: распиновка ESP32-C3 Super Mini, ESP32-S3 с модулем N16R8 и ESP32-C6 с Zigbee. Плата ESP32-CAM с камерой собрана на том же чипе, что и DevKit, но почти все её выводы заняты камерой и картой памяти.

Какие выводы можно занимать, а какие — нет

Шпаргалка, которая экономит больше всего нервов при переходе с классических Arduino:

ВыводыСтатусПочему
36 (VP), 39 (VN), 34, 35Только входНет выходного каскада и внутренних подтяжек: годятся под датчики и аналоговые входы
32, 33СвободноВход и выход; аналоговый вход работает и при включённом Wi-Fi
25, 26СвободноЕдинственные выводы с настоящим аналоговым выходом (ЦАП)
2, 12, 15С осторожностьюУчаствуют в выборе режима загрузки: лишняя нагрузка на них мешает старту; 12 не подтягивать к плюсу
1 (TX0), 3 (RX0)Лучше не заниматьКанал прошивки и монитора порта — подключённый модуль оборвёт загрузку
6–11НельзяОбслуживают флеш-память; на 30-контактных платах их и не выводят

Ещё две тонкости. Во-первых, при включённом Wi-Fi команда analogRead работает только на выводах 32–39: они подключены к первому блоку АЦП (ADC1). Второй блок на время работы сети занят радио. Во-вторых, встроенный светодиод на DevKit висит на выводе 2 — удобно для первых опытов, но помните, что этот же вывод участвует в загрузке.

Шины по умолчанию

  • I²C — SDA на выводе 21, SCL на выводе 22: сюда подключаются дисплеи и большинство датчиков (как работает шина I²C).
  • SPI — MOSI 23, MISO 19, SCK 18, CS 5: для карт памяти и быстрых дисплеев.
  • UART2 — TX 17, RX 16: свободный последовательный порт для GPS, модемов и других плат. На модулях WROVER эти выводы заняты памятью PSRAM.

Как настроить среду для ESP32

Поддержка ESP32 ставится одним пакетом из менеджера плат. В Trema IDE пакет приезжает с российского зеркала за пару минут — без VPN и ручной правки ссылок, которые нужны в классической Arduino IDE. Пошаговая инструкция с экранами — в гайде «ESP32 в Trema IDE». Для платы DevKit V1 в меню выбирайте «DOIT ESP32 DEVKIT V1» — почему не «ESP32 Dev Module», сказано ниже, в разделе про меню плат. Если плата не появилась в списке портов, поставьте драйвер CP2102, CH340 или CH9102.

«Connecting......»: что делать, если прошивка зависла

На этом спотыкаются почти все, кто прошивает ESP32 впервые. Если в консоли после слова Connecting бегут точки, плата не вошла в режим загрузки. Зажмите на плате кнопку BOOT на пару секунд, и прошивка продолжится. На упрямых платах зажмите BOOT ещё до начала загрузки и отпустите, когда она пошла. Плата при этом исправна: так ведёт себя схема автозапуска на дешёвых платах. Другие причины и лечение — в статье «ESP32 не прошивается».

Первая программа: сканер Wi-Fi вместо маячка

Мигать светодиодом ESP32 тоже умеет (он на выводе 2), но для первого раза интереснее то, чего Uno не может: список сетей Wi-Fi вокруг. Скетч ищет их по кругу, с паузой в пять секунд, и печатает имена в монитор порта:

#include <WiFi.h>                  // встроена в пакет ESP32

void setup() {
  Serial.begin(115200);            // монитор порта: скорость 115200
  WiFi.mode(WIFI_STA);             // режим клиента Wi-Fi
}

void loop() {
  int count = WiFi.scanNetworks(); // ищем сети вокруг
  Serial.print("Сетей найдено: ");
  Serial.println(count);
  for (int i = 0; i < count; i++) {
    Serial.println(WiFi.SSID(i));  // имя каждой сети
  }
  delay(5000);                     // повторяем каждые пять секунд
}

Скорость 115200 у ESP32 стандартная. Если в мониторе порта вместо текста «кракозябры», значит, скорость в мониторе не совпадает с той, что в скетче: разбор этой ошибки.

Что делать дальше со связью — разобрано отдельно: как плата подключается к сети (и почему иногда не подключается), страница управления в браузере, умный дом через MQTT и прошивка по воздуху.

ESP32 или классическая Arduino?

Если выбираете между ESP32 и привычной Uno, вот главное:

ПараметрArduino UnoESP32
Частота16 МГц, одно ядроДо 240 МГц, два ядра
Оперативная память2 КБ520 КБ
Wi-Fi и BluetoothНетВстроены
Логика выводов5 В3,3 В
АЦП10 бит (0–1023)12 бит (0–4095)
ШИМ6 выводовПочти любой вывод
Уроки и учебникиМоре — стандарт школМного, но меньше
Цена клонаСравнимаСравнима

Простое правило выбора: учиться основам удобнее на Uno или Nano — пятивольтовая логика прощает больше ошибок, а уроков под них море. Как только в проекте появляется слово «интернет», «телефон» или «умный дом», берите ESP32 — какую именно, разобрано ниже. Если плата нужна для первых уроков, загляните в какую плату купить новичку и все платы Arduino в одной таблице.

Какую ESP32 выбрать: сравнение моделей

Словом ESP32 называют две разные вещи. Это первый чип Espressif с Wi-Fi и Bluetooth — тот, которому посвящена эта страница. И это всё семейство, выросшее вокруг него: S2, S3, C3, C6, H2, C5 и P4. В Arduino IDE их поддерживает один пакет ESP32, и скетчи для них пишутся одинаково. А вот умеют чипы разное, и скетч с одной платы не всегда соберётся на другой.

Если коротко:

  • Учиться и повторять уроки — обычная ESP32 на плате DevKit. Под неё больше всего готовых скетчей, а классический Bluetooth из всех плат таблицы ниже есть только у неё и у ESP32-CAM: там тот же чип.
  • Датчик или реле с Wi-Fi на крошечной плате — ESP32-C3 Super Mini.
  • Экран с картинками, камера, голос, USB-клавиатура — ESP32-S3 с модулем N16R8: два ядра и 8 МБ дополнительной памяти PSRAM.
  • Умный дом на Zigbee — ESP32-C6: у неё есть радио, на котором работают фабричные датчики и лампы.
  • Камера подешевле — ESP32-CAM: та же обычная ESP32, только с камерой и слотом для карты памяти.

Таблица сравнения ESP32, S3, C3, C6 и ESP32-CAM

В столбцах — чипы на тех платах, которые покупают чаще всего. Характеристики взяты из паспортов Espressif, пункты меню — из пакета ESP32 3.3.12. На узком экране таблицу можно прокрутить вбок.

ПараметрESP32ESP32-S3ESP32-C3ESP32-C6ESP32-CAM
Для чего братьКлассический Bluetooth, ЦАП, больше всего уроковЭкран, камера, USB-клавиатура, много памятиМаленький недорогой датчик или реле с Wi-FiZigbee и Thread для умного домаКамера за небольшие деньги
Ходовая платаDevKit V1 на 30 контактовDevKitC-1 и копии с модулем N16R8Super MiniSuper Mini, DevKitC-1, XIAOAI-Thinker с подставкой MB
Процессор2 ядра по 240 МГц2 ядра по 240 МГц1 ядро, 160 МГц1 ядро, 160 МГцКак у ESP32
Оперативная память520 КБ512 КБ и 8 МБ PSRAM у N16R8400 КБ, PSRAM не бывает512 КБ, PSRAM не бывает520 КБ и 4 МБ PSRAM
Wi-Fi2,4 ГГц2,4 ГГц2,4 ГГцWi-Fi 6, тоже 2,4 ГГц2,4 ГГц
BluetoothКлассический и BLEТолько BLEТолько BLEТолько BLEКлассический и BLE
Zigbee и ThreadНетНетНетЕстьНет
USBЧерез микросхему-переходник, нужен драйверДва разъёма: родной и через переходникРодной, драйвер не нуженРодной; у DevKitC-1 есть второй, через переходникРазъёма нет: прошивают через подставку или переходник
Выводов на платеДо 2536, у N16R8 три из них заняты памятью1317 на гребёнках Super MiniОт 0 до 6: остальные заняты камерой и картой
ЦАП и сенсорные входыЦАП на 25 и 26, сенсорные естьСенсорные есть, ЦАП нетНет ни того, ни другогоНет ни того, ни другогоЦАП нет: 25 и 26 заняты камерой. Сенсорные — на выводах карты, если она не нужна
Пункт в менюDOIT ESP32 DEVKIT V1ESP32S3 Dev Module, PSRAM: OPI PSRAMNologo ESP32C3 Super MiniSuper Mini — MakerGO ESP32 C6 SuperMini, DevKitC-1 — ESP32C6 Dev Module, XIAO — XIAO_ESP32C6AI Thinker ESP32-CAM
Где спотыкаются5 В на входах, выводы 6–11Не тот разъём USB, выключенная PSRAMМонитор молчит под чужим пунктом меню, слабый Wi-Fi у части партийМонитор молчит, пока не включён USB CDC On BootПросадка питания (Brownout), прошивка через подставку
ПодробноРаспиновка вышеESP32-S3 N16R8ESP32-C3 Super MiniESP32-C6 и ZigbeeESP32-CAM

С ESP8266 таблица не сравнивает: это другой чип и другой пакет для Arduino IDE. Она проще и дешевле, а чем ESP8266 отличается от ESP32, разобрано на отдельной странице.

ESP32-S3 или C3

Эти две платы сравнивают чаще всего, хотя они разного класса. У S3 два ядра по 240 МГц, а у ходовой платы N16R8 ещё 8 МБ дополнительной памяти PSRAM: она нужна экранам с картинками и камере. Родной USB у S3 умеет притвориться клавиатурой или флешкой. У C3 одно ядро на 160 МГц и никакой PSRAM, зато Super Mini размером 22,5 на 18 мм и заметно дешевле. Wi-Fi и Bluetooth LE у них одинаковые. Датчику или реле с Wi-Fi хватит C3, экрану и камере нужна S3. Как подключать S3 и почему у неё два разъёма, рассказано в статье ESP32-S3 N16R8: настройки и два USB.

ESP32-C3 или C6

Платы Super Mini на этих чипах внешне почти не отличить, и ядро у них того же типа: одно RISC-V на 160 МГц. Разница в радио. У C6 есть Zigbee и Thread, на которых работают фабричные датчики умного дома, и Wi-Fi 6 — правда, тоже только в диапазоне 2,4 ГГц. Памяти у C6 больше: 512 КБ против 400. Если устройство будет жить в обычной сети Wi-Fi, разница почти незаметна. Если нужен Zigbee, из этих двух подойдёт только C6. Как собрать на ней Zigbee-устройство без хаба, рассказано в отдельной статье. А между S3 и C6 выбирают по задаче: S3 — для тяжёлой графики и камеры, C6 — для умного дома.

Обычная ESP32 или новые S3 и C3

Обычную ESP32 рано списывать. Только у неё есть классический Bluetooth. С ним плата говорит с модулем HC-05 и с телефоном на Android через библиотеку BluetoothSerial и может слать звук в Bluetooth-колонку. С iPhone так не выйдет: там обычным приложениям доступен только Bluetooth LE. ЦАП, настоящий аналоговый выход, тоже есть только у обычной ESP32 и у S2. И под обычную ESP32 написано больше всего уроков. Новые чипы берут ради другого: USB прямо в чипе (переходник и драйвер не нужны), Bluetooth LE 5 вместо 4.2, PSRAM у S3 и Zigbee у C6.

Чип, модуль и плата: что значат WROOM, WROVER и DevKit

Когда говорят «ESP32», имеют в виду одно из трёх: чип, модуль или плату. Чип — квадратная микросхема, то, что делает Espressif. Модуль — маленькая плата, на которой чип и флеш-память спрятаны под жестяную крышку, а рядом медной дорожкой проложена антенна. Название модуля и написано на крышке: ESP32-WROOM-32E или ESP32-S3-WROOM-1. А покупаем мы плату: модуль, разъём USB, кнопки, стабилизатор питания и две гребёнки выводов. DevKit и NodeMCU — названия таких плат. У маленьких плат вроде Super Mini модуля нет: чип с флеш-памятью внутри стоит прямо на плате. Так что вопрос «ESP32 или ESP32-WROOM» не стоит: модуль WROOM-32 и есть обычная ESP32.

У модулей обычной ESP32 несколько поколений. WROOM-32, WROOM-32D и WROOM-32U старые, для новых устройств Espressif их не рекомендует, но работают они так же, и пункт меню у них тот же. Буква U значит, что вместо антенны-дорожки стоит разъём для внешней антенны. WROOM-32E и WROOM-32UE — свежие, с чипом третьей ревизии, в которой исправлены ошибки первых партий. WROVER — модуль подлиннее, в котором кроме флеш-памяти стоит PSRAM, обычно на 8 МБ. Напрямую обычная ESP32 видит из неё только 4 МБ, а выводы 16 и 17 у WROVER заняты этой памятью. Пакет ESP32 находит PSRAM сам, но в меню для WROVER ставят PSRAM: Enabled — так сборка учитывает ошибку кэша старых ревизий чипа, а библиотеки вроде камеры знают, что память есть.

Как узнать, какая ESP32 у вас

Первым делом прочитайте надпись на жестяной крышке модуля. Если крышки нет, как у Super Mini, надпись стоит прямо на чипе. Нажмите на похожую надпись — схема разберёт её по частям:

ESP32-WROOM-32E-N4ESP32Обычная ESP32: два ядра, Wi-Fi и классический Bluetooth-WROOM-32Модуль: чип и флеш-память под жестяной крышкой, рядомантенна-дорожка на плате модуляEВнутри чип третьей ревизии: в ней исправлены ошибки первыхпартий. WROOM-32UE — то же, но вместо антенны-дорожки разъёмдля внешней антенны-N4Код заказа: 4 МБ флеш-памяти. Бывают N8 и N16, а H4 и H8 — тоже для жары до 105 °CГде искатьНа крышке модуля — самой большой серебристой детали платыDevKit. Код заказа, если его там нет, ищите в объявлении илина упаковкеПункт в меню плат«DOIT ESP32 DEVKIT V1» для плат DevKit V1 или «ESP32 DevModule»Обычная ESP32 — ей посвящена эта страница
Буквы в имени расшифрованы по паспортам Espressif, пункты меню — как в пакете ESP32 3.3.12. Дальше — распиновка ESP32 DevKit.

Если надпись стёрта или её не разглядеть, загрузите в плату любой скетч и посмотрите в окно вывода. Программа загрузки сама называет чип строкой вида Chip type: ESP32-C3 (QFN32) (revision v0.4). А если в меню выбрана плата на другом чипе, загрузка остановится с подсказкой: This chip is ESP32-C3, not ESP32. Это значит, что выбран пункт для обычной ESP32, а на плате C3.

Ещё нагляднее — скетч, который расспрашивает сам чип и печатает ответ в монитор порта: модель, число ядер, объём памяти и какое у чипа радио. Строки про Wi-Fi 6, 5 ГГц и USB он берёт из выбранного пункта меню, остальное читает с чипа при запуске.

// Какая ESP32 на плате: модель, ядра, память, радио и USB.
// Подходит к любой плате семейства в пакете ESP32 версии 3.
// Монитор порта пустой? Если кабель в разъёме, который идёт прямо в чип
// (Super Mini на C3 и C6, разъём USB у S3), включите
// Инструменты -> USB CDC On Boot -> Enabled и загрузите заново.
// Для разъёма COM у S3 этот пункт, наоборот, Disabled.

#include <esp_chip_info.h>

void printHas(const char *name, bool has) {
  Serial.print(name);
  Serial.println(has ? "есть" : "нет");
}

void printInfo() {
  esp_chip_info_t info;
  esp_chip_info(&info);               // что умеет этот чип

  Serial.println();
  Serial.print("Чип: ");
  Serial.println(ESP.getChipModel());

  uint16_t rev = ESP.getChipRevision();  // 301 значит v3.1
  Serial.print("Ревизия: v");
  Serial.print(rev / 100);
  Serial.print(".");
  Serial.println(rev % 100);

  Serial.print("Ядер: ");
  Serial.print(ESP.getChipCores());
  Serial.print(", частота ");
  Serial.print(ESP.getCpuFreqMHz());
  Serial.println(" МГц");

  Serial.print("Флеш-память: ");
  Serial.print(ESP.getFlashChipSize() / (1024 * 1024));
  Serial.println(" МБ");

  // 0, если PSRAM нет. Если есть, число чуть меньше 4096 или 8192:
  // часть памяти занята служебными данными
  Serial.print("PSRAM: ");
  Serial.print(ESP.getPsramSize() / 1024);
  Serial.println(" КБ");

  printHas("Wi-Fi: ", info.features & CHIP_FEATURE_WIFI_BGN);
#if SOC_WIFI_HE_SUPPORT
  Serial.println("Wi-Fi 6: есть");
#endif
#if SOC_WIFI_SUPPORT_5G
  Serial.println("Wi-Fi 5 ГГц: есть");
#endif
  printHas("Классический Bluetooth: ", info.features & CHIP_FEATURE_BT);
  printHas("Bluetooth LE: ", info.features & CHIP_FEATURE_BLE);
  printHas("Zigbee и Thread: ", info.features & CHIP_FEATURE_IEEE802154);
#if CONFIG_ESP_HOSTED_ENABLED
  Serial.println("Wi-Fi и Bluetooth через второй чип на плате");
#endif

  Serial.print("USB: ");
#if SOC_USB_OTG_SUPPORTED
  Serial.println("в чипе, может быть клавиатурой (у S3 - с USB Mode: USB-OTG)");
#elif SOC_USB_SERIAL_JTAG_SUPPORTED
  Serial.println("в чипе, только порт и прошивка");
#else
  Serial.println("через микросхему-переходник на плате");
#endif
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  printInfo();                        // повторяем: монитор успеет подключиться
  delay(10000);
}

Скетч проверен сборкой на всех пяти платах из таблицы, с теми пунктами меню, что в ней указаны. Печатает он раз в десять секунд: у плат с родным USB монитор порта подключается не сразу после загрузки. PSRAM у S3 скетч покажет нулём, если она выключена в меню или выбран не тот её тип, — удобная проверка настроек N16R8. У обычной ESP32 с модулем WROVER будет около 4 МБ.

Что выбрать в меню плат Arduino IDE

Пункт меню отвечает за три вещи: под какой чип собирается программа, какие выводы стоят за именами вроде LED_BUILTIN и SDA и куда пойдёт Serial. Ошибку с чипом вы заметите сразу: загрузка просто не начнётся. А вот с выводами и монитором порта ошибка тихая: всё загрузилось, а светодиод не мигает и монитор молчит. Поэтому для ходовых плат в таблице выше стоит конкретный пункт, а не «Dev Module» для всех.

С обычной ESP32 чаще всего не собирается пример Blink: под «ESP32 Dev Module» сборка падает с ошибкой 'LED_BUILTIN' was not declared in this scope, потому что у разных плат светодиод на разных выводах. Выберите «DOIT ESP32 DEVKIT V1» или «NodeMCU-32S»: у обоих LED_BUILTIN — вывод 2. У плат на S3, C3 и C6 своя беда: Serial уходит не в тот USB. Если кабель в разъёме, который идёт прямо в чип, а USB CDC On Boot выключен, монитор порта молчит. У S3 с двумя разъёмами для разъёма COM этот пункт, наоборот, выключают. Подробности — в статьях почему у C3 молчит монитор порта и к какому из двух USB подключать ESP32-S3.

Что перестанет работать при переходе с обычной ESP32

Большинство скетчей переносятся между чипами без правок: digitalWrite, Wi-Fi, датчики по I²C. Но то, что завязано на особое железо, на другой ESP32 не соберётся. Ниже — что встречается в уроках чаще всего. Ошибки сняты настоящими сборками в пакете ESP32 3.3.12.

В скетчеГде работаетОшибка на другихЧто делать
BluetoothSerialОбычная ESP32 и ESP32-CAM'BluetoothSerial' does not name a typeНа S3, C3 и C6 — Bluetooth LE: библиотека BLE уже есть в пакете
dacWrite(25, 128)Обычная ESP32 (выводы 25 и 26) и S2, у которой ЦАП на 17 и 18: dacWrite(25, …) на S2 соберётся, но ничего не выдаст'dacWrite' was not declared in this scopeШИМ с фильтром из резистора и конденсатора или внешний ЦАП по I²C
touchRead(4)Обычная ESP32, S2 и S3. Но у S2 и S3 при касании число растёт, а у ESP32 падает'touchRead' was not declared in this scope — на C3 и C6На C3 и C6 — сенсорный модуль на TTP223 с обычным цифровым выходом. На S2 и S3 порог из урока подобрать заново
touchRead(T0)Из чипов таблицы — только обычная ESP32'T0' was not declared in this scope — на S2 и S3 имена начинаются с T1Писать номер вывода, а не имя T0
USBHIDKeyboardS2 и S3; у S3 нужен USB Mode «USB-OTG (TinyUSB)»'USBHIDKeyboard' does not name a typeПлата на S3 и кабель в её родной разъём USB
hallRead()Нигде: в пакете ESP32 версии 3 функции больше нет'hallRead' was not declared in this scopeВнешний модуль с датчиком Холла
LED_BUILTINDOIT ESP32 DEVKIT V1 и NodeMCU-32S — вывод 2; у Dev Module на S3, C3 и C6 — цветной светодиод'LED_BUILTIN' was not declared in this scope — под «ESP32 Dev Module» и «AI Thinker ESP32-CAM»На DevKit — выбрать «DOIT ESP32 DEVKIT V1», на ESP32-CAM — писать номер вывода: 33
analogRead() с включённым Wi-FiВыводы первого блока АЦП (ADC1): у обычной ESP32 это 32–39, у S3 — 1–10Ошибки нет: на выводах ADC2 у обычной ESP32 функция молча вернёт 0, у S3 — 65535Датчики, которые читаются при работающем Wi-Fi, — только на ADC1

Последняя строка коварнее остальных: сборка проходит, а датчик показывает 0 у обычной ESP32 или 65535 у S3. Второй блок АЦП (ADC2) занят радио, пока работает Wi-Fi, и analogRead об этом не сообщает. У C3 второй блок не работает вовсе, даже без Wi-Fi.

ESP32-S2, H2, C5 и P4 — коротко

  • ESP32-S2 — одно ядро на 240 МГц, Wi-Fi и родной USB, который умеет быть клавиатурой и флешкой. Bluetooth у S2 нет совсем. Есть ЦАП на выводах 17 и 18 и сенсорные входы. Ходовая плата — S2 Mini, в меню «LOLIN S2 Mini».
  • ESP32-H2 — без Wi-Fi: только Bluetooth LE и Zigbee с Thread, ядро на 96 МГц. Чип для батарейных датчиков. Скетч с библиотекой WiFi на нём не соберётся: 'WiFi' was not declared in this scope.
  • ESP32-C5 — единственный в семействе с Wi-Fi в диапазоне 5 ГГц: Wi-Fi 6 в обоих диапазонах, плюс Bluetooth LE, Zigbee и Thread, одно ядро на 240 МГц. В пакете ESP32 он есть с версии 3.3.0, плат пока десять.
  • ESP32-P4 — самый быстрый: два ядра до 400 МГц, для больших экранов и камер. Своего радио у него нет. На большинстве плат с P4 рядом стоит ESP32-C6 со своей прошивкой, и Wi-Fi с Bluetooth работают через неё. Нет второго чипа — нет и беспроводной связи.

В пакете ESP32 3.3.12 есть ещё пункты ESP32-C2 и ESP32-C61, но они скрыты: библиотек для этих чипов в пакет не положили, и из Arduino IDE их не собрать.

Что собирают на ESP32

  • Метеостанция с веб-страницей — датчики меряют, плата раздаёт результаты прямо в браузер телефона.
  • Умные розетки и свет — управление реле по Wi-Fi из дома или дачи.
  • Датчики с уведомлениями — протечка, открытая дверь, температура теплицы: плата сама шлёт сообщение.
  • Bluetooth-проекты — пульты, датчики и обмен данными с телефоном без всякой сети.
  • Обычная автоматика — и без сети: ESP32 быстрее Uno, памяти у неё в сотни раз больше, а ШИМ есть почти на любом выводе.

Чем программировать

ESP32 + Trema IDE: русская среда для этой платы

Классическая Arduino IDE требует вписывать ссылку на пакет ESP32 руками, а из России её серверы работают с перебоями — вплоть до отказа 403 при обновлении списков (что это и как обойти). В Trema IDE пакет ставится из обычного менеджера плат, среда говорит по-русски, а ошибки сборки объясняются карточками с переходом к строке. Скетчи при этом остаются обычными файлами .ino — совместимость с классикой полная. Чем ещё отличаемся — на странице «Arduino IDE на русском».

  • Пакет ESP32 ставится с российского зеркала за пару минут
  • Параметры платы и портов — по-русски
  • Ошибки сборки объясняются русскими карточками
  • Проекты сохраняются в облако — не потеряются

Вопросы

Частые вопросы про ESP32 и Arduino

Не нашли ответа? Спросите нас

Можно ли программировать ESP32 как Arduino?

Да, это самый популярный способ: на ESP32 работают язык и библиотеки Arduino — те же setup() и loop(), digitalWrite и Serial. Достаточно установить пакет поддержки ESP32 в среде разработки; скетчи пишутся так же, как для Uno или Nano.

Чем ESP32 отличается от Arduino Uno?

ESP32 на порядок мощнее: два ядра по 240 МГц против 16 МГц, в сотни раз больше памяти, встроенные Wi-Fi и Bluetooth. Но логика у неё 3,3 В, а не 5 В: пятивольтовые датчики напрямую подключать нельзя. Цена при этом сравнима с клоном Uno.

Почему прошивка ESP32 зависает на Connecting...?

Плата не вошла в режим загрузки. Когда в консоли появляются точки Connecting......, зажмите на плате кнопку BOOT на пару секунд — прошивка продолжится. На части плат помогает зажать BOOT до начала загрузки и отпустить после её старта.

Какой драйвер нужен для ESP32?

На обычных платах ESP32 стоит микросхема-переходник USB: CP2102 (квадратная, Silicon Labs), CH340 или CH9102. Драйвер для неё ставится один раз, после этого плата появляется в списке портов. Большинству плат на ESP32-S3, C3 и C6 с одним разъёмом драйвер не нужен: USB встроен в сам чип, и Windows 10 и 11 видят его сразу.

Можно ли подключать к ESP32 пятивольтовые датчики?

Питать датчик от вывода VIN или 5 В можно, а вот подавать 5-вольтовый сигнал на вход ESP32 нельзя — выводы рассчитаны на 3,3 В. Используйте датчики с логикой 3,3 В или делитель напряжения из двух резисторов на линии сигнала.

Работает ли ESP32 без Wi-Fi и интернета?

Да. Wi-Fi и Bluetooth включаются, только когда их вызывает скетч. Без них ESP32 — обычная быстрая плата: датчики, экран и моторы работают так же, а прошивка идёт по USB без всякой сети.

Какую ESP32 выбрать новичку?

Обычную ESP32 на плате DevKit V1 на 30 контактов: под неё больше всего уроков и готовых скетчей, есть классический Bluetooth, а распиновка разобрана на этой странице. ESP32-C3 Super Mini меньше и дешевле, но у неё 13 выводов и свои тонкости с пунктом меню. Для камеры берут ESP32-CAM, для Zigbee — ESP32-C6.

Что лучше: ESP32-S3 или ESP32-C3?

Зависит от задачи. У S3 два ядра по 240 МГц, дополнительная память PSRAM (у ходовой N16R8 — 8 МБ) и USB, который может стать клавиатурой, — её берут для экранов, камеры и голоса. У C3 одно ядро на 160 МГц и нет PSRAM, зато плата Super Mini крошечная и недорогая: для датчика или реле по Wi-Fi её хватает с запасом. Wi-Fi и Bluetooth LE у них одинаковые, классического Bluetooth нет ни у той, ни у другой.

Какая ESP32 поддерживает Zigbee и Matter?

Zigbee и Thread есть только у ESP32-C6, ESP32-H2 и ESP32-C5: для них нужно отдельное радио IEEE 802.15.4. У обычной ESP32, S3 и C3 его нет, и программно его не добавить. С Matter иначе: библиотека Matter из пакета ESP32 работает через Wi-Fi на всех чипах с Wi-Fi, а через Thread — на C6, H2 и C5. Программа с Matter не помещается в стандартную разметку памяти, в меню нужна «Huge APP». Чаще всего берут C6: у неё есть и Wi-Fi, и Zigbee, а в пакете лежат примеры лампы и выключателя.

Чем ESP32 отличается от ESP32-WROOM и WROVER?

ESP32 — это сам чип. ESP32-WROOM-32 — модуль: чип и флеш-память под жестяной крышкой, рядом антенна. WROVER — модуль подлиннее, в нём есть ещё PSRAM, обычно на 8 МБ, а выводы 16 и 17 заняты этой памятью. Плата DevKit — модуль плюс разъём USB, кнопки и гребёнки выводов. Программы для всех одинаковые; для WROVER в меню ставят PSRAM: Enabled.

Какую плату выбрать в Arduino IDE для ESP32-WROOM-32?

Для плат DevKit V1 — «DOIT ESP32 DEVKIT V1»: в нём светодиод на выводе 2 уже назван LED_BUILTIN. Подойдёт и «ESP32 Dev Module», но пример Blink под ним не соберётся: LED_BUILTIN в этом пункте не задан. Буква после 32 — D, E или U — на выбор пункта не влияет. Платам на S3, C3 и C6 нужны свои пункты, иначе загрузка остановится ошибкой «This chip is ESP32-C3, not ESP32».

Как узнать, какая у меня ESP32?

Прочитайте надпись на жестяной крышке модуля или на самом чипе: ESP32-WROOM-32E — обычная ESP32, ESP32-S3-WROOM-1 — S3, ESP32-C3 — C3. Если надпись не разобрать, загрузите любой скетч и найдите в окне вывода строку «Chip type:» — её печатает программа загрузки. А скетч из этой статьи покажет модель, память и радио прямо в мониторе порта.

Почему BluetoothSerial не работает на ESP32-S3, C3 и C6?

У этих чипов нет классического Bluetooth, только Bluetooth LE, поэтому сборка останавливается ошибкой «'BluetoothSerial' does not name a type». Классический Bluetooth, на котором работают HC-05, Bluetooth-колонки и BluetoothSerial, есть только у обычной ESP32 и ESP32-CAM. На S3, C3 и C6 с телефоном связываются через BLE: библиотека BLE уже есть в пакете, а на телефоне нужно приложение, которое умеет BLE. С iPhone, кстати, BluetoothSerial не работает и на обычной ESP32 — там доступен только BLE.

Что такое ESP32-P4 и есть ли у него Wi-Fi?

Это самый быстрый чип семейства: два ядра до 400 МГц, он рассчитан на большие экраны и камеры. Своего радио у него нет совсем. На большинстве плат с P4 рядом стоит второй чип, ESP32-C6, со своей прошивкой, и пакет ESP32 работает с Wi-Fi и Bluetooth через него. Если второго чипа на плате нет, нет и беспроводной связи. В Arduino IDE для P4 есть «ESP32P4 Dev Module» и ещё шесть плат.

Первая программа для ESP32

Скачайте Trema IDE, поставьте пакет ESP32 из менеджера плат — и через десять минут плата напечатает список сетей вокруг. Дома — бесплатно навсегда.