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

ESP32-S3 N16R8: распиновка, настройка Arduino IDE и PSRAM

Чаще всего под названием ESP32-S3 продают клон платы DevKitC-1 с модулем N16R8 и двумя разъёмами USB-C. Здесь — распиновка всех 44 контактов, к какому USB подключать кабель и что выставить в меню, чтобы заработали 16 МБ флеш-памяти и 8 МБ PSRAM. А ещё — почему не мигает светодиод на 48 и какие выводы лучше не трогать. Тексты ошибок приведены дословно: по ним удобно искать свою беду на странице.

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

ESP32-S3 DevKitC-1 и клоны N16R8

Плату ESP32-S3-DevKitC-1 выпускает Espressif: у оригинала два разъёма micro-USB и мост CP2102N, а модуль сейчас чаще всего N8R8. Платы DevKitC-1 с модулем N16R8 у Espressif нет, хотя сам модуль N16R8 она выпускает. Платы N16R8 с двумя USB-C — это клоны других фабрик: чаще всего YD-ESP32-S3 от VCC-GND Studio и её копии, свою версию делает и Waveshare. Раскладка 44 контактов у них та же, отличаются разъёмы, мост USB, светодиод и питание. Программируется S3 на языке Arduino: setup(), loop() и digitalWrite() работают так же, как на Uno.

Характеристики ESP32-S3 N16R8

ЧипESP32-S3: два ядра Xtensa LX7 до 240 МГц
МодульESP32-S3-WROOM-1; у N16R8 — 16 МБ флеш и 8 МБ PSRAM
Оперативная память512 КБ в чипе плюс 8 МБ PSRAM у N16R8
Wi-Fi802.11 b/g/n, только 2,4 ГГц
BluetoothBluetooth 5 (LE) и Mesh; классического Bluetooth нет
Выводы44 контакта; GPIO у модуля — 36, у N16R8 три из них заняты памятью
Аналоговые входы20 каналов, 12 бит; при Wi-Fi работают только 1–10
Сенсорные входы14, выводы 1–14
ШИМ8 каналов на любом выводе, плюс 2 блока для моторов (MCPWM)
Интерфейсы3 × UART, 2 × I²C, 2 × SPI для своих устройств, 2 × I²S для звука, CAN (TWAI, через внешний трансивер), камера и параллельный экран
USBдва разъёма: родной USB чипа и мост USB-UART
Логика3,3 В; на вход — не больше 3,6 В
Питание5 В по разъёмам USB (одному или обоим) или на вывод 5V; 3,0–3,6 В на вывод 3V3. Один способ за раз
КнопкиBOOT (вывод 0) и RESET
Светодиодцветной адресный: чаще всего на выводе 48 (клон, DevKitC-1 v1.0), у v1.1 — на 38

По скорости S3 обгоняет классическую ESP32: Espressif даёт ей 1330 баллов в тесте CoreMark на двух ядрах против 1080. Но главное у неё другое — PSRAM и родной USB. PSRAM — это дополнительная оперативная память: у N16R8 её 8 МБ при 512 КБ обычной. Она нужна там, где обычной памяти не хватает: кадры камеры, буфер экрана, звук, большие массивы. Родной USB позволяет плате самой стать клавиатурой или мышью.

Логика у платы 3,3-вольтовая. По паспорту чипа на вход нельзя подавать больше 3,6 В, поэтому сигнал от пятивольтовой Arduino или датчика подключают через делитель из двух резисторов или преобразователь уровней.

Документация Espressif, если нужны подробности:

Что значит N16R8, N8R8 и N8R2

Маркировка напечатана на металлическом экране модуля, например «ESP32-S3-WROOM-1 N16R8». Буква N и число — флеш-память в мегабайтах, R и число — PSRAM. Octal значит, что PSRAM подключена по восьми линиям, в меню это пункт «OPI PSRAM». Quad — по четырём, в меню «QSPI PSRAM». От маркировки зависит, что выставлять, поэтому прочитайте её до первой прошивки, а при покупке ищите её в названии товара и на фото экрана модуля:

МаркировкаФлешPSRAMЧто выбрать в пункте PSRAM
N16R816 МБ8 МБ, Octal«OPI PSRAM»; выводы 35–37 заняты
N8R8, N4R88 или 4 МБ8 МБ, Octal«OPI PSRAM»; выводы 35–37 заняты
N16R2, N8R2, N4R216, 8 или 4 МБ2 МБ, Quad«QSPI PSRAM»; выводы 35–37 свободны
N16, N8, N4, H416, 8 или 4 МБнет«Disabled»; 35–37 свободны, вывод 45 при включении не подключайте к плюсу. H4 рассчитан на жару до 105 °C
N16R16VA16 МБ16 МБ, Octal«OPI PSRAM»; 35–37 заняты, память на 1,8 В, и выводы 47 и 48 тоже на 1,8 В

Не путайте N16R8 с N16R8V, N32R8V и N32R16V: буква V на конце значит модуль ESP32-S3-WROOM-2. У него и флеш-память восьмилинейная, и память работает от 1,8 В, а в меню для него свой пункт — «ESP32S3 Dev Module Octal (WROOM2)». Его ставят, например, на официальную DevKitC-1 N32R16V. Выводы 47 и 48 у таких модулей тоже работают на 1,8 В: датчики на 3,3 В к ним напрямую не подключайте.

У модулей с восьмилинейной PSRAM есть ещё одно ограничение из паспорта: рабочая температура до 65 °C, а не до 85, как у большинства других модулей. Для комнаты это неважно, для корпуса на солнце — важно.

