Справочник платы
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 выпускают десятки видов: на 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 Uno | ESP32 |
|---|---|---|
| Частота | 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. На узком экране таблицу можно прокрутить вбок.
| Параметр | ESP32 | ESP32-S3 | ESP32-C3 | ESP32-C6 | ESP32-CAM |
|---|---|---|---|---|---|
| Для чего брать | Классический Bluetooth, ЦАП, больше всего уроков | Экран, камера, USB-клавиатура, много памяти | Маленький недорогой датчик или реле с Wi-Fi | Zigbee и Thread для умного дома | Камера за небольшие деньги |
| Ходовая плата | DevKit V1 на 30 контактов | DevKitC-1 и копии с модулем N16R8 | Super Mini | Super Mini, DevKitC-1, XIAO | AI-Thinker с подставкой MB |
| Процессор | 2 ядра по 240 МГц | 2 ядра по 240 МГц | 1 ядро, 160 МГц | 1 ядро, 160 МГц | Как у ESP32 |
| Оперативная память | 520 КБ | 512 КБ и 8 МБ PSRAM у N16R8 | 400 КБ, PSRAM не бывает | 512 КБ, PSRAM не бывает | 520 КБ и 4 МБ PSRAM |
| Wi-Fi | 2,4 ГГц | 2,4 ГГц | 2,4 ГГц | Wi-Fi 6, тоже 2,4 ГГц | 2,4 ГГц |
| Bluetooth | Классический и BLE | Только BLE | Только BLE | Только BLE | Классический и BLE |
| Zigbee и Thread | Нет | Нет | Нет | Есть | Нет |
| USB | Через микросхему-переходник, нужен драйвер | Два разъёма: родной и через переходник | Родной, драйвер не нужен | Родной; у DevKitC-1 есть второй, через переходник | Разъёма нет: прошивают через подставку или переходник |
| Выводов на плате | До 25 | 36, у N16R8 три из них заняты памятью | 13 | 17 на гребёнках Super Mini | От 0 до 6: остальные заняты камерой и картой |
| ЦАП и сенсорные входы | ЦАП на 25 и 26, сенсорные есть | Сенсорные есть, ЦАП нет | Нет ни того, ни другого | Нет ни того, ни другого | ЦАП нет: 25 и 26 заняты камерой. Сенсорные — на выводах карты, если она не нужна |
| Пункт в меню | DOIT ESP32 DEVKIT V1 | ESP32S3 Dev Module, PSRAM: OPI PSRAM | Nologo ESP32C3 Super Mini | Super Mini — MakerGO ESP32 C6 SuperMini, DevKitC-1 — ESP32C6 Dev Module, XIAO — XIAO_ESP32C6 | AI Thinker ESP32-CAM |
| Где спотыкаются | 5 В на входах, выводы 6–11 | Не тот разъём USB, выключенная PSRAM | Монитор молчит под чужим пунктом меню, слабый Wi-Fi у части партий | Монитор молчит, пока не включён USB CDC On Boot | Просадка питания (Brownout), прошивка через подставку |
| Подробно | Распиновка выше | ESP32-S3 N16R8 | ESP32-C3 Super Mini | ESP32-C6 и Zigbee | ESP32-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, надпись стоит прямо на чипе. Нажмите на похожую надпись — схема разберёт её по частям:
Если надпись стёрта или её не разглядеть, загрузите в плату любой скетч и посмотрите в окно вывода. Программа загрузки сама называет чип строкой вида 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 |
USBHIDKeyboard | S2 и 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_BUILTIN | DOIT 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 — те же 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 из менеджера плат — и через десять минут плата напечатает список сетей вокруг. Дома — бесплатно навсегда.
