

The ESP32-CAM is a low-cost development board manufactured by AI-Thinker (Part ID: ESP32-CAM-AI-THINKER) 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 IoT projects requiring video streaming, image capture, and wireless communication.








| Parameter | Specification |
|---|---|
| Microcontroller | ESP32-D0WD |
| Wireless Connectivity | Wi-Fi 802.11 b/g/n, Bluetooth 4.2 (Classic and BLE) |
| Camera Module | OV2640 (2MP resolution) |
| Flash Memory | 4 MB SPI Flash |
| RAM | 520 KB SRAM + 4 MB PSRAM |
| Operating Voltage | 3.3V |
| Input Voltage Range | 5V (via external power supply or USB-to-TTL adapter) |
| GPIO Pins | 9 GPIO pins available for user applications |
| Interfaces | UART, SPI, I2C, PWM, ADC |
| Power Consumption | Deep Sleep: ~6mA, Active Mode: ~160mA |
| Dimensions | 27mm x 40.5mm |
The ESP32-CAM has a total of 16 pins. Below is the pinout and description:
| Pin Name | Pin Number | Description |
|---|---|---|
| GND | 1 | Ground connection |
| 3.3V | 2 | 3.3V power output |
| 5V | 3 | 5V power input |
| GPIO1 | 4 | UART TX (used for programming/debugging) |
| GPIO3 | 5 | UART RX (used for programming/debugging) |
| GPIO0 | 6 | Boot mode selection (connect to GND for flashing firmware) |
| GPIO2 | 7 | General-purpose I/O pin |
| GPIO4 | 8 | General-purpose I/O pin |
| GPIO12 | 9 | General-purpose I/O pin |
| GPIO13 | 10 | General-purpose I/O pin |
| GPIO14 | 11 | General-purpose I/O pin |
| GPIO15 | 12 | General-purpose I/O pin |
| GPIO16 | 13 | General-purpose I/O pin |
| GPIO33 | 14 | General-purpose I/O pin |
| RESET | 15 | Reset pin |
| GND | 16 | Ground connection |
Note: The ESP32-CAM does not have a built-in USB interface. A USB-to-TTL adapter is required for programming.
Powering the Board:
Programming the Board:
Connecting the Camera:
Using GPIO Pins:
Below is an example of how to use the ESP32-CAM for video streaming. This code sets up the ESP32-CAM as a web server to stream video.
#include <WiFi.h>
#include <esp_camera.h>
// Replace with your Wi-Fi credentials
const char* ssid = "Your_SSID";
const char* password = "Your_PASSWORD";
// Camera configuration
#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);
WiFi.begin(ssid, password);
// Wait for Wi-Fi connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi connected");
// Configure 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;
// Initialize camera
if (esp_camera_init(&config) != ESP_OK) {
Serial.println("Camera initialization failed");
return;
}
// Start camera server
startCameraServer();
Serial.println("Camera ready! Stream at: http://" + WiFi.localIP().toString());
}
void loop() {
// Main loop does nothing; camera server handles requests
}
Camera Initialization Failed:
Wi-Fi Connection Issues:
Board Not Detected During Programming:
Overheating:
By following this documentation, you can effectively use the ESP32-CAM for your IoT and video streaming projects.