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 виведено на гребінки |
| Процесор | Два ядра 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 — без зовнішніх кіл, які змінюють їхній рівень під час скидання.
Усе сказане вище — в одному файлі: довідник з виводів та апаратних обмежень плати. Його зручно тримати поруч зі скетчем або віддати агентові-програмісту, щоб той не вигадував розпіновку.