

The ESP32-CAM is a low-cost development board that combines the powerful ESP32 microcontroller with integrated Wi-Fi and Bluetooth capabilities, along with a camera module. This compact and versatile board is ideal for applications requiring wireless connectivity and image or video processing. Its small form factor and rich feature set make it a popular choice for IoT projects, home automation, surveillance systems, and AI-based image recognition tasks.








The ESP32-CAM is equipped with a range of features that make it suitable for various applications. Below are its key technical details:
The ESP32-CAM has a total of 16 pins. Below is the pinout and description:
| Pin Name | Type | Description |
|---|---|---|
| GND | Power | Ground connection |
| 3.3V | Power | 3.3V power supply output |
| 5V | Power | 5V power input |
| GPIO0 | I/O | Used for boot mode selection (connect to GND for programming) |
| GPIO1 (U0TXD) | UART | UART0 TX pin (used for serial communication) |
| GPIO3 (U0RXD) | UART | UART0 RX pin (used for serial communication) |
| GPIO4 | I/O | General-purpose I/O pin |
| GPIO12 | I/O | General-purpose I/O pin |
| GPIO13 | I/O | General-purpose I/O pin |
| GPIO14 | I/O | General-purpose I/O pin |
| GPIO15 | I/O | General-purpose I/O pin |
| GPIO16 | I/O | General-purpose I/O pin |
| GPIO33 | I/O | General-purpose I/O pin |
| RESET | Input | Reset pin (active low) |
| SD_CMD | SD Interface | Command pin for MicroSD card |
| SD_CLK | SD Interface | Clock pin for MicroSD card |
Note: GPIO0 must be connected to GND during programming. Disconnect it after flashing the firmware.
The ESP32-CAM can be used in a variety of projects. Below are the steps to get started:
5V pin or use an external USB-to-TTL adapter.Tools > Board.#include "esp_camera.h"
#include <WiFi.h>
// Replace with your network credentials
const char* ssid = "Your_SSID";
const char* password = "Your_PASSWORD";
// Camera configuration for AI-Thinker module
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
void startCameraServer();
void setup() {
Serial.begin(115200);
Serial.println();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Initialize the camera
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if (!esp_camera_init(&config)) {
Serial.println("Camera initialized successfully");
} else {
Serial.println("Camera initialization failed");
return;
}
// Start the camera server
startCameraServer();
}
void loop() {
delay(10000); // Keep the program running
}
Camera Initialization Failed:
Wi-Fi Connection Issues:
Serial Monitor Shows Garbage Characters:
ESP32-CAM Not Detected by Computer:
Q: Can I use the ESP32-CAM without a programmer?
A: Yes, you can use an external power supply and pre-flashed firmware, but a programmer is required for custom code.
Q: What is the maximum resolution of the camera?
A: The OV2640 camera supports up to 1600x1200 (UXGA) resolution.
Q: Can I use the ESP32-CAM for battery-powered projects?
A: Yes, but ensure the battery can provide sufficient current (at least 500mA).