Распиновка ESP32-S3 DevKitC-1 и клона N16R8

Плата нарисована деталями вверх, антенной к верхнему краю, как на официальной картинке Espressif. Слева гребёнка J1, справа J3, по 22 контакта. Переключатель сверху меняет плату: у клона и у двух ревизий Espressif раскладка одна, но светодиод, разъёмы и мост USB разные. Наведите на категорию в легенде, чтобы подсветить её выводы, и нажмите на неё, чтобы прочитать пояснение.

Распиновка ESP32-S3 DevKitC-1 и клона N16R8 — схема выводовESP32-S3WROOM-1N16R83,3 ВRGBCH343PBOOT · 0RESETCOMмостUSBродной3V33V3RST456715161718SDA · 8346SCL · 9SS · 10MOSI · 11SCK · 12MISO · 13145VGG43 · TX44 · RX1242414039383736350 · BOOT4548 · RGB472120 · USB D+19 · USB D−GG

Массовый клон: два разъёма USB-C, мост USB-UART — обычно CH343P, цветной светодиод WS2812 на выводе 48. Светодиод подключён через перемычку RGB — на многих платах её нужно запаять. Подписи разъёмов (COM или UART, USB или OTG) и то, какой из них слева, у разных фабрик бывают разными — сверяйтесь с надписью на своей плате.

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

ВыводыСтатусПочему
1–10СвободноЛучшие выводы: цифровые, ШИМ, сенсорные и аналоговые, которые работают и при Wi-Fi
11–18СвободноЦифровые и ШИМ, 11–14 ещё и сенсорные. Аналоговые, но только пока Wi-Fi выключен. 11–13 — SPI по умолчанию
21, 39–42, 47СвободноОбычные выводы. 39–42 — ещё и выводы для отладчика (JTAG), без него они обычные. У модулей с буквой V (N16R16VA, WROOM-2) вывод 47 работает на 1,8 В
38 или 48Свободно, кроме одногоНа одном из них цветной светодиод: чаще всего на 48 (клон и v1.0), у v1.1 — на 38
0, 3, 45, 46С осторожностьюПины запуска: при включении к ним не должно быть подключено ничего, что держит их в 0 или в 1, — кнопка, датчик с резистором. 0 — кнопка BOOT
43, 44Лучше не заниматьUART0 и мост разъёма COM: займёте — пропадёт монитор порта через этот разъём
19, 20Лучше не заниматьЛинии родного USB: займёте — пропадёт порт на разъёме USB
35, 36, 37Нельзя на модулях R8Соединены с PSRAM внутри модуля, хоть и выведены на гребёнку: у N16R8, N8R8, N4R8, N16R16VA и у модулей WROOM-2
22–34Их нет на гребёнке22–25 у чипа нет вовсе, 26–32 заняты флеш-памятью и PSRAM внутри модуля, 33 и 34 модуль наружу не выводит

Чаще всего обжигаются на выводах 35, 36 и 37. Они есть на гребёнке, на многих картинках из интернета их рисуют свободными и даже советуют под SPI. Но у модулей с восьмилинейной PSRAM (N16R8, N8R8, N4R8) эти три линии внутри модуля соединены с PSRAM. Подключите к ним что-нибудь — и плата начнёт сбоить или перестанет запускаться.

Пины запуска важны только в момент включения и сброса. 0 — кнопка BOOT: если что-то держит его в нуле, плата уходит в режим прошивки. 46 при включении не подключайте к плюсу: вместе с 0 он выбирает режим запуска. 45 опасен только для модулей без PSRAM: если при включении он подключён к плюсу, флеш-память получает 1,8 В вместо 3,3, и модуль не запускается. У N16R8 это напряжение задано при производстве, и 45 на него не влияет.

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

  • I²C — SDA на выводе 8, SCL на выводе 9. У S3 две шины I²C, и обе можно перенести на любые свободные выводы командой Wire.begin(sda, scl). Подробнее — в статье про I²C.
  • SPI — SS 10, MOSI 11, SCK 12, MISO 13: для карт памяти и дисплеев. Не путайте с выводами 35–37 из чужих схем.
  • UART — у S3 три аппаратных порта. UART0 на выводах 43 и 44 занят мостом разъёма COM, а Serial1 и Serial2 можно вывести на любые свободные выводы: Serial1.begin(9600, SERIAL_8N1, 17, 18); — приём на 17, передача на 18. Подробнее — про UART.
  • Аналоговые и сенсорные входы — аналоговые 1–10 работают всегда, 11–20 — только пока выключен Wi-Fi. Сенсорные — выводы 1–14. Подробности и скетч — ниже.

Зачем ESP32-S3 два USB и к какому подключать кабель

Простое правило: начинайте с разъёма COM и параметра USB CDC On Boot по умолчанию (Disabled) — так монитор порта работает сразу. Родной разъём USB пригодится для клавиатуры и мыши, а на платах, где разъём только один, иначе и не получится.

Разъём COM (на некоторых платах UART) ведёт к мосту USB-UART. Это микросхема-переходник, которая превращает USB в обычный последовательный порт, как CH340 на Arduino Nano. На клоне это обычно CH343P — название напечатано на микросхеме рядом с разъёмом, на плате Espressif — CP2102N. Мост соединён с портом UART0, как у классической ESP32; у S3 это выводы 43 и 44. Второй разъём подписан USB или OTG. Это родной USB самого чипа на выводах 19 и 20. Через него тоже можно прошивать, плата может притвориться клавиатурой или мышью и даже сама подключать USB-устройства. Только питание им плата Espressif не выдаёт, а клон — лишь с запаянной перемычкой USB-OTG (подробнее — в разделе про питание).

