ESP32-S3-CAM N16R8: какой должна была быть ESP32-CAM
Классическая ESP32-CAM от AI-Thinker сделала камеру с Wi‑Fi доступной почти каждому — и заодно научила целое поколение самодельщиков терпению. USB-порта на ней нет: для каждой прошивки нужен внешний адаптер USB–UART и перемычка на GPIO0. Из 16 выводов свободны считаные единицы, а светодиод вспышки моргает всякий раз, когда программа пишет на карту памяти.
Плата из этой статьи — та же идея, доведённая до ума. На ней ESP32-S3 с 16 МБ Flash и 8 МБ PSRAM, камера OV5640 на 5 Мп, слот microSD, два разъёма USB‑C и все 36 GPIO модуля, выведенные на гребёнки. Подвох один: когда работают камера и карта памяти, по-настоящему свободных выводов остаётся шесть. Дальше — подробная карта платы: что к чему подключено, какой разъём за что отвечает, какие контакты можно занимать и как настроить Arduino IDE, чтобы камера не превратилась в квест.

О какой именно плате идёт речь
В магазинах эту плату называют по-разному: ESP32-S3-CAM, ESP32-S3 WROOM CAM, ESP32-S3 CAM Development Board. На самой плате написано скромно — ESP32-S3 WROOM, а на металлическом экране модуля — ESP32-S3-N16R8. Эта маркировка и есть главная характеристика: N16 означает 16 МБ Flash, R8 — 8 МБ PSRAM. Сам модуль — ESP32-S3-WROOM-1 с антенной на печатной плате.
Разводка повторяет плату Freenove ESP32-S3-WROOM CAM: то же место для камеры, те же выводы, две кнопки и два USB‑C. Freenove комплектует свою плату камерой OV2640 на 2 Мп, а на экземпляре из этой статьи стоит OV5640 на 5 Мп — это видно по надписи на шлейфе. Такие платы выпускают разные фабрики, и от партии к партии могут отличаться модуль камеры и мост USB–UART. Прежде чем искать драйвер или чужой пример, стоит посмотреть на маркировку своего экземпляра.


