Справочник платы
ESP32-CAM: распиновка, прошивка и подключение к Arduino
ESP32-CAM — плата на ESP32 с камерой, слотом для карты microSD и вспышкой, размером 27 × 40,5 мм. Своего USB у неё нет, поэтому первый вопрос — чем её прошить. Здесь — распиновка 16 выводов и какие из них на самом деле свободны, три способа прошивки, в том числе через Arduino Uno, что выбрать в меню и как получить видео в браузере. Тексты ошибок приведены дословно: по ним удобно искать свою беду на странице.
Что это за плата
Что такое ESP32-CAM
Плату ESP32-CAM придумала китайская компания AI-Thinker, а копируют её многие фабрики. На ней модуль ESP32-S с чипом ESP32 внутри, микросхема дополнительной памяти PSRAM, слот microSD, белый светодиод-вспышка и разъём для камеры. Камера идёт в комплекте на шлейфе: обычно OV2640 на 2 мегапикселя, но всё чаще — OV5640 на 5 мегапикселей. Программируется плата на языке Arduino: setup(), loop() и digitalWrite() работают так же, как на Uno. Расплата за размер — почти все выводы чипа уже заняты камерой и памятью.
Характеристики ESP32-CAM
| Модуль | ESP32-S от AI-Thinker, внутри чип ESP32: два ядра до 240 МГц |
| Оперативная память | 520 КБ в чипе и PSRAM — дополнительная память для кадров: программа видит 4 МБ |
| Флеш-память | 4 МБ |
| Камера | OV2640 на 2 Мп; часто продают с OV5640 на 5 Мп или OV3660 на 3 Мп |
| Связь | Wi-Fi 802.11 b/g/n 2,4 ГГц, Bluetooth 4.2 (классический и BLE) |
| USB | нет: прошивка через выводы U0R и U0T |
| Карта памяти | слот microSD, AI-Thinker обещает карты до 4 ГБ |
| Светодиоды | белая вспышка на выводе 4 (горит при HIGH), красный на выводе 33 (горит при LOW) |
| Кнопки | одна — RST, сброс, на обратной стороне платы. Кнопки BOOT нет |
| Питание | 5 В на вывод 5V или стабилизированные 3,3 В на вывод 3V3 |
| Ток по паспорту | 180 мА при 5 В без вспышки, около 310 мА со вспышкой |
| Антенна | печатная на модуле и разъём IPEX для внешней — работает одна из двух |
| Логика | 3,3 В; на вход — не больше 3,6 В |
| Размер и вес | 27 × 40,5 × 4,5 мм, 10 г |
Чип на платах встречается разных ревизий. Снаружи их не отличить — металлический экран модуля одинаковый, а какой стоит у вас, покажет скетч из раздела про первую прошивку: ESP32-D0WDQ6 или ESP32-D0WD, на новых партиях — с окончанием -V3. PSRAM — это не часть чипа, а отдельная микросхема на плате. Бывает на 4 МБ и на 8 МБ, но ESP32 напрямую обращается не больше чем к 4 МБ внешней памяти, поэтому программа в обоих случаях увидит около 4 МБ.
Логика у платы 3,3-вольтовая: на вход нельзя подавать больше 3,6 В. Сигнал от пятивольтовой Arduino подключают через делитель из двух резисторов или преобразователь уровней.
Документы, если нужны подробности:
- Принципиальная схема AI-Thinker ESP32-CAM V1.6 (PDF)
- Паспорт модуля ESP32-CAM от AI-Thinker (PDF, на английском)
- Паспорт чипа ESP32 от Espressif (PDF, на английском)
- Ответы Espressif на частые вопросы про камеру (на английском)
Антенна: встроенная или внешняя
Рядом с маленьким круглым разъёмом IPEX стоит перемычка — резистор на 0 Ом на трёх площадках. Она выбирает, куда идёт сигнал: на печатную антенну модуля или на разъём. Обе сразу не работают. Если купили внешнюю антенну, а сигнал не стал лучше, перемычку нужно перепаять в другое положение. Без внешней антенны держите плату подальше от металла и не закрывайте край модуля с зигзагом антенны.
OV2640, OV3660 или OV5640: какая камера у вас
Камеру определяет драйвер сам, по ответу датчика. В скетче ничего менять не нужно: для платы AI-Thinker с любой из трёх камер выбирается одна и та же модель, CAMERA_MODEL_AI_THINKER. Название датчика печатают скетчи «Снимок по ссылке» и «Снимки по расписанию» ниже — строка «Камера: OV2640» в мониторе порта.
| Камера | Разрешение | JPEG | Что учесть |
|---|---|---|---|
| OV2640 | 2 Мп, до 1600 × 1200 | есть | Штатная камера: под неё сделаны и плата, и пример |
| OV3660 | 3 Мп, до 2048 × 1536 | есть | Драйвер её узнаёт, а пример сам переворачивает картинку и поправляет яркость |
| OV5640 | 5 Мп, до 2560 × 1920 | есть | Автофокус в пакете для Arduino выключен. Кадр больше 1600 × 1200 может не поместиться в буфер примера. При долгом видео может заметно нагреваться |
| GC2145 | 2 Мп, до 1600 × 1200 | нет | Пример с ней не запустится: ему нужен JPEG |
OV2640 или OV5640: что выбрать
Пять мегапикселей нужны для снимков с деталями. Для видео в браузере ставят 640 × 480 или 800 × 600: больший кадр дольше сжимать и передавать по Wi-Fi, и поток становится рывками. Такое разрешение есть у всех трёх камер. Если OV5640 продают с автофокусом, имейте в виду: в пакете ESP32 для Arduino автофокус выключен, и где окажется резкость, зависит от самого модуля. И ещё: при долгом видео OV5640 может заметно нагреваться, поэтому в тесный корпус без отверстий её лучше не прятать.
В магазине iarduino ESP32-CAM продаётся как раз с камерой OV5640: 1138 ₽, артикул 1309. Плата устроена так же, как AI-Thinker, и всё на этой странице к ней относится. Подпись нижнего правого вывода — GND или GND/R — посмотрите на своей плате: встречаются обе, а чем они отличаются, показывает переключатель на схеме ниже.
Распиновка ESP32-CAM
Плата нарисована стороной с камерой к вам, слотом карты вверх. Обе гребёнки по 8 контактов, подписи — как на самой плате. Переключатель сверху показывает разницу партий: на части новых плат нижний правый контакт подписан не GND, а GND/R. Наведите на категорию в легенде, чтобы подсветить её выводы, и нажмите на неё, чтобы прочитать пояснение.
Классическая плата AI-Thinker. Своего USB нет: прошивают её через выводы U0R и U0T. Вывода сброса на гребёнке нет — только кнопка RST на самой плате, на обороте. Поэтому подставка MB не может перезапустить такую ESP32-CAM, и режим прошивки включают руками: держат IO0 и нажимают RST на самой плате.
Камера занимает выводы 0, 5, 18, 19, 21, 22, 23, 25, 26, 27, 32, 34, 35, 36 и 39, PSRAM — 16 и 17, флеш-память — 6–11. Красный светодиод висит на 33, и наружу этот вывод не выведен. Вот почему на гребёнку попали только 16 контактов, и половина из них — питание, земля и порт для прошивки. Для сравнения: у классической ESP32 DevKit на гребёнки выведено 30–38 контактов.
VCC — не вход, а выход: на нём 3,3 В, реже 5 В, смотря как запаяна перемычка на плате. Кнопка RST и красный светодиод — на обратной стороне платы, со стороны модуля с антенной.
Какие выводы свободны
Всё зависит от карты памяти. Её линии и есть почти все свободные выводы:
| Что работает | Свободные выводы |
|---|---|
| Камера, карты нет | 2, 4, 12, 13, 14, 15 — с оговорками про пины запуска |
| Камера и карта в 1-битном режиме | 4 и 12. Вывод 13 к ним не относится: карта следит за ним, и если опустить его в LOW, она перестанет отвечать |
| Камера и карта в обычном, 4-битном режиме | ни одного, кроме U0R и U0T |
| Вывод | Чем занят на плате | Можно ли занять |
|---|---|---|
| IO13, IO14 | Карта microSD | Да, если карта не нужна. Самые спокойные выводы платы |
| IO15 | Карта; пин запуска | Да, если карта не нужна. LOW при включении безобиден: загрузчик просто не напечатает свои строки |
| IO2 | Карта; пин запуска | Осторожно: при включении не подтягивайте к плюсу, иначе плата не войдёт в режим прошивки |
| IO12 | Карта; задаёт напряжение флеш-памяти | Осторожно: HIGH при включении — и плата не запустится и не прошьётся |
| IO4 | Вспышка; карта | Только как выход, и вспышка будет вспыхивать вместе с сигналом. Как вход не годится: транзистор вспышки прижимает линию примерно к 0,7 В, и кнопка с подтяжкой всегда читается как LOW |
| IO16 | Микросхема PSRAM | Нет |
| IO0 | Тактовый сигнал камеры; режим прошивки | Нет: после старта вывод занят камерой |
| U0R, U0T | Прошивка и монитор порта | Только если обойтись без Serial |
Выводы 0, 2, 12 и 15: почему плата не запускается
Это пины запуска: их уровень чип читает в момент включения и сброса, а потом они работают как обычные. Самый коварный — 12. Он выбирает напряжение флеш-памяти: если при включении на нём HIGH, флеш получает 1,8 В вместо 3,3, и плата не запускается и не прошивается. Подтянуть его вверх может что угодно — модуль с резистором, шина I²C, светодиод к плюсу. Поэтому ничего такого к выводу 12 не подключайте. А если плата вчера работала, а сегодня «умерла», первым делом отключите всё от вывода 12.
Вывод 0 решает, что делать после сброса: LOW — ждать прошивку, HIGH — запускать программу. На плате он подтянут к плюсу, а после старта на нём работает тактовый сигнал камеры. Вывод 2 при входе в режим прошивки тоже должен быть в LOW, поэтому при включении его не тянут к плюсу. Вывод 15 безобиден: LOW на нём при включении только отключает служебные строки загрузчика.
Wire, SPI, Serial1 и Serial2 по умолчанию попадают на камеру
Пункт «AI Thinker ESP32-CAM» взял номера выводов у обычной ESP32 DevKit. Поэтому Wire.begin() без номеров займёт 21 и 22, SPI.begin() — 18, 19, 23 и 5, Serial1.begin(9600) — 26 и 27, по которым камера получает команды, а Serial2.begin(9600) — 25, линию камеры, и 4, вспышку. Камера после этого перестанет работать.
Указывайте выводы явно: например, датчик I²C без карты памяти — Wire.begin(14, 15), SDA на 14 и SCL на 15. Модуль датчика питайте от вывода 3V3: многие модули подтягивают линии I²C к своему питанию, и от вывода 5V на 14 и 15 пришли бы 5 В. Камера пользуется своей шиной I²C, с Wire они не мешают друг другу.
Аналоговые входы и Wi-Fi
Все свободные выводы ESP32-CAM относятся ко второму блоку аналоговых входов (ADC2). Его же использует Wi-Fi, и пока Wi-Fi включён, analogRead() на этих выводах молча возвращает 0 — без ошибки и без предупреждения. Аналоговый датчик рядом с камерой, которая передаёт видео, напрямую не прочитать. Обойти это можно внешним АЦП на шине I²C (например, ADS1115) или датчиком с цифровым выходом.
Питание ESP32-CAM: почему 5 В, а не 3,3
На плате стоит стабилизатор AMS1117: из напряжения на выводе 5V он делает 3,3 В для чипа, памяти и камеры. Ему нужен запас — на входе на 1,1–1,3 В больше, чем на выходе. Отсюда главное правило: 5 В подают на вывод 5V, а 3,3 В — только на вывод 3V3. Выберите вариант:
Источник нужен на 0,5 А и больше. Частые причины перезагрузок — порт ноутбука, длинный тонкий кабель и разветвитель USB без своего блока питания: плата начинает перезапускаться, когда включает Wi-Fi или вспышку. Помогает электролитический конденсатор на 100–470 мкФ и 10 В прямо между выводами 5V и GND. При 5 В на входе стабилизатор платы заметно греется: в тепло уходит около 0,3 Вт, а со вспышкой — около 0,5 Вт.
От аккумулятора. Один литиевый аккумулятор даёт 3,0–4,2 В. На вывод 5V этого мало: после стабилизатора останется от 3,1 В у заряженного аккумулятора и меньше 2 В у севшего, а чипу нужно не меньше 3,0 В. На вывод 3V3 — много: заряженный аккумулятор даст 4,2 В при пределе 3,6. Нужен повышающий преобразователь до 5 В на вывод 5V. Подробнее про стабилизаторы — в статье про питание.
Как прошить ESP32-CAM: три способа
У платы нет ни USB, ни кнопки BOOT. Программу она получает через выводы U0R и U0T — порт UART0, а в режим прошивки входит, если в момент сброса вывод IO0 соединён с землёй. Нужен переходник с USB на этот порт. Подойдёт любой из трёх вариантов:
Через плату ESP32-CAM-MB
MB — маленькая подставка с разъёмом USB, преобразователем USB-UART CH340 и двумя кнопками: IO0 и RST. ESP32-CAM вставляется в неё сверху, и получается плата с USB, как обычная DevKit. Драйвер CH340 Windows 10 и 11 обычно ставят сами; если порт не появился — поставьте драйвер, а если и с ним платы нет в списке — что ещё проверить.
Сама переводить плату в режим прошивки подставка может, только если у ESP32-CAM сброс выведен на гребёнку, — это платы, где нижний правый вывод подписан GND/R и перемычка рядом выводит на него сброс. На классической ESP32-CAM V1.6 там земля: кнопка RST подставки и её автоматический сброс попадают на вывод земли и ничего не сбрасывают. С такой платой режим прошивки включают руками:
- Нажмите и держите кнопку IO0 на подставке.
- Нажмите и отпустите кнопку RST на самой ESP32-CAM — она на обратной стороне платы.
- Отпустите IO0 и запускайте загрузку.
- После загрузки ещё раз нажмите RST на ESP32-CAM — программа запустится.
Если до кнопки RST трудно дотянуться, сделайте то же переподключением: держите IO0 и вставьте кабель USB — плата включится сразу в режиме прошивки. А если новая подставка не прошивает ни в какую, осмотрите её снизу: бывали подставки с перемычками, запаянными между контактами гребёнки, и с ними плата не отвечает.
Через переходник USB-UART
Подойдёт любой переходник на CH340, CP2102 или FT232 с логикой 3,3 В. TX переходника — к U0R платы, RX — к U0T, то есть крест-накрест. 5V — к 5V. GND — к выводу GND рядом с 5V: нижний правый вывод на части плат подписан GND/R, и землю туда не ведут. Перемычкой соедините IO0 с GND, нажмите RST на плате — и можно загружать. После загрузки снимите перемычку и снова нажмите RST. Так же, пятью проводами, прошивают Arduino Pro Mini, а про сам порт UART и делитель для пятивольтовых сигналов — в статье про UART.
Через Arduino Uno
У Arduino Uno R3 и её клонов с CH340 есть свой преобразователь USB-UART на выводах 0 и 1, и им можно воспользоваться. У Uno R4 отдельного преобразователя на этих выводах нет — с ней так не получится. Чтобы основной контроллер Uno не мешал, её вывод RESET соединяют с GND. Дальше провода идут прямо: вывод 0 «RX» Uno — к U0R, вывод 1 «TX» — к U0T. Подписи RX и TX на Uno сделаны для её собственного контроллера, а мы подключаемся мимо него. 5V — к 5V, GND — к выводу GND рядом с 5V, IO0 — к GND.
Перемычку IO0–GND ставьте до того, как подключите Uno к компьютеру: тогда ESP32-CAM сразу включится в режиме прошивки. Если плата уже была включена, нажмите на ней RST. После загрузки снимите перемычку и снова нажмите RST — программа запустится.
Есть два риска. Сигнал с Uno пятивольтовый: на вход U0R приходит 5 В через резистор 1 кОм, а ESP32 по паспорту допускает 3,6 В. Многие так прошивают, но гарантий никто не даёт: надёжнее делитель или подставка MB. Второе — скорость. Пункт «AI Thinker ESP32-CAM» грузит программу на 460800 бод, а у оригинальной Uno преобразователь — отдельный чип ATmega16U2 — выдаёт эту скорость с ошибкой 8,5 %. Если загрузка обрывается после строки Changing baud rate to 460800, выберите плату «ESP32 Dev Module» и скорость 115200 — что ещё выставить, сказано в разделе про меню.
Подключение ESP32-CAM к Ардуино: три разных вопроса
Под словами «подключить ESP32-CAM к Ардуино» понимают три разные задачи.
- Прошить ESP32-CAM через Uno — схема выше, в разделе про три способа.
- Работать с Uno в одном проекте. Платы связывают по UART. На ESP32-CAM при пустом слоте карты для этого годятся, например, выводы 13 (приём) и 14 (передача):
Serial1.begin(9600, SERIAL_8N1, 13, 14). Номера указывайте обязательно: без них Serial1 займёт 26 и 27, а это линии камеры. Земли плат соединяют проводом. Сигнал от Uno к выводу 13 — через делитель с 5 В до 3,3 В, а сигнал с вывода 14 Uno понимает и так. На Uno — программный порт SoftwareSerial на двух свободных выводах. Так передают команды и короткие данные, но не видео: для кадров скорость слишком мала. Вывод 12 для приёма не берите: в покое линия UART держит HIGH, а HIGH на 12 при включении не даст плате запуститься — даже через делитель. Как связать две платы и собрать делитель — в статье про UART. - Подключить к Arduino IDE. Это про пакет ESP32 и выбор платы в меню — следующий раздел.
Какую плату выбрать в Arduino IDE для ESP32-CAM
Сначала поставьте пакет ESP32 — как это сделать. Затем в списке плат выберите «AI Thinker ESP32-CAM» и порт. В этом пункте нужное уже выставлено:
| Параметр | AI Thinker ESP32-CAM | ESP32 Dev Module по умолчанию |
|---|---|---|
| PSRAM | включена всегда, пункта нет | Disabled — поставьте Enabled |
| Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) | Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) |
| Upload Speed | 460800, пункта нет | 921600, можно выбрать 115200 |
| Flash Size | 4MB, пункта нет | 4MB |
| LED_BUILTIN | нет | нет |
«ESP32 Dev Module» нужен, когда хочется другой скорости загрузки — например, при прошивке через Uno. Тогда выставьте PSRAM «Enabled», Partition Scheme «Huge APP (3MB No OTA/1MB SPIFFS)» и Upload Speed «115200». У «ESP32 Wrover Module» PSRAM уже включена, но разметку тоже нужно поменять на Huge APP. В Trema IDE эти пункты открываются кнопкой «Параметры платы» на верхней панели.
Первая прошивка: красный светодиод и проверка памяти
Привычный «Маячок» (Blink) на ESP32-CAM не соберётся: у этой платы в пакете не задан LED_BUILTIN, и сборка остановится с ошибкой:
error: 'LED_BUILTIN' was not declared in this scopeКрасный светодиод на плате подключён к выводу 33 и горит наоборот — при LOW. Вспышка на выводе 4 горит при HIGH. Первая программа мигает красным и раз в две секунды печатает, что за чип стоит на плате и сколько у него памяти:
// Первая прошивка ESP32-CAM: мигает красный светодиод на плате, а в
// монитор порта (115200) раз в 2 секунды печатается, что за чип и сколько
// у него памяти. Камера тут не участвует — проверяем саму плату.
const int LED_RED = 33; // красный светодиод: горит при LOW, а не при HIGH
void setup() {
Serial.begin(115200);
pinMode(LED_RED, OUTPUT);
}
void loop() {
digitalWrite(LED_RED, LOW); // зажечь
delay(200);
digitalWrite(LED_RED, HIGH); // погасить
uint16_t rev = ESP.getChipRevision(); // 101 значит v1.1, 300 — v3.0
Serial.print("Чип: ");
Serial.print(ESP.getChipModel());
Serial.print(", ревизия v");
Serial.print(rev / 100);
Serial.print(".");
Serial.println(rev % 100);
Serial.print("Флеш-память, байт: ");
Serial.println(ESP.getFlashChipSize());
Serial.print("PSRAM, байт: ");
Serial.println(ESP.getPsramSize()); // около 4 МБ; 0 — памяти нет
Serial.println();
delay(1800);
}
- Подключите плату любым из трёх способов и выберите «AI Thinker ESP32-CAM» и порт.
- Переведите плату в режим прошивки: IO0 на землю — кнопкой на подставке или перемычкой — и RST на самой плате. Нажмите «Загрузить».
- Отпустите IO0 или снимите перемычку, нажмите RST и откройте монитор порта на скорости 115200.
В мониторе появятся модель чипа и его ревизия, флеш-память 4 194 304 байта и PSRAM — около 4 МБ. Если загрузка прошла, а светодиод не мигает и монитор молчит, — плату не перезапустили: нажмите RST на самой плате. Появилась строка waiting for download — IO0 всё ещё на земле: снимите перемычку и нажмите RST ещё раз.
PSRAM: 4 или 8 МБ и что значит ноль
PSRAM на ESP32-CAM — отдельная микросхема на 4 или 8 МБ. Чип ESP32 напрямую видит не больше 4 МБ внешней памяти, поэтому скетч в обоих случаях покажет около 4 МБ — это не брак. Ноль в строке PSRAM значит, что память не найдена: микросхема не отвечает или что-то подключено к выводу 16. Без PSRAM пример CameraWebServer запустится, но ограничит кадр 800 × 600, а скетчам на этой странице, которые держат кадры в PSRAM, памяти не хватит.
Вспышку можно включить так же, командой digitalWrite(4, HIGH). Но резистора, который ограничивает её ток, на плате нет: светодиод очень яркий и сильно греется. Держите её включённой только на время снимка.
Камера в браузере: пример CameraWebServer
Главный пример для этой платы уже есть в пакете ESP32. Он показывает видео с камеры на странице в браузере, делает снимки и даёт настроить яркость, контраст и разрешение.
- Выберите плату «AI Thinker ESP32-CAM» и откройте пример: в Arduino IDE — Файл → Примеры → ESP32 → Camera → CameraWebServer, в Trema IDE — раздел «Примеры», группа ESP32. Пока выбрана другая плата, этих примеров в списке нет.
- Перейдите на вкладку
board_config.h. По умолчанию там выбрана чужая плата, ESP-EYE: у неё камера подключена к другим выводам, и на ESP32-CAM ничего не заработает. Поставьте//перед строкой с ESP_EYE и уберите//перед строкой с AI_THINKER. Должно получиться так://#define CAMERA_MODEL_WROVER_KIT // Has PSRAM //#define CAMERA_MODEL_ESP_EYE // Has PSRAM ← здесь // добавили ... #define CAMERA_MODEL_AI_THINKER // Has PSRAM ← здесь // убрали - На главной вкладке скетча (в Arduino IDE это
CameraWebServer.ino, в Trema IDE она названа по имени проекта) впишите имя своей сети Wi-Fi и пароль вместо звёздочек в строкахconst char *ssidиconst char *password. Сеть нужна на 2,4 ГГц. - Выберите порт, переведите плату в режим прошивки и загрузите.
- Откройте монитор порта на 115200 и нажмите RST. Через несколько секунд появится строка
Camera Ready! Use 'http://192.168.1.57' to connect— с адресом вашей платы. - Откройте этот адрес в браузере компьютера или телефона в той же сети и нажмите Start Stream. Get Still — один снимок.
При старте пример сам ставит кадр 320 × 240, чтобы видео шло бойко, а крупнее выбирают в меню Resolution слева. Для OV3660 и OV5640 он открывает свою страницу настроек с их разрешениями. Если PSRAM не найдена, пример молча ограничивает кадр 800 × 600: крупнее в меню выбрать можно, но снимок придёт обрезанным. Распознавания лиц в примере пакета 3.x больше нет — кнопки Enroll Face из старых инструкций не ищите.
Как открыть камеру с телефона
Телефон должен быть подключён к той же сети Wi-Fi, что и плата. Откройте в его браузере адрес из монитора порта и нажмите Start Stream. Через мобильный интернет не получится: адрес вида 192.168.… виден только внутри домашней сети.
Почему видео видно только в одной вкладке
Поток идёт отдельно от страницы, на порту 81 (/stream), и обслуживает одного зрителя. Пока видео открыто на компьютере, на телефоне будет пусто. Закройте лишние вкладки — и поток появится там, где нужно.
ESP32-CAM не подключается к Wi-Fi
Если в мониторе только точки после WiFi connecting и адреса нет, плата не может подключиться: проверьте имя сети и пароль (регистр букв важен), диапазон 2,4 ГГц и расстояние до роутера. Остальные причины — в статье про Wi-Fi.
Скорость видео в кадрах в секунду пример печатает, только если в параметрах платы выставить Core Debug Level — подробность служебных сообщений — «Info». Тогда в мониторе пойдут строки MJPG: … fps: MJPG — так пример называет поток из кадров JPEG. Как плата раздаёт страницы, подробно — в статье про веб-сервер.
Снимок по ссылке с телефона
CameraWebServer большой и сложный. Если нужен просто кадр по запросу — для своего проекта, для умного дома или чтобы глянуть с телефона, — хватит короткого скетча. Плата печатает свой адрес, вы открываете его в браузере и видите свежий снимок. Адрес с ?flash=1 на конце делает снимок со вспышкой.
// Снимок по ссылке: плата подключается к Wi-Fi и печатает в монитор
// порта свой адрес. Откройте его в браузере телефона — увидите свежий
// кадр, обновите страницу — получите новый. Плата: AI Thinker ESP32-CAM.
#include <WiFi.h>
#include <WebServer.h>
#include "esp_camera.h"
// Сеть должна быть в диапазоне 2,4 ГГц: пятигигагерцевую плата не увидит.
const char WIFI_SSID[] = "имя вашей сети";
const char WIFI_PASS[] = "пароль от сети";
const int FLASH_PIN = 4; // белый светодиод-вспышка: горит при HIGH
WebServer server(80);
// Выводы камеры на плате AI-Thinker ESP32-CAM. Так она разведена,
// менять их не нужно. У других плат с камерой выводы свои.
bool startCamera(framesize_t size, int quality) {
camera_config_t config = {};
config.pin_pwdn = 32; // включает питание камеры
config.pin_reset = -1;
config.pin_xclk = 0; // тактовый сигнал камеры
config.pin_sccb_sda = 26;
config.pin_sccb_scl = 27;
config.pin_d7 = 35;
config.pin_d6 = 34;
config.pin_d5 = 39;
config.pin_d4 = 36;
config.pin_d3 = 21;
config.pin_d2 = 19;
config.pin_d1 = 18;
config.pin_d0 = 5;
config.pin_vsync = 25;
config.pin_href = 23;
config.pin_pclk = 22;
config.xclk_freq_hz = 20000000;
config.ledc_timer = LEDC_TIMER_0;
config.ledc_channel = LEDC_CHANNEL_0;
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = size;
config.jpeg_quality = quality; // 0–63: чем меньше, тем лучше
config.fb_count = 2; // два кадра в PSRAM
config.fb_location = CAMERA_FB_IN_PSRAM;
config.grab_mode = CAMERA_GRAB_LATEST; // всегда самый свежий кадр
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
// 0x106 — камера не ответила или не умеет JPEG; FFFFFFFF — не хватило
// памяти под кадр.
Serial.print("Камера не запустилась, ошибка 0x");
Serial.println(err, HEX);
return false;
}
// Какой датчик стоит на шлейфе: OV2640, OV3660, OV5640...
sensor_t *sensor = esp_camera_sensor_get();
camera_sensor_info_t *info = esp_camera_sensor_get_info(&sensor->id);
Serial.print("Камера: ");
Serial.println(info ? info->name : "неизвестная");
return true;
}
void sendPhoto() {
// Адрес с ?flash=1 на конце — снимок со вспышкой.
bool flash = server.arg("flash") == "1";
if (flash) {
digitalWrite(FLASH_PIN, HIGH);
delay(150); // камера должна успеть увидеть свет
}
camera_fb_t *fb = esp_camera_fb_get();
digitalWrite(FLASH_PIN, LOW); // вспышка без резистора греется: гасим сразу
if (!fb) {
server.send(500, "text/plain; charset=utf-8", "Камера не дала кадр");
return;
}
server.send_P(200, "image/jpeg", (const char *)fb->buf, fb->len);
esp_camera_fb_return(fb);
}
void setup() {
Serial.begin(115200);
Serial.println();
pinMode(FLASH_PIN, OUTPUT);
digitalWrite(FLASH_PIN, LOW);
if (!startCamera(FRAMESIZE_SVGA, 12)) { // 800×600
while (true) delay(1000); // без камеры дальше смысла нет
}
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.print("Подключаюсь к Wi-Fi");
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() - start > 20000) {
Serial.println();
Serial.println("Не подключается: проверьте имя сети и пароль");
start = millis(); // и пробуем дальше
}
}
Serial.println();
server.on("/", sendPhoto);
server.begin();
Serial.print("Готово. Откройте в браузере адрес ");
Serial.println(WiFi.localIP());
}
void loop() {
server.handleClient();
}
В начале монитор порта покажет, какая камера стоит на шлейфе, — например, Камера: OV5640. Если вместо этого появилась строка с ошибкой, ищите её код в таблице ниже.
ESP32-CAM не прошивается: «Failed to connect to ESP32» и другие ошибки
Когда загрузка не удалась, в журнале появляется длинная строка вроде этой:
A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode.Главное в ней — то, что после второго двоеточия. Вот что это значит именно для ESP32-CAM:
| Что пишет загрузка | Что это значит и что делать |
|---|---|
Wrong boot mode detected (0x13)! The chip needs to be in download mode. | Плата перезапустилась, но как обычно, а не в режиме прошивки: в момент сброса IO0 не был на земле. Держите IO0 на земле — кнопкой на подставке или перемычкой, — нажмите RST на самой плате и запускайте загрузку снова |
No serial data received. | С платы не пришло ни байта. Чаще всего плата просто не в режиме прошивки и молча выполняет свою программу: загрузчик не может сбросить её сам, если на гребёнке нет вывода сброса. Держите IO0 на земле и нажмите RST на самой плате. Не помогло — проверьте, не перепутаны ли TX и RX, есть ли общая земля и питание, тот ли порт выбран, не попал ли провод земли на вывод GND/R, а с Uno — что её RESET соединён с GND |
Invalid head of packet (0x…) | Плата работает со своей программой и шлёт её строки вместо ответа загрузчику — например, точки из CameraWebServer. Переведите её в режим прошивки: IO0 на землю и RST на самой плате |
Download mode successfully detected, but getting no sync reply: The serial TX path seems to be down. | Плата в режиме прошивки и сама отвечает, но не слышит команд компьютера. Проверьте провод от TX переходника до U0R платы (у Uno — от вывода 0 «RX» до U0R) и общую землю |
Timed out waiting for packet header | Так писали прежние версии загрузчика, и чаще всего по той же причине, что и 0x13: плата не в режиме прошивки |
waiting for download | В мониторе порта после загрузки: программа загрузилась, но IO0 так и остался на земле, и плата снова ждёт прошивку. Снимите перемычку и нажмите RST |
Остальные причины — не тот порт, занятый порт, кабель без линий данных — общие для всех плат и разобраны в статье про ошибки загрузки, а общие беды прошивки ESP32 — в разборе «ESP32 не прошивается».
Монитор порта молчит
Плата прошилась, а в мониторе порта пусто. Проверьте по порядку:
- Скорость монитора — 115200, как в скетчах на этой странице.
- Плату перезапустили после загрузки. На плате без вывода сброса на гребёнке загрузчик не может сделать это сам — нажмите RST на самой ESP32-CAM.
- IO0 больше не на земле. Если в мониторе только строка
waiting for download, плата всё ещё ждёт прошивку: снимите перемычку и нажмите RST. - Скетч печатает не только при старте. CameraWebServer, например, пишет адрес один раз, сразу после включения: откройте монитор и только потом нажмите RST.
Camera init failed with error 0x106 и другие ошибки камеры
Ошибки камеры печатает уже программа после запуска, в мониторе порта на скорости 115200:
| Строка в мониторе порта | Что это значит и что делать |
|---|---|
Camera init failed with error 0x106 | Камера не ответила или ответила не та. Перед этой строкой обычно стоят «Detected camera not supported.» и «Camera probe failed with error 0x106(ESP_ERR_NOT_SUPPORTED)». Чаще всего в board_config.h осталась модель ESP_EYE. Ещё — шлейф вставлен не до конца или не закрыта защёлка разъёма |
JPEG format is not supported on this sensor | Камера ответила, но не умеет сжимать кадр в JPEG, — например, GC2145. Код ошибки тот же, 0x106. Нужна OV2640, OV3660 или OV5640 |
Camera init failed with error 0xffffffff | Не хватило памяти под кадр, рядом — «frame buffer malloc failed». Скетчи на этой странице печатают тот же код заглавными: 0xFFFFFFFF. Проверьте скетчем из раздела про первую прошивку, что PSRAM не равна нулю |
Camera init failed with error 0x20001 | Этот код и 0x105 — из старых статей: так отвечали прежние версии пакета. В пакете 3.x вместо них 0x106 |
Шлейф камеры вставляют в разъём ровно и до упора, а потом закрывают защёлку. Если 0x106 появилась на плате, которая раньше работала, первым делом переставьте шлейф.
Brownout detector was triggered: плата перезагружается
Если сразу после прошивки или при включении Wi-Fi монитор порта пишет Brownout detector was triggered и плата перезагружается по кругу, — проседает питание. Детектор просадки перезапускает чип, когда напряжение после стабилизатора падает ниже примерно 2,43 В. Wi-Fi и камера потребляют рывками, и слабый источник в этот момент не вытягивает.
Что помогает: другой порт компьютера или блок питания на 5 В и 0,5 А, короткий толстый кабель, конденсатор на 100–470 мкФ между 5V и GND. И никаких 3,3 В на вывод 5V — разбор выше, в разделе про питание.
В старых скетчах встречается строка WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); — она отключает детектор. Плата перестанет перезагружаться с сообщением, но продолжит сбоить молча: зависать, терять Wi-Fi, портить снимки. Лечат питание, а не детектор.
Карта microSD: снимки по расписанию
Слот карты занимает выводы 2, 4, 12, 13, 14 и 15. Библиотека SD_MMC по умолчанию работает в 4-битном режиме — быстрее, но с двумя неудобствами: заняты все шесть выводов, а вспышка, которая сидит на той же линии, что и DATA1 карты, мигает при каждой записи. В 1-битном режиме, SD_MMC.begin("/sdcard", true), карта работает примерно на треть медленнее, зато освобождает выводы 4 и 12, а вспышка перестаёт мигать. Без лишней команды она может едва заметно светиться: держите вывод 4 в LOW, как в скетче ниже.
Карту форматируют в FAT32. AI-Thinker обещает карты до 4 ГБ; если большая карта не определяется, попробуйте карту поменьше. Как вообще писать файлы на карту — в статье про запись на карту памяти. Скетч каждые 30 секунд делает снимок 1600 × 1200 и сохраняет его файлом photo_1.jpg, photo_2.jpg и дальше, не затирая старые:
// Снимки по расписанию: каждые 30 секунд плата делает фото 1600×1200
// и сохраняет его на карту microSD: photo_1.jpg, photo_2.jpg и дальше.
// Плата: AI Thinker ESP32-CAM. Карта — в FAT32, вставлять до включения.
#include "esp_camera.h"
#include "SD_MMC.h"
const unsigned long INTERVAL_MS = 30000; // пауза между снимками
const int FLASH_PIN = 4; // вспышка: держим в LOW, иначе она едва заметно светится
int photoNumber = 1;
// Выводы камеры на плате AI-Thinker ESP32-CAM. Так она разведена,
// менять их не нужно. У других плат с камерой выводы свои.
bool startCamera(framesize_t size, int quality) {
camera_config_t config = {};
config.pin_pwdn = 32; // включает питание камеры
config.pin_reset = -1;
config.pin_xclk = 0; // тактовый сигнал камеры
config.pin_sccb_sda = 26;
config.pin_sccb_scl = 27;
config.pin_d7 = 35;
config.pin_d6 = 34;
config.pin_d5 = 39;
config.pin_d4 = 36;
config.pin_d3 = 21;
config.pin_d2 = 19;
config.pin_d1 = 18;
config.pin_d0 = 5;
config.pin_vsync = 25;
config.pin_href = 23;
config.pin_pclk = 22;
config.xclk_freq_hz = 20000000;
config.ledc_timer = LEDC_TIMER_0;
config.ledc_channel = LEDC_CHANNEL_0;
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = size;
config.jpeg_quality = quality; // 0–63: чем меньше, тем лучше
config.fb_count = 2; // два кадра в PSRAM
config.fb_location = CAMERA_FB_IN_PSRAM;
config.grab_mode = CAMERA_GRAB_LATEST; // всегда самый свежий кадр
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
// 0x106 — камера не ответила или не умеет JPEG; FFFFFFFF — не хватило
// памяти под кадр.
Serial.print("Камера не запустилась, ошибка 0x");
Serial.println(err, HEX);
return false;
}
// Какой датчик стоит на шлейфе: OV2640, OV3660, OV5640...
sensor_t *sensor = esp_camera_sensor_get();
camera_sensor_info_t *info = esp_camera_sensor_get_info(&sensor->id);
Serial.print("Камера: ");
Serial.println(info ? info->name : "неизвестная");
return true;
}
void setup() {
Serial.begin(115200);
Serial.println();
if (!startCamera(FRAMESIZE_UXGA, 10)) { // 1600×1200
while (true) delay(1000);
}
// 1-битный режим: данные идут по выводу 2, ещё нужны 14 и 15. Вывод 13
// не трогайте — карта следит за ним. Вывод 4 остаётся вспышке, и она не
// мигает при каждой записи.
if (!SD_MMC.begin("/sdcard", true)) {
Serial.println("Карта не найдена: вставьте её и перезапустите плату");
while (true) delay(1000);
}
pinMode(FLASH_PIN, OUTPUT);
digitalWrite(FLASH_PIN, LOW);
// Старые снимки не затираем: ищем первый свободный номер.
while (SD_MMC.exists("/photo_" + String(photoNumber) + ".jpg")) {
photoNumber++;
}
delay(5000); // первые секунды камера подстраивает яркость и цвет
}
void loop() {
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Камера не дала кадр");
delay(1000);
return;
}
String path = "/photo_" + String(photoNumber) + ".jpg";
File file = SD_MMC.open(path, FILE_WRITE);
if (file) {
size_t written = file.write(fb->buf, fb->len);
file.close();
if (written == fb->len) {
Serial.print("Сохранён ");
Serial.print(path);
Serial.print(", байт: ");
Serial.println(fb->len);
photoNumber++;
} else {
Serial.println("Карта заполнена или запись оборвалась");
}
} else {
Serial.println("Не удалось записать файл на карту");
}
esp_camera_fb_return(fb);
delay(INTERVAL_MS);
}
Первые секунды после включения камера подстраивает яркость и баланс белого, и снимки получаются тёмными или зеленоватыми. Поэтому скетч ждёт 5 секунд перед первым кадром. Для записи видео на карту есть готовый проект ESP32-CAM_MJPEG2SD — это уже не короткий скетч, а большая прошивка со своей инструкцией.
Место под программу и прошивка по воздуху
Разметка — то, как поделена флеш-память: сколько места под программу, сколько под файлы. У пункта «AI Thinker ESP32-CAM» по умолчанию стоит разметка «Huge APP (3MB No OTA/1MB SPIFFS)»: 3 МБ под программу из 4 МБ флеш-памяти. CameraWebServer занимает 1 060 481 байт — треть. В папке примера ещё лежит свой файл partitions.csv: он важнее пункта меню и даёт программе 3,75 МБ. Строка о размере программы после сборки всё равно называет предел из меню, 3 145 728 байт, хотя места на деле 3,75 МБ. Это не ошибка.
Прошивка по воздуху (OTA) с Huge APP невозможна: нужен второй раздел под новую программу. Выберите «Minimal SPIFFS (1.9MB APP with OTA/128KB SPIFFS)» — CameraWebServer занимает там 53 %. Файл partitions.csv в этом случае удалите из своей копии примера: в нём второго раздела нет. Как устроена прошивка по воздуху — в статье про OTA.
Одна ловушка именно этого пункта меню. У разметок «Regular 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)», «Regular 4MB with ffat (1.2MB APP/1.5MB FATFS)» и «Minimal (1.3MB APP/700KB SPIFFS)» сборка сравнивает размер программы всё с теми же 3 МБ, хотя места там 1,2–1,3 МБ. Программа побольше соберётся без единого предупреждения, а запускаться не будет: в мониторе порта появится строка Image length … doesn't fit in partition length 1310720. С этими разметками следите за размером сами. У «ESP32 Dev Module» такой беды нет: при его разметке по умолчанию CameraWebServer занимает 79 %, а программа больше 1,2 МБ остановит сборку с сообщением Sketch too big (в русской Arduino IDE — «Скетч слишком большой»).
Проекты на ESP32-CAM: что собирают
- Видеонаблюдение в браузере — пример CameraWebServer как есть, в корпусе и с нормальным блоком питания.
- Снимок по запросу или по датчику движения — как скетч «Снимок по ссылке» выше, плюс датчик движения на свободном выводе. Отправку снимка в Telegram делают готовыми библиотеками.
- Фотоловушку и съёмку по расписанию — скетч с картой microSD выше.
- Машинку с камерой — поток с камеры плюс драйвер моторов на свободных выводах при пустом слоте карты. Выводов хватает впритык, и про пины запуска помнить обязательно.
- Простое машинное зрение — поиск цвета или линии в кадре. Сложные нейросети на этом чипе медленны.
- Умный дом. Для Home Assistant ESP32-CAM часто прошивают ESPHome — это отдельная прошивка, её ставят не из Arduino IDE. Свой скетч с Home Assistant связывают через MQTT. Счётчики воды по фото тоже читает готовая прошивка, AI-on-the-edge-device.
Проекты попроще, на обычной Arduino, — в подборке проектов.
Чему не верить в старых инструкциях про ESP32-CAM
Многие инструкции про ESP32-CAM написаны под старые версии пакета ESP32. С тех пор многое поменялось:
- «В примере CameraWebServer есть распознавание лиц» — в пакете 3.x его убрали: остались поток, снимок и настройки камеры
- «Ошибка камеры — 0x20001 или 0x105» — это коды прежних версий, сейчас 0x106
- «Если не работает, выберите плату Node32s» — в этом пункте нет ни PSRAM, ни исправления для первых чипов ESP32, а разметки с 3 МБ под программу нет
- «Отключите детектор просадки одной строкой в начале скетча» — плата продолжит сбоить, только без предупреждения
- «Вывод 5V выдержит и 9–12 В» — стабилизатору платы придётся превращать в тепло 1–1,6 Вт, он перегреется
- «Скачайте библиотеку esp_camera.h отдельно» — она уже есть в пакете ESP32, качать её не нужно
- «#include "dl_lib.h"» в старых скетчах — такого файла в новых пакетах нет, сборка остановится
- «GPIO16 — свободный вход RX» — по этому выводу чип обращается к микросхеме PSRAM, занимать его нельзя
- «На выводе VCC всегда 3,3 В» — зависит от перемычки на плате
- «Uno подключайте крест-накрест» — когда RESET Uno на земле, провода идут прямо: RX к RX, TX к TX
- «Автофокус OV5640 работает» — в пакете для Arduino он выключен
ESP32-CAM или плата на ESP32-S3 с камерой
ESP32-CAM — самый дешёвый способ получить камеру с Wi-Fi, но у дешевизны есть цена: нет USB, почти нет свободных выводов, программа видит только 4 МБ PSRAM. Платы с камерой на ESP32-S3 — например, XIAO ESP32S3 Sense — прошиваются по USB как обычные платы, у них 8 МБ PSRAM и свободные выводы остаются, но стоят они дороже. Если камера не нужна, а нужна маленькая плата с Wi-Fi — ESP32-C3 Super Mini; если нужно много выводов — классическая ESP32 DevKit.
Чем программировать
ESP32-CAM в Trema IDE
Trema IDE — русская среда, совместимая с Arduino IDE: те же скетчи .ino, тот же пакет ESP32 и тот же пункт «AI Thinker ESP32-CAM». Пакет ставится из менеджера плат с российского зеркала, без ручных ссылок и VPN. Пример CameraWebServer лежит в разделе «Примеры» и открывается целиком, со всеми вкладками, параметры платы открываются кнопкой на верхней панели, а ошибки сборки объясняются по-русски, с переходом к нужной строке.
- Пакет ESP32 ставится с российского зеркала
- Пункт «AI Thinker ESP32-CAM» тот же, что в Arduino IDE
- Пример CameraWebServer открывается целиком, со всеми вкладками
- Скетчи .ino открываются без переделки
- Ошибки сборки — с объяснением по-русски и переходом к строке
Как прошить ESP32-CAM?
USB у платы нет. Нужна плата-подставка ESP32-CAM-MB, переходник USB-UART или Arduino Uno. Режим прошивки включается, если в момент сброса вывод IO0 соединён с землёй: на подставке держат кнопку IO0, без неё ставят перемычку IO0–GND, и в обоих случаях нажимают RST на самой ESP32-CAM. После загрузки перемычку снимают и снова нажимают RST — программа запускается.
Какую плату выбрать в Arduino IDE для ESP32-CAM?
«AI Thinker ESP32-CAM». В этом пункте PSRAM уже включена и стоит разметка Huge APP на 3 МБ под программу. Если выбрать «ESP32 Dev Module», выставьте PSRAM «Enabled» и Partition Scheme «Huge APP (3MB No OTA/1MB SPIFFS)». Node32s не подходит: в нём нет пункта PSRAM и разметки Huge APP.
Как подключить ESP32-CAM к Ардуино и прошить через Uno?
Подойдёт Uno R3 или клон с CH340, с Uno R4 так не получится. Вывод RESET Uno соединяют с GND, чтобы её собственный контроллер молчал. Дальше U0R платы — к выводу 0 «RX» Uno, U0T — к выводу 1 «TX»: здесь провода идут прямо, а не крест-накрест. IO0 — к GND, 5V — к 5V, земля общая. Перед загрузкой нажмите RST на ESP32-CAM, а после неё снимите перемычку с IO0 и нажмите RST ещё раз. Пункт «AI Thinker ESP32-CAM» грузит на 460800, а у оригинальной Uno на этой скорости ошибка 8,5 %: выберите «ESP32 Dev Module» со скоростью 115200, PSRAM Enabled и разметкой Huge APP. Сигналы Uno пятивольтовые, а ESP32 допускает не больше 3,6 В, поэтому надёжнее подставка MB или переходник на 3,3 В.
ESP32-CAM не прошивается: «Failed to connect to ESP32». Что делать?
Смотрите, что написано после двоеточия. «Wrong boot mode detected (0x13)» — плата запустилась как обычно: в момент сброса IO0 не был на земле. «No serial data received» — с платы ничего не пришло, и чаще всего она тоже не в режиме прошивки. В обоих случаях держите IO0 на земле и нажмите RST на самой ESP32-CAM: если плата V1.6 стоит в подставке MB, кнопка RST подставки её не сбрасывает. Не помогло — проверьте, не перепутаны ли TX и RX, общую землю и порт.
Что значит Camera init failed with error 0x106?
Камера не ответила или ответила не та. Чаще всего в файле board_config.h примера осталась модель ESP_EYE, а нужна CAMERA_MODEL_AI_THINKER. Ещё причины: шлейф вставлен не до конца или не закрыта защёлка, камера без JPEG, например GC2145. Коды 0x20001 и 0x105 из старых статей относятся к прежним версиям пакета.
Что делать, если ESP32-CAM пишет «Brownout detector was triggered»?
Проседает питание, когда плата включает Wi-Fi или камеру. Подайте 5 В на вывод 5V от блока на 0,5 А и больше, возьмите короткий кабель, поставьте конденсатор на 100–470 мкФ между 5V и GND. Отключать детектор не стоит: плата продолжит сбоить, только без предупреждения.
Можно ли питать ESP32-CAM от 3,3 В?
На вывод 5V — нет: стабилизатор платы теряет 1,1–1,3 В, и на выходе останется около 2,2 В, ниже порога детектора просадки. На вывод 3V3 — можно, если это стабилизированные 3,0–3,6 В от источника на 0,5 А и больше. Надёжнее всего 5 В на вывод 5V.
Какие выводы ESP32-CAM свободны?
Без карты памяти — 2, 4, 12, 13, 14 и 15, плюс U0R и U0T, если не нужен Serial. С картой в 1-битном режиме остаются 4 и 12; 13 занимать нельзя — карта перестанет отвечать, если он опустится в LOW. С картой в обычном, 4-битном режиме свободных нет. Вывод 12 при включении не должен быть в HIGH, а аналоговые входы на этих выводах не работают вместе с Wi-Fi.
Где светодиод на ESP32-CAM и почему Blink не собирается?
Красный светодиод — на выводе 33 и горит при LOW. Вспышка — на выводе 4 и горит при HIGH. LED_BUILTIN для этой платы в пакете не задан, поэтому стандартный Blink останавливается с ошибкой «'LED_BUILTIN' was not declared in this scope».
Сколько PSRAM на ESP32-CAM: 4 или 8 МБ?
На плате стоит отдельная микросхема на 4 или 8 МБ. Чип ESP32 напрямую обращается не больше чем к 4 МБ внешней памяти, поэтому программа в обоих случаях покажет около 4 МБ.
Чем отличаются камеры OV2640, OV3660 и OV5640 для ESP32-CAM?
Разрешением: 2, 3 и 5 мегапикселей, и все три выдают JPEG. Датчик драйвер определяет сам, в скетче остаётся модель CAMERA_MODEL_AI_THINKER. Для видео в браузере ставят 640 × 480 или 800 × 600, и тут разница в мегапикселях не важна. Автофокус OV5640 в пакете для Arduino выключен.
Есть ли распознавание лиц в примере CameraWebServer для ESP32-CAM?
В пакете ESP32 3.x — нет: остались видео, снимок и настройки камеры. Инструкции с кнопкой Enroll Face написаны под старые версии пакета.
Как открыть камеру ESP32-CAM с телефона?
Телефон должен быть в той же сети Wi-Fi, что и плата. Откройте в браузере адрес, который пример напечатал в мониторе порта, и нажмите Start Stream. Видео показывается одному зрителю: если оно открыто на компьютере, на телефоне будет пусто.
Какую карту microSD вставить в ESP32-CAM и почему мигает вспышка?
Карту форматируют в FAT32. AI-Thinker обещает карты до 4 ГБ — если большая не определяется, возьмите поменьше. Вспышка подключена к той же линии, что и DATA1 карты, поэтому в обычном 4-битном режиме мигает при записи. В 1-битном режиме, SD_MMC.begin("/sdcard", true), мигать перестанет.
Камера с Wi-Fi — за один вечер
Скачайте Trema IDE, поставьте пакет ESP32 с российского зеркала, выберите «AI Thinker ESP32-CAM», поправьте две строки в board_config.h, впишите свою сеть Wi-Fi — и видео с камеры откроется в браузере. Дома — бесплатно навсегда.