Прошить плату можно через любой разъём. Но монитор порта заработает, только если параметр USB CDC On Boot совпадает с разъёмом. Этот параметр решает, куда пойдёт Serial: Disabled — в разъём COM, Enabled — в разъём USB. Переключайте варианты:

Кабель в разъёме COM (мост), USB CDC On Boot: DisabledМонитор портаРаботает: Serial пишет в UART0, а он соединён с мостомэтого разъёмаЗагрузка программыРаботает: мост сам переводит плату в режим прошивкиЧто видит компьютерПорт моста USB-UART: обычно CH343P на клоне, CP2102N наплате EspressifТак всё работает сразу, без настроек
Куда пойдёт Serial, решает один параметр, и он должен совпадать с разъёмом, к которому подключён кабель. Так ведёт себя пакет ESP32 3.3.12 с пунктом USB Mode по умолчанию — «Hardware CDC and JTAG».

Драйвер. Родной USB Windows 10 и 11 узнают сами: это стандартный последовательный порт. Мост CH343P они обычно тоже узнают сами. Если порт разъёма COM так и не появился в Диспетчере устройств, поставьте драйвер CH343 с сайта производителя WCH. На плате Espressif мост CP2102N: если его порт не появился, поставьте драйвер CP210x с сайта Silicon Labs. Если подключены оба кабеля, порты различают по свойствам: у родного USB в «ИД оборудования» есть VID_303A, у CH343P — VID_1A86. Жёлтый значок у «USB JTAG/serial debug unit» — это интерфейс отладки, для загрузки и монитора порта он не нужен. Если не появился ни один порт, скорее всего, кабель только заряжает и не передаёт данные. Как это проверить — в статье про драйверы и кабели.

ESP32S3 Dev Module: что выставить в Arduino IDE и Trema IDE

Пункт меню для этой платы — «ESP32S3 Dev Module». Пакет ESP32 ставится один раз через менеджер плат — как это сделать, рассказано в инструкции по установке. Если Arduino IDE не скачивает список пакетов, поможет статья про ошибку 403.

У этого пункта все настройки по умолчанию рассчитаны на самый простой модуль N4: PSRAM выключена, флеш-память считается за 4 МБ, Serial идёт в разъём COM. С платой N16R8 это значит, что 8 МБ PSRAM и 12 из 16 МБ флеш-памяти простаивают. Выберите маркировку своего модуля:

ESP32-S3-WROOM-1-N16R8: 16 МБ флеш, 8 МБ Octal PSRAMПлатаESP32S3 Dev Module (не «Octal (WROOM2)»)Flash ModeQIO 80MHz — как по умолчанию, не OPIFlash Size16MB (128Mb)PSRAMOPI PSRAMPartition Scheme16M Flash (3MB APP/9.9MB FATFS)USB CDC On Bootпо разъёму: Disabled для COM, Enabled для USBВажноВыводы 35, 36 и 37 заняты памятью. Рабочая температурамодуля — до 65 °CСамый частый вариант клонов с двумя USB-C
Пункты меню названы дословно, как в пакете ESP32 3.3.12. Плата «ESP32S3 Dev Module Octal (WROOM2)» нужна только модулям WROOM-2 (N16R8V, N32R8V, N32R16V). N16R16VA — это WROOM-1, ему подходит обычный «ESP32S3 Dev Module».

В Arduino IDE эти пункты находятся в меню «Инструменты», в Trema IDE — за кнопкой «Параметры платы» на верхней панели. Названия пунктов в обеих средах одинаковые: их задаёт сам пакет.

Две ловушки со словом OPI. У модулей WROOM-1 OPI выбирают только в пункте PSRAM. Пункт Flash Mode оставьте «QIO 80MHz»: флеш у них подключена по четырём линиям, а не по восьми. И не выбирайте плату «ESP32S3 Dev Module Octal (WROOM2)» — она для модулей WROOM-2. Если выбрать в Flash Mode «OPI 80MHz», а PSRAM оставить выключенной или QSPI, пакет 3.3.12 даже не соберёт программу. То же будет с платой «Octal (WROOM2)» при выключенной PSRAM:

cdefs.h:7:10: fatal error: sdkconfig.h: No such file or directory
    7 | #include "sdkconfig.h"

Такая ошибка выглядит как поломка среды, хотя дело в одном пункте меню: для этого сочетания в пакете просто нет нужных файлов. Верните Flash Mode «QIO 80MHz» и плату «ESP32S3 Dev Module».

Первая прошивка: светодиод на выводе 48 или 38

  1. Подключите кабель к разъёму COM — так монитор порта заработает без настроек.
  2. Выберите плату «ESP32S3 Dev Module» и появившийся порт.
  3. Вставьте скетч и нажмите «Загрузить». Монитор порта откройте на скорости 115200.

Светодиод на плате — адресный, как в светодиодной ленте: ему отправляют цвет посылкой, а не просто включают вывод. Команда digitalWrite(48, HIGH) его не зажжёт. Цветом управляет функция rgbLedWrite():

