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 WROOM CAM. Ліва гребінка згори вниз: 3V3, EN, GPIO4, 5, 6, 7, 15, 16, 17, 18, 8, 3, 46, 9, 10, 11, 12, 13, 14, 5V. Права: GPIO43 (TX), 44 (RX), 1, 2, 42, 41, 40, 39, 38, 37, 36, 35, 0, 45, 48, 47, 21, 20, 19, GND. Кольорові плашки позначають камеру, microSD, PSRAM, USB, UART, JTAG, ADC і сенсорні входи.
ESP32-S3 WROOM CAM: обидві гребінки та функції кожного виводу. Натисніть, щоб відкрити в повному розмірі.

Про яку саме плату йдеться

У магазинах цю плату називають по-різному: 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 виведено на гребінки
ПроцесорДва ядра Xtensa LX7, до 240 МГц, FPUВистачає на JPEG-потік, Wi‑Fi і логіку застосунку одночасно; є інструкції для прискорення нейромереж і обробки сигналів
Пам’ять SoC512 КБ SRAM, 384 КБ ROMДля кадрів камери внутрішньої пам’яті замало — їм місце в PSRAM
Flash16 МБ, Quad SPIВистачає на великий застосунок, OTA і файлову систему
PSRAM8 МБ, Octal SPI (OPI)Кадрові буфери камери; в Arduino IDE потрібен режим OPI PSRAM
Wi‑Fi2,4 ГГц, 802.11 b/g/n, до 150 Мбіт/сПотокове відео MJPEG, надсилання знімків, оновлення по повітрю
BluetoothBluetooth 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-пристрої та налагодження — через лівий
GPIO36 виводів на двох гребінках по 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. Легенду до них надруковано на звороті.

Ліва гребінка, згори вниз

ВивідЩо на ньомуЧи можна зайняти
3V33,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Так
GPIO40microSD: D0; MTDO зовнішнього JTAGЛише без карти
GPIO39microSD: CLK; MTCK зовнішнього JTAGЛише без карти
GPIO38microSD: CMDЛише без карти
GPIO37Octal PSRAM всередині модуляНіколи
GPIO36Octal PSRAM всередині модуляНіколи
GPIO35Octal PSRAM всередині модуляНіколи
GPIO0Кнопка BOOT, страпінг-пінОбережно
GPIO45Страпінг-пін: напруга живлення пам’ятіКраще не чіпати
GPIO48RGB-світлодіод, сумісний із WS2812З урахуванням світлодіода
GPIO47ВільнийТак
GPIO21ВільнийТак
GPIO20Нативний USB: D+ (лівий роз’єм)Лише без нативного USB
GPIO19Нативний USB: D− (лівий роз’єм)Лише без нативного USB
GNDЗемляНе GPIO

Виводи 35–37 виведено на гребінку, але користуватися ними не можна: у модулях з Octal PSRAM вони всередині підключені до пам’яті, і будь-який зовнішній сигнал на них заважає її роботі.

36 GPIO — і скільки з них ваших

Якщо звести все докупи, картина спускає з небес на землю:

Чим зайнятоGPIOПравило
Камера4–13, 15–18Зайняті, поки камера ввімкнена
microSD38–40Зайняті, поки карту змонтовано
Octal PSRAM35–37Не використовувати ніколи
Нативний USB19, 20Вільні, лише якщо не потрібен лівий роз’єм
UART0 і міст USB–UART43, 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.

І чотири правила про страпінг-піни, які заощадять вам вечір:

  1. GPIO0 — це кнопка BOOT. Якщо під час скидання на ньому низький рівень, чип входить у режим завантаження замість запуску програми. Зовнішня схема не повинна притягувати GPIO0 до землі під час старту.
  2. GPIO46 за замовчуванням підтягнутий до землі й разом із GPIO0 вибирає режим завантаження. Поєднання «низький рівень на GPIO0, високий на GPIO46» під час скидання неприпустиме.
  3. GPIO45 задає напругу живлення пам’яті: низький рівень під час скидання — 3,3 В, високий — 1,8 В. Flash і PSRAM цього модуля розраховані на 3,3 В, тому високий рівень на GPIO45 під час скидання неприпустимий. За замовчуванням вивід підтягнутий до землі — так його й варто залишити.
  4. 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.

ПараметрЗначенняЧому
BoardESP32S3 Dev ModuleУніверсальний профіль для ESP32-S3
Flash Size16MB (128Mb)Реальний обсяг Flash модуля N16R8
Flash ModeQIO 80MHzFlash тут підключено по Quad SPI; режим OPI 80MHz призначений для модулів з Octal Flash
PSRAMOPI PSRAMPSRAM підключено по Octal SPI; із QSPI PSRAM або Disabled програма її не знайде
Partition Scheme16M Flash (3MB APP/9.9MB FATFS)CameraWebServer потребує щонайменше 3 МБ під застосунок, решта йде під файли
USB CDC On BootDisabled — робота через правий роз’єм, Enabled — через лівийВизначає, в який порт іде Serial
USB ModeHardware CDC and JTAGВбудований USB-Serial-JTAG; режим USB-OTG (TinyUSB) потрібен для власних USB-пристроїв
Upload ModeUART0 / 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 може вимагати підбору частоти. Перед першою прошивкою корисно пройтися коротким списком:

  1. Профіль ESP32S3 Dev Module: Flash 16 МБ, QIO 80MHz, PSRAM — OPI PSRAM.
  2. Карта пінів — CAMERA_MODEL_ESP32S3_EYE, а не AI-Thinker.
  3. Кадрові буфери — у PSRAM, формат — JPEG.
  4. microSD — однобітний SDMMC на GPIO38, 39 і 40.
  5. Кабель — у той роз’єм, що відповідає налаштуванню USB CDC On Boot.
  6. Нові виводи — спершу зі списку GPIO1, 14, 21, 41, 42 і 47.
  7. GPIO0, 3, 45 і 46 — без зовнішніх кіл, які змінюють їхній рівень під час скидання.

Усе сказане вище — в одному файлі: довідник з виводів та апаратних обмежень плати. Його зручно тримати поруч зі скетчем або віддати агентові-програмісту, щоб той не вигадував розпіновку.