ESP32-CAM (AI-Thinker)

ESP32-CAM (AI-Thinker) — ESP32 development board

The AI-Thinker ESP32-CAM packs an ESP32-S with an OV2640 2MP camera and 4MB PSRAM into a module smaller than a matchbox. It is the most affordable camera-equipped microcontroller available, but lacks USB — you need an external FTDI adapter for programming. For the price, nothing else puts WiFi and a camera on one board.

★★★★☆ 3.6/5.0

Best ultra-cheap camera board for basic streaming and snapshots, skip if you need USB or reliable high-resolution video.

Best for: budget security camerastimelapse photographyQR code scanning stations
Not for: projects needing USB programming out of the boxhigh-resolution video streamingGPIO-heavy sensor projects

Where to Buy

Check Price on Amazon (paid link)

Pros

  • OV2640 2MP camera included on-board — no external module needed
  • 4MB PSRAM enables JPEG frame buffering for video streaming
  • Extremely low price makes it disposable for remote deployments
  • MicroSD card slot for local image storage and timelapse

Cons

  • No USB port — requires external FTDI adapter for programming and debugging
  • Limited GPIO access — only 8 usable pins with camera attached
  • Older ESP32 dual-core at 240MHz — no USB-OTG, no native USB
  • WiFi antenna is a tiny PCB trace — range is poor without an external antenna
  • No onboard LED indicator or reset button on the base module

Camera and Image Quality

The OV2640 sensor captures still images up to 1600x1200 (2MP) and streams MJPEG video over WiFi. With 4MB PSRAM acting as a frame buffer, the ESP32-CAM can hold multiple JPEG frames in memory simultaneously, enabling smooth-ish streaming at 10-12 FPS at VGA resolution (640x480).

At full 2MP resolution, frame rates drop to 2-4 FPS due to JPEG encoding time on the 240MHz dual-core processor. For streaming applications, VGA or SVGA (800x600) resolution is the practical sweet spot. Image quality is adequate for surveillance and monitoring but noticeably worse than even budget smartphone cameras.

The USB Problem

The ESP32-CAM's biggest usability issue is the lack of any USB port. Programming requires connecting an external FTDI USB-to-serial adapter to the TX, RX, GND, and 5V pins, plus manually holding GPIO0 low during boot to enter flash mode. This is a multi-step process that frustrates beginners and slows iteration for experienced developers.

Several third-party carrier boards solve this by adding a CH340 USB-serial chip and a proper USB connector, but these add cost and bulk. The ESP32-S3-DevKitC includes native USB-C and can still interface with cameras via its DVP/MIPI support — it is the better choice when USB convenience matters more than the absolute lowest price.

WiFi and Connectivity Limitations

The ESP32-CAM uses a small PCB trace antenna that provides WiFi range of roughly 5-10 meters through walls. An IPEX connector on the board allows attaching an external antenna, which dramatically improves range to 20-30 meters indoors. For any deployment beyond the same room as your router, an external antenna is essential.

The board supports WiFi 802.11 b/g/n at 2.4GHz and Bluetooth 4.2 (Classic + BLE). There is no Bluetooth 5.0, no WiFi 5GHz, and no mesh networking capability. For long-range outdoor deployments, a LoRa-equipped board like the Heltec WiFi LoRa 32 V3 is a better foundation.

Full Specifications

Processor

Specification Value
Architecture Xtensa LX6
CPU Cores 2
Clock Speed 240 MHz

Memory

Specification Value
Flash 4 MB
SRAM 520 KB
PSRAM 4 MB

Connectivity

Specification Value
WiFi 802.11 b/g/n
Bluetooth 4.2

I/O & Interfaces

Specification Value
camera OV2640 2MP (included)
camera_resolution 1600x1200 max
SD Card MicroSD slot (4GB max)
GPIO Pins 10
flash_led Built-in LED flash
UART 3
USB None (requires external FTDI for programming)

Power

Specification Value
Input Voltage 5 V
Deep Sleep Current ~6 uA

Physical

Specification Value
Dimensions 40.5 x 27 mm
Form Factor Compact camera module

Who Should Buy This

Buy DIY home security camera with WiFi streaming

OV2640 camera and 4MB PSRAM handle MJPEG streaming at 10-12 FPS over WiFi. MicroSD slot for local recording backup. At this price point, you can deploy multiple cameras for the cost of one commercial IP camera.

Skip Machine learning image classification on device

The older ESP32 lacks vector instructions and has only 4MB PSRAM. The ESP32-S3-DevKitC with 8MB PSRAM and hardware acceleration handles TFLite Micro models far more effectively.

Better alternative: ESP32-S3-DevKitC-1

Buy Remote plant monitoring timelapse

Capture periodic images to MicroSD with deep sleep between shots. 4MB PSRAM buffers full-resolution 1600x1200 JPEG frames. WiFi uploads when in range. The price makes it expendable for outdoor deployments.

Skip Rapid prototyping with frequent code uploads

No USB means connecting an FTDI adapter every time you flash. The ESP32-S3-DevKitC has native USB-C for one-cable programming, debugging, and serial output.

Better alternative: ESP32-S3-DevKitC-1

Consider QR code or barcode scanning kiosk

OV2640 captures frames for QR decoding via software libraries. Works for fixed-position scanning. For faster decode rates and USB HID output, a dedicated barcode scanner module may be more reliable.

Frequently Asked Questions

How do I program the ESP32-CAM without USB?

You need an FTDI USB-to-serial adapter (3.3V or 5V). Connect TX to RX, RX to TX, GND to GND, and 5V to 5V. Bridge GPIO0 to GND before powering on to enter flash mode. Upload via Arduino IDE or PlatformIO, then disconnect GPIO0 and reset.

What resolution and frame rate does the ESP32-CAM stream?

At VGA (640x480) the ESP32-CAM streams MJPEG at 10-12 FPS over WiFi. At full 2MP (1600x1200) it drops to 2-4 FPS. SVGA (800x600) at 6-8 FPS is a good compromise between quality and smoothness.

ESP32-CAM vs ESP32-S3-DevKitC for camera projects?

The ESP32-CAM is much cheaper and includes a camera. The ESP32-S3-DevKitC has USB-C, 8MB PSRAM, better CPU performance, and hardware vector acceleration for on-device ML. Choose the CAM for budget streaming, the S3 for anything requiring development convenience or AI.

Can the ESP32-CAM run on battery?

Yes, but inefficiently. Deep sleep draws about 6mA due to the camera module and voltage regulator. With a 2000mAh LiPo, expect around 300 hours in deep sleep. Active streaming at 180-200mA gives about 10 hours. Best suited for periodic wake-and-capture, not continuous streaming.

Does the ESP32-CAM support face detection?

The Espressif firmware includes basic face detection and recognition at QVGA resolution (320x240). It works but is slow (1-2 FPS with detection active) and has limited accuracy. For serious face detection, use the ESP32-S3 with TFLite Micro or offload to a server.

Can I use a different camera module with the ESP32-CAM?

Yes. The 24-pin DVP connector supports OV2640 (2MP, included), OV3660 (3MP), and OV5640 (5MP) modules. Higher-resolution sensors require more PSRAM for buffering and reduce frame rates further. The OV2640 is the best-supported option.

Related Products