// Цветной светодиод платы — адресный (WS2812 или SK6812), а не обычный:
// им управляют посылкой цвета, и digitalWrite(48, HIGH) его не зажжёт.
// Клон N16R8 и DevKitC-1 v1.0 — вывод 48, DevKitC-1 v1.1 — вывод 38.
// На клоне светодиод отзовётся, только если запаяна перемычка RGB.
const int RGB_PIN = 48;

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

void loop() {
  rgbLedWrite(RGB_PIN, 40, 0, 0);   // красный; яркость от 0 до 255, 40 не слепит
  Serial.println("Красный");
  delay(500);

  rgbLedWrite(RGB_PIN, 0, 40, 0);   // зелёный
  Serial.println("Зелёный");
  delay(500);

  rgbLedWrite(RGB_PIN, 0, 0, 40);   // синий
  Serial.println("Синий");
  delay(500);

  rgbLedWrite(RGB_PIN, 0, 0, 0);    // погасить
  delay(500);
}

С привычным «Маячком» (Blink) из примеров история хитрее. У «ESP32S3 Dev Module» константа LED_BUILTIN равна не 48, а 97. Это условный номер: увидев его, пакет сам превращает digitalWrite(LED_BUILTIN, HIGH) в посылку белого цвета для светодиода на выводе 48. Поэтому на клоне и на DevKitC-1 v1.0 «Маячок» должен мигать белым, а на v1.1 светодиод не отзовётся: он на выводе 38.

Если не горит и цветной скетч, проверьте три вещи. На DevKitC-1 v1.1 поменяйте 48 на 38 в строке const int RGB_PIN = 48;. На клоне светодиод подключён к выводу 48 через перемычку с надписью RGB, и на многих платах её нужно запаять каплей припоя. И питается светодиод клона от 5 В: если плата запитана только через вывод 3V3, он не загорится.

PSRAM: как включить и проверить 8 МБ

Обычные переменные программа держит во внутренней памяти на 512 КБ, а большие буферы может брать из PSRAM. Пакет ESP32 сам отправляет туда большие запросы памяти, а функция ps_malloc() просит память именно оттуда. По умолчанию PSRAM выключена: выберите в пункте PSRAM тип по маркировке модуля. Проверить, что всё выставлено правильно, проще всего этим скетчем:

// Сколько памяти у платы на самом деле. Флеш-память программа узнаёт
// у самой микросхемы, PSRAM — у ядра, поэтому скетч сразу показывает,
// правильно ли выставлены параметры платы PSRAM и Flash Size.
void setup() {
  Serial.begin(115200);
  delay(1500);                                   // время открыть монитор порта

  Serial.print("Чип: ");
  Serial.println(ESP.getChipModel());
  Serial.print("Флеш-память, байт: ");
  Serial.println(ESP.getFlashChipSize());        // настоящий объём микросхемы
  // psramFound() тут не годится: при «OPI PSRAM» он отвечает «да» даже
  // без памяти. Надёжнее смотреть на размер.
  Serial.print("PSRAM, байт: ");
  Serial.println(ESP.getPsramSize());            // 0 — PSRAM выключена или не та
  Serial.print("Свободно во внутренней памяти, байт: ");
  Serial.println(ESP.getFreeHeap());

  // Просим миллион байт именно из PSRAM
  uint8_t* buffer = (uint8_t*)ps_malloc(1000000);
  if (buffer) {
    Serial.println("Миллион байт в PSRAM выделен");
    free(buffer);
  } else {
    Serial.println("Не вышло: PSRAM нет или она выключена в параметрах платы");
  }
}

void loop() {
}

На N16R8 с пунктом «OPI PSRAM» скетч покажет флеш-память 16 777 216 байт и PSRAM чуть меньше 8 388 608 байт: немного забирает сама система. Объём флеш-памяти скетч узнаёт у самой микросхемы, поэтому покажет настоящие 16 МБ, даже если в меню осталось 4. Так заодно видно, что за модуль вам продали.

Если в маркировке модуля есть R, ноль в строке PSRAM значит, что в меню выбран не тот пункт. С пунктом «Disabled» — как по умолчанию — PSRAM не включается вовсе, а ps_malloc() ничего не выделит. Если выбрать «OPI PSRAM» на модуле с другой памятью или без неё, плата запустится, но память не найдёт, а в мониторе порта при запуске появятся строки PSRAM chip is not connected, or wrong PSRAM line mode и Failed to init external RAM; continuing without it. В чужих примерах наличие памяти часто проверяют функцией psramFound(), но при «OPI PSRAM» она отвечает «да» даже без памяти. Надёжнее смотреть на размер, как в скетче выше.

Отдельно стоит знать про число, которое печатает сборка: «Максимум: 327680 байт» оперативной памяти. Это постоянное число из описания платы, PSRAM в нём не учитывается — её размер виден только на работающей плате.

Аналоговые и сенсорные входы

Аналоговых входов двадцать: выводы 1–10 подключены к первому преобразователю, 11–20 — ко второму. Второй преобразователь делит доступ с Wi-Fi, и паспорт прямо говорит, что вместе с Wi-Fi он не работает. В пакете ESP32 analogRead() об этом не сообщает: если Wi-Fi перебил измерение, функция вернёт 65535 — число за пределами обычных 0–4095, а analogReadMilliVolts() вернёт 0. Поэтому для датчиков в проектах с Wi-Fi берите выводы 1–10.

Ещё одно отличие от Uno — диапазон. analogRead() возвращает число от 0 до 4095, но измерять напряжение чип умеет примерно до 2,9 В, с погрешностью около 50 мВ после калибровки. Выше показания уже неточные. Функция analogReadMilliVolts() сразу пересчитывает показания в милливольты по заводской калибровке чипа.