Технические характеристики
| Узел | Характеристика | Практическое значение |
|---|---|---|
| Модуль | ESP32-S3-WROOM-1-N16R8, антенна на печатной плате | Готовый модуль Espressif размером 18 × 25,5 × 3,1 мм; все его 36 GPIO выведены на гребёнки |
| Процессор | 2 ядра Xtensa LX7, до 240 МГц, FPU | Хватает на JPEG-поток, Wi‑Fi и логику приложения одновременно; есть инструкции для ускорения нейросетей и обработки сигналов |
| Память SoC | 512 КБ SRAM, 384 КБ ROM | Для кадров камеры внутренней памяти мало — их место в PSRAM |
| Flash | 16 МБ, Quad SPI | Хватает на крупное приложение, OTA и файловую систему |
| PSRAM | 8 МБ, Octal SPI (OPI) | Кадровые буферы камеры; в Arduino IDE нужен режим OPI PSRAM |
| Wi‑Fi | 2,4 ГГц, 802.11 b/g/n, до 150 Мбит/с | Потоковое видео MJPEG, отправка снимков, обновление по воздуху |
| Bluetooth | Bluetooth 5 (LE), mesh, скорости до 2 Мбит/с и режим Long Range | Только BLE: классического Bluetooth с SPP и A2DP у ESP32-S3 нет |
| Камера | OV5640, 5 Мп (2592 × 1944), 8-битная шина DVP, настройка по SCCB | Сенсор сам сжимает кадр в JPEG; шина занимает 14 GPIO |
| Разъём камеры | FPC, 24 контакта | Модуль камеры сменный: подходят модули того же стандарта |
| Карта памяти | microSD, SDMMC в однобитном режиме | Снимки и таймлапсы пишутся прямо на плату; слот занимает GPIO38–40 |
| USB | Два USB‑C: мост USB–UART на UART0 и нативный USB самого ESP32-S3 | Прошивка и логи — через правый разъём, USB-устройства и отладка — через левый |
| GPIO | 36 выводов на двух гребёнках по 20 контактов | Без оговорок свободны шесть, ещё несколько — с условиями |
| Индикация и кнопки | Светодиоды ON, TX, RX, IO2 (GPIO2) и RGB WS2812 (GPIO48); кнопки EN и BOOT (GPIO0) | Есть чем мигать и что нажимать без внешних деталей |
| Питание | 5 В через USB‑C или вывод 5V; на выводе 3V3 — 3,3 В со стабилизатора платы | Модулю нужен источник не слабее 0,5 А |
| Логические уровни | 3,3 В; GPIO не выдерживают 5 В | Сигнал 5 В подключают только через согласование уровней |
| Рабочая температура | −40…+65 °C (модули с Octal PSRAM) | Ниже, чем у модулей без PSRAM с их 85 °C; в закрытом корпусе это важно |
| Среды разработки | Arduino IDE, PlatformIO, ESP-IDF; MicroPython — со сборкой, в которой есть драйвер камеры | Для быстрого старта удобнее Arduino, для серьёзного проекта — ESP-IDF |
Немного арифметики. Кадр 5 Мп в формате RGB565 занимает 2592 × 1944 × 2 = 10 077 696 байт, то есть около 9,6 МиБ. Это больше, чем все 8 МБ PSRAM, поэтому полное разрешение доступно только в JPEG, который сенсор сжимает сам. Кадр UXGA 1600 × 1200 в том же RGB565 весит около 3,7 МиБ и уже помещается. На практике камеру почти всегда держат в JPEG: так и памяти нужно меньше, и по Wi‑Fi передавать проще.
Два USB‑C: какой разъём за что отвечает
На лицевой стороне разъёмы не подписаны: надписи USB-UART и USB-OTG стоят на обороте. Отсюда классическая зеркальная ловушка — если перевернуть плату лицом вверх, левая надпись окажется под правым разъёмом. Если смотреть на плату со стороны камеры, антенной вверх, картина такая:
| Разъём | Что за ним | Для чего брать |
|---|---|---|
| Левый, USB-OTG | Нативный USB самого ESP32-S3: GPIO19 — D−, GPIO20 — D+. Встроенный USB-Serial-JTAG или USB OTG | Отладка без внешнего адаптера, собственные USB-устройства: клавиатура, мышь, MIDI, накопитель, веб-камера |
| Правый, USB-UART | Мост USB–UART, подключённый к UART0: GPIO43 — TX, GPIO44 — RX | Прошивка и Serial Monitor — самый предсказуемый путь |
Какой порт получит вывод Serial, решает настройка USB CDC On Boot в Arduino IDE. В положении Disabled Serial — это UART0, и сообщения уходят в правый разъём. В положении Enabled Serial переезжает на нативный USB, то есть в левый. Если монитор порта молчит, первым делом стоит проверить именно этот пункт и то, в какой разъём вставлен кабель. Сообщения загрузчика ROM по умолчанию выводятся в оба порта.
У левого разъёма есть и менее очевидное достоинство. Встроенный в ESP32-S3 контроллер USB-Serial-JTAG позволяет отлаживать программу с точками останова без внешнего адаптера и без единого дополнительного вывода. Это особенно ценно здесь, потому что штатные выводы внешнего JTAG (GPIO39–42) на этой плате частично заняты картой памяти.
Гребёнки: разбор каждого вывода
Ориентация в таблицах — компонентами вверх, антенна сверху, разъёмы USB снизу. У номеров на шелкографии есть значки: подчёркнутые выводы заняты камерой, тильдой отмечены выводы microSD, звёздочкой — PSRAM. Легенда к ним напечатана на обороте.
Левая гребёнка, сверху вниз
| Вывод | Что на нём | Можно ли занять |
|---|---|---|
| 3V3 | 3,3 В со стабилизатора платы | Не GPIO |
| EN | Сброс, кнопка EN; активный уровень — низкий | Нет |
| GPIO4 | Камера: SIOD, данные SCCB | Только без камеры |
| GPIO5 | Камера: SIOC, такт SCCB | Только без камеры |
| GPIO6 | Камера: VSYNC | Только без камеры |
| GPIO7 | Камера: HREF | Только без камеры |
| GPIO15 | Камера: XCLK | Только без камеры |
| GPIO16 | Камера: D7 (Y9) | Только без камеры |
| GPIO17 | Камера: D6 (Y8) | Только без камеры |
| GPIO18 | Камера: D5 (Y7) | Только без камеры |
| GPIO8 | Камера: D2 (Y4) | Только без камеры |
| GPIO3 | Страпинг-пин; ADC1, Touch3 | С осторожностью |
| GPIO46 | Страпинг-пин режима загрузки | С осторожностью |
| GPIO9 | Камера: D1 (Y3) | Только без камеры |
| GPIO10 | Камера: D3 (Y5) | Только без камеры |
| GPIO11 | Камера: D0 (Y2) | Только без камеры |
| GPIO12 | Камера: D4 (Y6) | Только без камеры |
| GPIO13 | Камера: PCLK | Только без камеры |
| GPIO14 | Свободен; ADC2, Touch14 | Да |
| 5V | Шина 5 В | Не GPIO |
Правая гребёнка, сверху вниз
| Вывод | Что на нём | Можно ли занять |
|---|---|---|
| TX (GPIO43) | UART0 TX, к мосту USB–UART | Только без правого разъёма |
| RX (GPIO44) | UART0 RX, от моста USB–UART | Только без правого разъёма |
| GPIO1 | Свободен; ADC1, Touch1 | Да — лучший аналоговый вход |
| GPIO2 | Светодиод IO2; ADC1, Touch2 | С учётом светодиода |
| GPIO42 | Свободен; MTMS внешнего JTAG | Да |
| GPIO41 | Свободен; MTDI внешнего JTAG | Да |
| GPIO40 | microSD: D0; MTDO внешнего JTAG | Только без карты |
| GPIO39 | microSD: CLK; MTCK внешнего JTAG | Только без карты |
| GPIO38 | microSD: CMD | Только без карты |
| GPIO37 | Octal PSRAM внутри модуля | Никогда |
| GPIO36 | Octal PSRAM внутри модуля | Никогда |
| GPIO35 | Octal PSRAM внутри модуля | Никогда |
| GPIO0 | Кнопка BOOT, страпинг-пин | С осторожностью |
| GPIO45 | Страпинг-пин: напряжение питания памяти | Лучше не трогать |
| GPIO48 | RGB-светодиод, совместимый с WS2812 | С учётом светодиода |
| GPIO47 | Свободен | Да |
| GPIO21 | Свободен | Да |
| GPIO20 | Нативный USB: D+ (левый разъём) | Только без нативного USB |
| GPIO19 | Нативный USB: D− (левый разъём) | Только без нативного USB |
| GND | Земля | Не GPIO |
Выводы 35–37 выведены на гребёнку, но пользоваться ими нельзя: в модулях с Octal PSRAM они внутри подключены к памяти, и любой внешний сигнал на них мешает её работе.
36 GPIO — и сколько из них ваших
Если свести всё вместе, картина получается отрезвляющая:
| Кем занято | GPIO | Правило |
|---|---|---|
| Камера | 4–13, 15–18 | Заняты, пока камера включена |
| microSD | 38–40 | Заняты, пока смонтирована карта |
| Octal PSRAM | 35–37 | Не использовать никогда |
| Нативный USB | 19, 20 | Свободны, только если не нужен левый разъём |
| UART0 и мост USB–UART | 43, 44 | Свободны, только если не нужен правый разъём |
| Светодиоды на плате | 2, 48 | Можно, если светодиод не мешает |
| Страпинг-пины | 0, 3, 45, 46 | Только когда понятны уровни при сбросе |
| Ничем не заняты | 1, 14, 21, 41, 42, 47 | Первый выбор для своей схемы |
Итого при работающих камере и карте памяти без оговорок свободны шесть выводов: GPIO1, 14, 21, 41, 42 и 47. Для I²C-датчика, пары кнопок и реле этого достаточно, для развесистой периферии — уже нет. Ещё пару выводов можно отвоевать, отказавшись от одного из USB-путей: если плата работает только через правый разъём, освобождаются GPIO19 и GPIO20. Если только через левый — можно попробовать GPIO43 и GPIO44, помня, что они по-прежнему соединены с мостом USB–UART.
С аналоговыми входами тоньше. У ESP32-S3 ADC1 — это GPIO1–10, ADC2 — GPIO11–20. Камера забирает почти все выводы ADC1, поэтому при работающей камере единственный чистый аналоговый вход — GPIO1. GPIO2 и GPIO3 тоже относятся к ADC1, но на первом висит светодиод, а второй — страпинг-пин. GPIO14 принадлежит ADC2, а ADC2 делит ресурсы с Wi‑Fi: пока работает радио, чтение может задерживаться или завершаться ошибкой. Для датчиков в проекте с Wi‑Fi выбирайте ADC1. Сенсорные входы Touch1–Touch14 живут на GPIO1–14, но без оговорок из них свободны только GPIO1 и GPIO14.
И четыре правила про страпинг-пины, которые экономят вечер:
- GPIO0 — это кнопка BOOT. Если при сбросе на нём низкий уровень, чип входит в режим загрузки вместо запуска программы. Внешняя схема не должна прижимать GPIO0 к земле во время старта.
- GPIO46 по умолчанию подтянут к земле и выбирает режим загрузки вместе с GPIO0. Сочетание «низкий уровень на GPIO0, высокий на GPIO46» при сбросе недопустимо.
- GPIO45 задаёт напряжение питания памяти: низкий уровень при сбросе — 3,3 В, высокий — 1,8 В. Flash и PSRAM этого модуля рассчитаны на 3,3 В, поэтому высокий уровень на GPIO45 во время сброса недопустим. По умолчанию вывод подтянут к земле — так его и стоит оставить.
- GPIO3 выбирает источник сигналов JTAG, но только если в eFuse прожжён соответствующий бит; на модуле с заводскими настройками его уровень игнорируется. Espressif всё равно числит его среди страпинг-пинов, поэтому под первую же кнопку его лучше не брать.
Камера: OV5640 и правильная карта пинов
Камера подключена по параллельной шине DVP: восемь линий данных, три линии синхронизации, тактовая частота XCLK и пара линий SCCB для настройки сенсора — всего 14 GPIO. Выводы PWDN и RESET на плате не разведены, в конфигурации для них указывают -1.
Главная ловушка — чужая карта пинов. Самые популярные примеры в интернете написаны для AI-Thinker ESP32-CAM, а её номера GPIO на ESP32-S3 указывают, среди прочего, на выводы 26–32, которые у S3 отданы внутренней памяти, и на номера 22–25, которых у S3 нет вовсе. Зато разводка этой платы один в один совпадает с Espressif ESP32-S3-EYE, для которой в Arduino уже всё описано.
В примере CameraWebServer (File → Examples → ESP32 → Camera) модель выбирается в файле board_config.h. По умолчанию там включена CAMERA_MODEL_ESP_EYE — это другая плата, на старом ESP32. Её строку нужно закомментировать и раскомментировать CAMERA_MODEL_ESP32S3_EYE. Пины этой модели в camera_pins.h выглядят так — ровно как на нашей плате:
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 15
#define SIOD_GPIO_NUM 4
#define SIOC_GPIO_NUM 5
#define Y2_GPIO_NUM 11
#define Y3_GPIO_NUM 9
#define Y4_GPIO_NUM 8
#define Y5_GPIO_NUM 10
#define Y6_GPIO_NUM 12
#define Y7_GPIO_NUM 18
#define Y8_GPIO_NUM 17
#define Y9_GPIO_NUM 16
#define VSYNC_GPIO_NUM 6
#define HREF_GPIO_NUM 7
#define PCLK_GPIO_NUM 13
Для этой модели пример сам переворачивает картинку по вертикали вызовом set_vflip. Если кадр окажется вверх ногами, достаточно переключить V-Flip в веб-интерфейсе; там же повышается разрешение — поток стартует в QVGA. А вот отсутствие PSRAM пример переживает молча: если psramFound() вернул false, размер кадра ограничивается SVGA, а буфер переезжает во внутреннюю память. Камера при этом работает, но далеко не в полную силу.
Если поток остаётся чёрным
С OV5640 на этой плате есть известная неприятность. Владельцы таких плат сообщали: пример инициализирует камеру без ошибок, OV2640 на той же плате работает, а OV5640 отдаёт чёрный кадр. Судя по их отчётам, помогает смена тактовой частоты XCLK — вместо стандартных 20 МГц ставят 24 МГц или 12 МГц. В setup() меняется одна строка, xclk_freq_hz; остальные поля показывают, с чем её обычно сочетают:
camera_config_t config;
// ... pins as in camera_pins.h ...
config.xclk_freq_hz = 24000000; // 20 MHz gave black frames on some OV5640 boards; 12 MHz is the other reported fix
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_location = CAMERA_FB_IN_PSRAM;
config.fb_count = 2;
config.grab_mode = CAMERA_GRAB_LATEST;
Если не помогло, стоит проверить, до конца ли шлейф вставлен в разъём и защёлкнут ли фиксатор, а также не перегревается ли плата: в тех же обсуждениях советуют не держать её с работающей камерой в закрытом корпусе без вентиляции. Полное разрешение сенсора — FRAMESIZE_5MP, 2592 × 1944 — доступно только в JPEG.
Настройки Arduino IDE
Отдельный пакет плате не нужен: подходит стандартный профиль ESP32S3 Dev Module из arduino-esp32. Главное — правильно указать память, от этого зависит, увидит ли программа PSRAM.
| Параметр | Значение | Почему |
|---|---|---|
| Board | ESP32S3 Dev Module | Универсальный профиль для ESP32-S3 |
| Flash Size | 16MB (128Mb) | Реальный объём Flash модуля N16R8 |
| Flash Mode | QIO 80MHz | Flash здесь подключена по Quad SPI; режим OPI 80MHz предназначен для модулей с Octal Flash |
| PSRAM | OPI PSRAM | PSRAM подключена по Octal SPI; с QSPI PSRAM или Disabled программа её не найдёт |
| Partition Scheme | 16M Flash (3MB APP/9.9MB FATFS) | CameraWebServer требует не меньше 3 МБ под приложение, остальное уходит под файлы |
| USB CDC On Boot | Disabled — работа через правый разъём, Enabled — через левый | Определяет, в какой порт идёт Serial |
| USB Mode | Hardware CDC and JTAG | Встроенный USB-Serial-JTAG; режим USB-OTG (TinyUSB) нужен для собственных USB-устройств |
| Upload Mode | UART0 / Hardware CDC | Прошивка через любой из двух разъёмов |
Если прошивка перестала загружаться — например, программа перенастроила нативный USB или ушла в циклические перезагрузки, — плату переводят в загрузчик вручную: зажать BOOT, коротко нажать EN, отпустить BOOT и повторить загрузку. Для правого разъёма компьютеру может понадобиться драйвер моста USB–UART. У оригинальной платы Freenove это CH343, у клонов встречаются и другие микросхемы, поэтому ориентироваться стоит на то, что показывает диспетчер устройств. Левый разъём современные системы распознают как последовательный порт без отдельного драйвера.
microSD, светодиоды и кнопки
Слот microSD подключён по SDMMC в однобитном режиме: CMD — GPIO38, CLK — GPIO39, D0 — GPIO40. Это медленнее четырёхбитного режима, зато экономит три вывода. Две из трёх линий совпадают со штатными выводами внешнего JTAG (MTCK и MTDO), поэтому карта и внешний отладчик мешают друг другу — с картой удобнее отлаживаться через левый USB-разъём.
Светодиодов пять. ON показывает питание, TX и RX мигают при обмене через мост USB–UART, IO2 — пользовательский светодиод на GPIO2, а 48 — адресный RGB-светодиод, совместимый с WS2812, на GPIO48. В профиле ESP32S3 Dev Module макросы LED_BUILTIN и RGB_BUILTIN указывают именно на него, поэтому стандартный Blink зажжёт RGB-светодиод белым. Цвет задаёт функция rgbLedWrite(), а прежняя neopixelWrite() объявлена устаревшей.
Кнопка EN перезапускает модуль, BOOT подключена к GPIO0 и нужна для ручного входа в загрузчик. После старта программы BOOT можно читать как обычную кнопку. Быстрый самотест платы — смонтировать карту и сообщить результат цветом:
#include "SD_MMC.h"
void setup() {
Serial.begin(115200);
// One-bit SDMMC: CLK, CMD, D0
SD_MMC.setPins(39, 38, 40);
if (SD_MMC.begin("/sdcard", true)) {
Serial.printf("microSD: %llu MB\n", SD_MMC.cardSize() / (1024 * 1024));
rgbLedWrite(RGB_BUILTIN, 0, 32, 0); // green: card mounted
} else {
Serial.println("microSD: mount failed");
rgbLedWrite(RGB_BUILTIN, 32, 0, 0); // red: no card
}
}
void loop() {}
Питание и нагрев
Плату питают через любой USB‑C или через вывод 5V. Вывод 3V3 — это выход стабилизатора платы, от него можно питать маломощные датчики на 3,3 В. GPIO работают только с уровнем 3,3 В: 5-вольтовый сигнал на входе может повредить модуль, а абсолютный максимум его питания — 3,6 В.
Камера, передача по Wi‑Fi и запись на карту дают пики тока. Даташит модуля требует от источника питания не меньше 0,5 А, и слабый USB-порт или тонкий длинный кабель легко проваливают это требование. Симптомы узнаваемы: плата перезагружается в момент старта потока, а в логе появляется сообщение детектора пониженного напряжения — brownout. Лечится это коротким качественным кабелем и нормальным блоком питания на 5 В.
Второе ограничение менее очевидно — температура. Модули с Octal PSRAM, включая N16R8, рассчитаны на окружающую температуру до 65 °C, тогда как варианты без PSRAM — до 85 °C. Espressif оговаривает, что с включённой коррекцией ошибок PSRAM (ECC) предел поднимается до 85 °C ценой 1/16 объёма памяти. Камера и радио постоянно греют плату, поэтому в закрытом корпусе на солнце этот запас кончается быстро — вентиляционные отверстия лучше предусмотреть заранее.
Что на ней собрать: три показательных сценария
1. Камера для 3D-принтера
Посмотреть издалека, как идёт печать, и заодно собрать таймлапс — самый естественный сценарий для такой платы. Проект Prusa-Firmware-ESP32-Cam, прошивка для подключения камеры к сервису Prusa Connect, отдельно описывает плату Freenove ESP32-S3-WROOM. Проверены там модули OV2640, так что совместимость с OV5640 придётся выяснять самостоятельно, но раскладка платы та же.
2. Таймлапс-регистратор со своей картой
Слот microSD превращает плату в автономный регистратор: проснуться по таймеру, сделать JPEG-снимок, записать его на карту и снова уснуть. Так снимают рост растений, стройку за окном или долгий процесс в мастерской. Для питания от аккумулятора плата, правда, не оптимизирована: светодиод ON горит постоянно, а вывод PWDN камеры не разведён, так что аппаратно обесточить сенсор нельзя — остаётся только программный режим ожидания через SCCB. Ток во сне будет заметно выше, чем у голого модуля; для таймлапса с питанием от сети это неважно, для батарейного — существенно.
3. USB-вебкамера и зрение на самом устройстве
Нативный USB позволяет ESP32-S3 представиться компьютеру веб-камерой. В esp-iot-solution от Espressif есть пример usb_webcam: плата становится UVC-устройством и отдаёт MJPEG, а в списке режимов примера есть 1280 × 720 при 15 кадрах в секунду. Собирается он по умолчанию для ESP32-S3-EYE, то есть для той же карты пинов, что у этой платы. Второе направление — обработка кадра прямо на устройстве: фреймворк ESP-WHO от Espressif ориентирован на ESP32-S3 и умеет, например, находить лица без всякого облака.
Сильные и слабые стороны
| Плюсы | Минусы |
|---|---|
| Два USB‑C: прошивка без адаптера и нативный USB | Разъёмы подписаны только на обороте, их легко перепутать |
| 16 МБ Flash и 8 МБ Octal PSRAM | Модули с Octal PSRAM рассчитаны только до 65 °C |
| Сменная камера на 5 Мп | С OV5640 бывает чёрный кадр, приходится подбирать частоту XCLK |
| Слот microSD прямо на плате | Карта занимает три вывода и конфликтует с внешним JTAG |
| Все 36 GPIO модуля на гребёнках, занятые помечены на шелкографии | Без оговорок свободны только шесть выводов |
| Карта пинов совпадает с ESP32-S3-EYE, готовые примеры подходят с минимальной правкой | Для батарейных устройств не оптимизирована: PWDN не разведён, светодиод питания горит всегда |
| Пользовательский и RGB-светодиоды на плате | Партии различаются камерой и мостом USB–UART |
Итог
ESP32-S3-CAM N16R8 — это ESP32-CAM, у которой вылечили почти все детские болезни: нормальный USB, много памяти, сменная камера на 5 Мп и честная маркировка занятых выводов прямо на плате. Для камеры в мастерской, таймлапса, наблюдения за 3D-принтером или экспериментов с машинным зрением это очень удобная основа.
Цена удобства — плотная упаковка. Камера и карта памяти съедают почти все выводы, PSRAM нужно включить правильно, а OV5640 может потребовать подбора частоты. Перед первой прошивкой полезно пройтись по короткому списку:
- Профиль ESP32S3 Dev Module: Flash 16 МБ, QIO 80MHz, PSRAM — OPI PSRAM.
- Карта пинов —
CAMERA_MODEL_ESP32S3_EYE, а не AI-Thinker. - Кадровые буферы — в PSRAM, формат — JPEG.
- microSD — однобитный SDMMC на GPIO38, 39 и 40.
- Кабель — в тот разъём, который соответствует настройке USB CDC On Boot.
- Новые выводы — сначала из списка GPIO1, 14, 21, 41, 42 и 47.
- GPIO0, 3, 45 и 46 — без внешних цепей, которые меняют их уровень при сбросе.
Всё сказанное выше — в одном файле: справочник по выводам и аппаратным ограничениям платы. Его удобно держать рядом со скетчем или отдать агенту-программисту, чтобы тот не выдумывал распиновку.