Сенсорных входов четырнадцать, на выводах 1–14. Здесь S3 ведёт себя наоборот по сравнению с классической ESP32: при касании число не падает, а растёт. Примеры, написанные под старую плату, сравнивают с порогом «меньше чем» и на S3 не срабатывают. Посмотреть, как меняется число, можно простым скетчем:

// Сенсорный вход: вставьте провод в вывод 1 и коснитесь его пальцем.
// У ESP32-S3 число при касании растёт, у классической ESP32 — падает.
void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println(touchRead(T1));   // T1 — это вывод 1
  delay(200);
}

Если загрузка не идёт: «Failed to connect to ESP32-S3»

Через разъём COM среда сама переводит плату в режим прошивки: мост нажимает за вас RESET и BOOT, и загруженная раньше программа этому не помешает. Через родной USB режим прошивки включает сам чип, и тут старая программа может помешать. Если она уводит плату в сон, падает сразу после старта или заняла выводы 19 и 20, связаться с чипом не получится: порт на разъёме USB пропадёт из списка или не откроется, а если откроется — в журнале будет:

A fatal error occurred: Failed to connect to ESP32-S3: No serial data received.

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

  • Монитор порта после загрузки показывает waiting for download — плата осталась в режиме прошивки. Нажмите RESET.
  • Загрузка обрывается на середине с ошибкой Invalid head of packet — уменьшите Upload Speed в параметрах платы до 115200 и попробуйте другой кабель.
  • В меню стоит обычная ESP32 — загрузчик скажет прямо: This chip is ESP32-S3, not ESP32. Wrong chip argument?

Остальные причины общие для всех ESP32 — «ESP32 не прошивается».

Монитор порта молчит

  • Параметр не совпадает с разъёмом. Кабель в разъёме USB, а USB CDC On Boot выключен — или наоборот. Схема с переключателями выше показывает все четыре сочетания.
  • Текст ушёл раньше, чем открылся монитор. Через родной USB строки, напечатанные в первые мгновения после перезапуска, могут не дойти: компьютер ещё подключает порт. Добавьте в начало setup() задержку на полторы-две секунды.
  • Плата уснула или перезапускается. В глубоком сне родной USB отключается, и порт пропадает. Перезапуски по кругу разобраны в следующем разделе.

Скорость в мониторе важна только для разъёма COM: там она должна совпадать с числом в Serial.begin(). Для родного USB число скорости ни на что не влияет. Как открыть монитор порта и что делать с непонятными символами вместо текста — в статье про монитор порта.

Плата перезагружается по кругу

Если в мониторе порта одно и то же сообщение о запуске повторяется снова и снова, найдите в нём строку с ошибкой. Монитор откройте через разъём COM на скорости 115200: на ней пишет сама система при старте, ещё до вашей программы.

Строка в журналеЧто случилосьЧто сделать
Detected size(8192k) smaller than the size in the binary image header(16384k). Probe failed.В пункте Flash Size выбрано больше памяти, чем стоит на модуле. Первое число — настоящий объём, второе — объём из менюВыставьте Flash Size по маркировке: N8 — «8MB», N16 — «16MB»
Brownout detector was triggeredПроседает питание, чаще всего в момент включения Wi-FiВозьмите кабель покороче и другой порт USB, а моторы, ленты и сервоприводы питайте отдельно
Guru Meditation ErrorПадает сама программа: например, пишет в память, которую не удалось выделитьПроверьте, что ps_malloc() вернул не пустой указатель и что к выводам 35–37 ничего не подключено

Числа в первой строке зависят от вашей платы: в примере модуль на 8 МБ, а в меню выбрано 16. Ровно так бывает, если выставить настройки N16R8 на плату N8R8.

Питание: USB, вывод 5V и перемычки клона

Здесь официальная плата и клон устроены по-разному, и это главная ловушка клонов. Выберите плату:

DevKitC-1 EspressifВывод 5Vвыход: чуть меньше 5 В — немного теряется на диодеРазъём USB (родной)питание на разъём USB не выдаётКак устроеноКаждый разъём USB подключён к шине 5V через свой диод, ктой же шине подключены вывод 5V и стабилизатор на 800 мА.С вывода 5V можно брать питание для модулей. Espressifназывает три способа питания — USB, вывод 5V и вывод 3V3 —взаимоисключающими: выбирайте один.Вывод 5V работает в обе стороны
Так устроены DevKitC-1 v1.1 и клон YD-ESP32-S3 V1.4. У других клонов разводка может отличаться — перемычки ищите рядом с надписями IN-OUT и USB-OTG на плате.

На DevKitC-1 и клоне YD-ESP32-S3 два кабеля сразу, в COM и в USB, подключать можно: каждый разъём отделён от шины питания своим диодом, и для платы это один способ питания. Исключение — клон с запаянной перемычкой USB-OTG.

Бюджет тока такой. Модуль на пике передачи Wi-Fi берёт до 355 мА, а порт USB 2.0 компьютера обязан выдать всего 500 мА на всю плату — чаще всего ограничивает именно он. Стабилизаторы на платах линейные: у Espressif он рассчитан на 800 мА, у клона — на 1 А по паспорту, но из 5 В в 3,3 В оба сильно греются. У клона предел по нагреву — около 0,5–0,6 А на всё вместе, включая сам модуль, а у дешёвых копий стабилизатор бывает и слабее. Поэтому с вывода 3V3 берите не больше 100–150 мА: на датчики и небольшой дисплей этого хватает. Сервопривод, светодиодную ленту или мотор от 3V3 не питайте: им нужен свой источник, общий с платой только по земле. Подробнее — в статье про питание.

Место под программу: 16 МБ, из которых видно 1,25

С настройками по умолчанию программе отведено 1,25 МБ, сколько бы флеш-памяти ни стояло на модуле. Wi-Fi и Bluetooth занимают много, и на S3 это видно так:

Flash Size 4MB, разметка Default 4MB: под программу 1,25 МБ (1 310 720 байт)Мигание светодиодом22%288 654 байтПоиск Bluetooth LE-устройств42%555 584 байтПоиск сетей Wi-Fi64%840 572 байтWi-Fi и Bluetooth LE вместе81%1 066 884 байтWi-Fi, BLE, веб-сервер и HTTPS93%1 227 188 байт
Одни и те же программы, собранные под «ESP32S3 Dev Module» с пакетом ESP32 3.3.12. С настройками по умолчанию среда считает флеш-память за 4 МБ, 12 МБ простаивают, а программе отдано всего 1,25 МБ.

Выставьте Flash Size «16MB» и Partition Scheme «16M Flash (3MB APP/9.9MB FATFS)» — под программу станет 3 МБ, а почти 10 МБ уйдут под файлы. Важен именно этот пункт разметки: один только Flash Size места программе не прибавит. А если программа всё-таки не влезет, сборка остановится с сообщением «Скетч слишком большой» — это и есть сигнал сменить разметку. И не выбирайте Flash Size больше настоящего объёма: если выставить 16 МБ на модуле с 8 МБ, плата уйдёт в перезагрузку по кругу.

Родной USB: плата становится клавиатурой

Этого не умеют Uno R3, классическая ESP32 и C3: S3 через разъём USB может притвориться клавиатурой, мышью или геймпадом. Для этого в параметрах платы нужно выбрать USB Mode: USB-OTG (TinyUSB). Скетч ниже печатает фразу на компьютере по нажатию кнопки BOOT:

// Плата притворяется USB-клавиатурой: нажали BOOT — она «напечатала» фразу.
// Работает только через разъём USB (родной). Первые строки проверяют
// настройки: если что-то не так, сборка остановится и подскажет, что поменять.
#if !SOC_USB_OTG_SUPPORTED
#error "Нужна плата с USB-OTG, например ESP32-S3: у ESP32 и ESP32-C3 его нет"
#elif ARDUINO_USB_MODE
#error "В параметрах платы выберите USB Mode: USB-OTG (TinyUSB)"
#endif

#include "USB.h"
#include "USBHIDKeyboard.h"

USBHIDKeyboard Keyboard;
const int BUTTON_PIN = 0;          // кнопка BOOT на плате — это вывод 0

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  Keyboard.begin();
  USB.begin();                     // включаем родной USB как клавиатуру
}

void loop() {
  if (digitalRead(BUTTON_PIN) == LOW) {   // кнопка нажата
    Keyboard.println("Hello from ESP32-S3");
    delay(500);                    // чтобы одно нажатие не печатало много раз
  }
}

Первые строки скетча проверяют настройки. Если USB Mode выбран не тот или у платы нет USB-OTG, сборка остановится и подскажет, что поменять. Это защита от главной ловушки: официальный пример клавиатуры из пакета при настройках по умолчанию собирается в пустую программу — на 100 КБ меньше настоящей, без единой ошибки, только с предупреждением, которое Arduino IDE по умолчанию не показывает. Плата прошивается, а клавиатуры нет.

Ещё две детали. Клавиатура передаёт компьютеру коды клавиш, а не буквы: при включённой русской раскладке вместо «Hello» появится «Руддщ». И монитор порта: если USB CDC On Boot выключен, порт на разъёме USB пропадает, пока плата работает клавиатурой. Тогда монитор смотрят через разъём COM вторым кабелем — подключать плату обоими разъёмами одновременно можно. Если включить USB CDC On Boot, плата на том же разъёме станет и клавиатурой, и портом: так подключают платы с одним разъёмом.

Следующую программу удобнее всего загружать через разъём COM. Если разъёма COM на плате нет, а порт на разъёме USB пропал, выручит ручной вход в режим прошивки кнопками BOOT и RESET.

Что собирают на ESP32-S3 N16R8

  • Камеру с трансляцией по Wi-Fi. Разъёма камеры у DevKitC-1 нет, её ставят на платы ESP32-S3-CAM и XIAO ESP32S3 Sense. Кадрам нужна PSRAM, поэтому в меню выбирают «OPI PSRAM». Дешевле обходится ESP32-CAM на обычном ESP32 — в её статье есть и сравнение с платами на S3.
  • Экран с меню и графикой. Библиотеке LVGL нужен буфер кадра, и 8 МБ PSRAM хватает с запасом. С чего начать — в статье про TFT-дисплеи.
  • Интернет-радио и звук. Звук идёт по шине I²S к модулю усилителя или от цифрового микрофона, а PSRAM держит буфер потока.
  • USB-клавиатуру и пульт для компьютера — пример выше.
  • Датчики и умный дом по Wi-Fi: веб-страница на плате, MQTT и прошивка по воздуху.

Чего у ESP32-S3 нет

Часть примеров для классической ESP32 на S3 не соберётся. Сборка под «ESP32S3 Dev Module» отвечает так:

Что в скетчеЧто пишет компиляторЧто это значит
Классический Bluetooth: BluetoothSerial.h'BluetoothSerial' does not name a typeУ S3 только Bluetooth LE. Телефонные «терминалы» для модуля HC-05 с ней не работают
Аналоговый выход: dacWrite()'dacWrite' was not declared in this scopeЦАП у S3 нет, хотя в некоторых карточках он указан. Плавное напряжение получают ШИМом через резистор и конденсатор
Датчик Холла: hallRead()'hallRead' was not declared in this scopeУбран из пакета ESP32 версии 3 для всех чипов, у S3 его не было и в железе

Bluetooth LE у S3 есть: с телефоном плата свяжется через встроенную библиотеку BLE. Чем LE отличается от классического Bluetooth модулей HC-05 — в статье про Bluetooth.

Чему не верить в карточках товаров

  • Wi-Fi 5 ГГц — у S3 только 2,4 ГГц
  • ЦАП и датчик Холла — их нет
  • Нейропроцессор (NPU) — его нет, есть векторные команды процессора
  • USB 2.0 High Speed — USB у S3 полноскоростной, до 12 Мбит/с
  • «Выводы терпят 5 В» — логика 3,3 В, на вход не больше 3,6 В; 5 В подают только на разъёмы USB и вывод 5V
  • SPI на выводах 35–37 — у модулей R8 они заняты памятью
  • «На S3 PSRAM всегда OPI» — у модулей R2 она Quad, нужен пункт QSPI

ESP32-S3, C3, C6 или обычная ESP32

ESP32-S3ESP32-C3ESP32-C6ESP32
Основные ядра2 × 240 МГц1 × 160 МГц1 × 160 МГц2 × 240 МГц
PSRAM2, 8 или 16 МБ, смотря по модулюнетнету модулей WROVER и WROOM-32E с R2
Родной USBесть: клавиатура, мышь, геймпадтолько порт и отладкатолько порт и отладканет
Wi-Fib/g/n, 2,4 ГГцb/g/n, 2,4 ГГцWi-Fi 6, 2,4 ГГцb/g/n, 2,4 ГГц
Zigbee и Threadнетнетестьнет
Классический Bluetoothнетнетнетесть
ЦАПнетнетнет2 канала
Сенсорные входы14нетнет10
Пункт в менюESP32S3 Dev ModuleESP32C3 Dev Module (у Super Mini — свой)ESP32C6 Dev ModuleESP32 Dev Module

S3 берут, когда нужна память или USB: камера, экран с графикой, звук, USB-клавиатура. Для датчика с Wi-Fi хватит маленькой и дешёвой ESP32-C3 Super Mini. C6 берут для умного дома с Zigbee или Thread. Классическую ESP32 выбирают ради классического Bluetooth, ЦАП и горы готовых примеров. Связь по сети на любой из них — в серии про Wi-Fi. А если с платами вы только знакомитесь, начать проще с Arduino Uno.

Другие платы на S3

В пакете ESP32 3.3.12 больше полутора сотен плат на S3, и у многих свой пункт меню с правильными настройками. Маленькой Waveshare ESP32-S3-Zero соответствует пункт «Waveshare ESP32-S3-Zero»: цветной светодиод у неё на выводе 21, разъём только родной. Шины I²C и SPI ей нужно задавать выводами явно: I²C в пакете для неё не задана, а SPI по умолчанию указан на выводы 34–37, которых на плате нет. Платам ESP32-S3 Super Mini отдельного пункта нет, а делают их разные фабрики по-разному. У варианта, для которого опубликована схема (марка Nologo), — чип с 4 МБ флеш и 2 МБ Quad PSRAM, разъём только родной, цветной и красный светодиоды на выводе 48. Для такой платы подходит «ESP32S3 Dev Module» с PSRAM «QSPI PSRAM» и USB CDC On Boot «Enabled». У обеих маленьких плат вывод 5V соединён с разъёмом USB напрямую: не подавайте на него питание от блока, пока плата подключена к компьютеру. У Arduino Nano ESP32 и Seeed XIAO ESP32S3 тоже свои пункты.

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

ESP32-S3 в Trema IDE

Trema IDE — русская среда, совместимая с Arduino IDE: те же скетчи .ino, тот же пакет ESP32 и те же пункты меню. Пакет ставится из менеджера плат с российского зеркала, без ручных ссылок и VPN. Flash Size, PSRAM, Partition Scheme и USB CDC On Boot открываются кнопкой «Параметры платы» на верхней панели. Ошибки сборки объясняются по-русски, с переходом к нужной строке.

  • Пакет ESP32 3.3.12 ставится с российского зеркала
  • Flash Size, PSRAM, USB CDC On Boot — за кнопкой «Параметры платы»
  • Скетчи .ino и пункты меню — те же, что в Arduino IDE
  • Ошибки сборки — с объяснением по-русски и переходом к строке

Вопросы

Частые вопросы про ESP32-S3

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

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

«ESP32S3 Dev Module» в семействе ESP32. Затем в параметрах платы выставьте Flash Size «16MB (128Mb)», PSRAM «OPI PSRAM» и Partition Scheme «16M Flash (3MB APP/9.9MB FATFS)», а Flash Mode оставьте «QIO 80MHz». Плату «ESP32S3 Dev Module Octal (WROOM2)» не выбирайте: она для модулей с восьмилинейной флеш-памятью. USB CDC On Boot — Disabled, если кабель в разъёме COM, и Enabled, если в разъёме USB.

Что такое ESP32S3 Dev Module?

Это пункт меню пакета ESP32 для плат на модуле ESP32-S3-WROOM-1 — и официальной DevKitC-1, и клонов. Его настройки по умолчанию рассчитаны на самый простой модуль N4 без PSRAM, поэтому для N16R8 нужно поменять три пункта: Flash Size, PSRAM и Partition Scheme.

Что такое PSRAM у ESP32-S3?

Дополнительная оперативная память: у модулей N16R8 и N8R8 её 8 МБ при 512 КБ обычной памяти чипа. В неё помещаются кадры камеры, буфер экрана, звук и большие массивы. По умолчанию она выключена и включается в пункте PSRAM параметров платы.

Что значит N16R8 в названии ESP32-S3?

Это маркировка модуля ESP32-S3-WROOM-1: N16 — 16 МБ флеш-памяти, R8 — 8 МБ PSRAM, подключённой по восьми линиям (Octal). Она напечатана на металлическом экране модуля. У N8R2 PSRAM 2 МБ и подключена по четырём линиям, у N16 без R её нет вовсе.

Зачем у ESP32-S3 два USB и к какому подключаться?

Разъём COM (или UART) идёт через мост USB-UART к выводам 43 и 44, разъём USB (или OTG) — родной USB самого чипа. Прошивать можно через любой. Для начала берите COM: монитор порта там работает с настройками по умолчанию. Родной разъём нужен, чтобы плата стала USB-клавиатурой или мышью, и для плат с одним разъёмом.

Почему монитор порта ESP32-S3 ничего не показывает?

Чаще всего параметр USB CDC On Boot не совпадает с разъёмом. При Disabled (по умолчанию) Serial пишет в разъём COM, при Enabled — в разъём USB. Кабель в USB и Disabled, или кабель в COM и Enabled — строк программы в мониторе не будет, хотя она загружается. Ещё через родной USB могут потеряться первые строки — добавьте в начало setup() задержку на 1,5–2 секунды.

Как включить PSRAM на ESP32-S3 и почему она показывает 0?

В пакете ESP32 PSRAM по умолчанию выключена. Для модулей R8 (N16R8, N8R8) выберите в параметрах платы PSRAM «OPI PSRAM», для R2 (N8R2, N4R2) — «QSPI PSRAM». С неверным типом память не найдётся, и ESP.getPsramSize() вернёт 0.

На каком выводе светодиод у ESP32-S3: 48 или 38?

У клонов N16R8 и первой ревизии DevKitC-1 — на выводе 48, у DevKitC-1 v1.1 — на 38. Светодиод адресный: зажигают его функцией rgbLedWrite(), а digitalWrite(48, HIGH) его не зажжёт. На клонах он подключён через перемычку RGB, которую часто нужно запаять.

Можно ли занимать выводы 35, 36 и 37 у ESP32-S3?

У модулей с восьмилинейной PSRAM (N16R8, N8R8, N4R8, N16R16VA) и у модулей WROOM-2 — нет: внутри модуля эти линии соединены с памятью, хотя на гребёнку выведены. У модулей N8R2, N4R2 и без PSRAM они свободны.

Нужен ли драйвер для ESP32-S3?

Обычно нет. Родной разъём USB Windows 10 и 11 узнают сами. Мост CH343P на разъёме COM тоже чаще всего работает без установки драйвера. Если же его порт так и не появился, поставьте драйвер CH343 с сайта WCH. А если не появляется ни один порт, скорее всего, кабель только заряжает.

Можно ли подать 5 В на выводы ESP32-S3?

Нет: логика 3,3-вольтовая, по паспорту чипа на вход допускается не больше 3,6 В. Пятивольтовый сигнал подключают через делитель или преобразователь уровней. Питание 5 В подают только на разъёмы USB или на вывод 5V. А вот взять 5 В с вывода 5V для модулей у многих клонов без перемычки IN-OUT нельзя.

Есть ли у ESP32-S3 классический Bluetooth?

Нет, только Bluetooth LE. Библиотека BluetoothSerial и телефонные терминалы для модуля HC-05 с ней не работают: сборка остановится с ошибкой «'BluetoothSerial' does not name a type». Связаться с телефоном можно через встроенную библиотеку BLE.

Почему ESP32-S3 перезагружается по кругу?

Найдите строку с ошибкой в мониторе порта на скорости 115200. «Detected size… smaller than the size in the binary image header» — в пункте Flash Size выбрано больше памяти, чем стоит на модуле. «Brownout detector was triggered» — проседает питание, чаще всего при включении Wi-Fi: возьмите другой кабель и порт. «Guru Meditation Error» — падает сама программа.

Чем ESP32-S3 отличается от ESP32-C3, C6 и обычной ESP32?

У S3 два ядра по 240 МГц, PSRAM 2, 8 или 16 МБ смотря по модулю (у N16R8 — 8 МБ) и родной USB, который умеет быть клавиатурой и мышью. У C3 одно ядро и нет PSRAM, зато плата крошечная и дешёвая. C6 — одно основное ядро, зато Wi-Fi 6 и Zigbee или Thread для умного дома. Классическая ESP32 — единственная из них с классическим Bluetooth и ЦАП.

16 МБ флеш и 8 МБ PSRAM — три пункта в меню

Скачайте Trema IDE, поставьте пакет ESP32 с российского зеркала, выберите «ESP32S3 Dev Module» и выставьте Flash Size, PSRAM и Partition Scheme под свой модуль — и плата покажет всю свою память. Дома — бесплатно навсегда.