Intel Realsense T265 icon Intel Realsense T265 — T265 VSLAM for ARC: SLAM-based mapping and precise way-point navigation, low-power tracking, and NMS telemetry. Try it →
 
ESP32 Cam

ESP32 Cam by Espressif

ESP32-CAM with Synthiam ARC streams live video for robot vision, digital I/O, sensors, UART, and WiFi control.
Connection Type
Wi-Fi
Number of Servos
Varies
Audio Support
No
Camera Support
Yes
UARTs
Varies
I2C Support
No
ADC Ports
Varies
Digital Ports
Varies

A tiny camera board mounted on a small rover robot streaming live video over Wi-Fi to a tablet dashboard that is tracking a ball
ESP32-CAM + Synthiam ARC and ARCx

A Wi-Fi camera and controller on one tiny board

The ESP32-CAM is a small, affordable Wi-Fi microcontroller with a camera on board. Flash Synthiam's firmware and it becomes an EZ-B compatible controller that streams live video to Synthiam ARC for face, color and object tracking, while its spare pins handle digital I/O, sensors and serial devices.

How the ESP32-CAM works with Synthiam. Install one of Synthiam's ESP32-CAM firmwares (listed in the Firmware section below). The board then speaks the EZB protocol over Wi-Fi and serves its camera stream. In ARC, connect with the EZB Connection skill and show the video with the Camera Device skill; this is the proven path for the camera. ARCx recognizes the ESP32-CAM firmware in its Ezb Connection skill for the board's ports, and its Camera Source (ezb) skill is the one to try for the video, but ESP32-CAM video in ARCx has not been confirmed yet. This page is for ESP32 boards with a camera; for boards without one, see the ESP32 page.

Meet the hardware

What is the ESP32-CAM?

The ESP32-CAM is an ESP32 microcontroller board with a small camera module on a ribbon cable. It costs little, fits almost anywhere, and connects over Wi-Fi, which makes it a popular choice for small rovers, inspection robots, telepresence devices and home monitoring projects.

Many companies make ESP32 camera boards: the common AI-Thinker style ESP32-CAM, M5Stack camera units, ESP-EYE, XIAO ESP32S3 and DFRobot boards among them. The camera uses many of the ESP32's pins, so fewer GPIO pins are free than on a plain ESP32 board. Synthiam's firmware handles that with a pin-mapping table that keeps camera pins safe from accidental use.

What the firmware provides: live camera streaming, EZ-B style control of the free GPIO, AP or client Wi-Fi mode, and a mapping that translates Synthiam ports (D0-D23, ADC0-ADC7) to the right ESP32 GPIO pins for your camera board.

ESP32-CAM at a glance

TypeWi-Fi microcontroller with an onboard camera
Chip makerEspressif Systems; boards from many vendors
CameraOV2640 on common boards
Logic level3.3 V
Connection to SynthiamWi-Fi (TCP), access point or client mode
Power5 V or 3.3 V header pins (AI-Thinker style board)
Synthiam uses it forRobot vision plus digital I/O, ADC and UART
Chip maker websiteespressif.com
Possibilities

What you can do with an ESP32-CAM in Synthiam

👁

Robot vision

In ARC, the Camera Device skill gives the robot real-time vision: face, color, glyph and object tracking, and every other camera-enabled skill in your project.

🎮

FPV and telepresence

Drive a small rover while watching its live video, for remote inspection, a telepresence device or home monitoring.

💡

Digital I/O and sensors

Switch outputs, read inputs, measure distance with an ultrasonic sensor and read analog values on the pins that the camera leaves free.

⚙

Servos through a driver board

The camera uses most of the ESP32's timing resources, so servos are best run from a PCA9685 or another servo controller. One firmware drives a PCA9685 for you.

🔌

Serial devices

A UART expansion port (ARC UART #0) talks to serial devices such as motor controllers or another microcontroller.

🤖

Scripts and AI

Program reactions with Blockly, JavaScript or Python, and connect what the camera sees to AI robot skills.

Pick a firmware

Synthiam firmware for ESP32 camera boards

Download the firmware from the Firmware section below. Each build includes configuration details and board-specific notes: selecting the correct camera model, choosing the Wi-Fi mode, confirming the IP address and avoiding pin conflicts. Always follow the comments in the firmware for your specific board.

FirmwareWhat it doesGood to know
ESP32 Cam EZB The main firmware. Live camera streaming plus digital I/O, ultrasonic distance, optional ADC and a UART expansion port, running at the same time. Since version 13 it has no servo support: the board is treated strictly as digital + ADC + UART + camera. Use an external servo controller. One EZB client and one camera client at a time. AP address 192.168.1.1 (older versions used 192.168.50.1).
ESP32 Cam with PCA9685 EZ-B compatible controller with live OV2640 video and a PCA9685 for 16 channels of servo/PWM output. AP mode by default (#define AP_MODE), network GetOffMyLawn, address 192.168.1.1. The camera stream is on TCP port 24.
ESP32 Cam Arduino Relay The ESP32-CAM is a Wi-Fi gateway: it streams video and passes I/O commands to an Arduino, which drives the servos, pins and sensors. Cross the serial lines: Arduino TX0 to ESP32-CAM RX, Arduino RX0 to ESP32-CAM TX.
ESP32 Cam UART Makes the ESP32-CAM a plug-in replacement for the EZ-B v4 camera, connected to the EZ-B v4's camera port over UART. Wiring: ESP32 UART0 TX to camera RX, pin 2 to camera RTS, GND to GND, 3.3 V to 3.3 V. The firmware page describes it as untested.
Camera boards

Supported camera models

The firmware supports many ESP32 camera boards. Before compiling, enable the one #define CAMERA_MODEL_... line that matches your board. Only one model can be enabled at a time; the wrong one usually shows up as "frame size = 0" or a camera initialisation error.

CAMERA_MODEL_AI_THINKER        (the common ESP32-CAM)
CAMERA_MODEL_WROVER_KIT
CAMERA_MODEL_ESP_EYE
CAMERA_MODEL_M5STACK_PSRAM
CAMERA_MODEL_M5STACK_V2_PSRAM
CAMERA_MODEL_M5STACK_WIDE
CAMERA_MODEL_M5STACK_ESP32CAM
CAMERA_MODEL_M5STACK_UNITCAM
CAMERA_MODEL_M5STACK_CAMS3_UNIT
CAMERA_MODEL_TTGO_T_JOURNAL
CAMERA_MODEL_XIAO_ESP32S3
CAMERA_MODEL_ESP32_CAM_BOARD
CAMERA_MODEL_ESP32S3_CAM_LCD
CAMERA_MODEL_ESP32S2_CAM_BOARD
CAMERA_MODEL_ESP32S3_EYE
CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3
CAMERA_MODEL_DFRobot_Romeo_ESP32S3

Pins and the camera. Camera boards often reuse GPIO pins internally for the camera sensor, the SD card, the flash LED or PSRAM. Those pins cannot be used for digital I/O while the camera is running. This is not a Synthiam limitation; it is how the boards are wired. The firmware documentation calls out the common conflicts and the recommended pins.

Port reference

Port configuration and pin mapping

ARC and ARCx label controller ports D0-D23, while ESP32 boards label pins with GPIO numbers that vary with the board and its camera wiring. The firmware's mapping tables let Synthiam always talk in D-ports while the firmware picks the correct, camera-safe GPIO for your model. Your projects stay the same when you switch boards; only the mapping changes.

Pinout of an AI-Thinker style ESP32-CAM board showing power pins, GPIO 12, 13, 15, 14, 2, 4 on one side and GPIO 16, 0, 3, 1 on the other
Example pin reference for an AI-Thinker style board. Always follow the firmware's model-specific mapping and conflict notes for your board.
Header pinAlso used for
GPIO 12HS2_DATA2 (SD card)
GPIO 13HS2_DATA3 (SD card)
GPIO 15HS2_CMD (SD card)
GPIO 14HS2_CLK (SD card)
GPIO 2HS2_DATA0 (SD card)
GPIO 4HS2_DATA1 / flash LED
GPIO 16U2RXD
GPIO 0CSI_MCLK (camera clock)
GPIO 3U0RXD (serial / programming)
GPIO 1U0TXD (serial / programming)
5V, 3.3V, GNDPower; one pin is a 3.3 V / 5 V output

Editing the mapping

The mapping arrays are the only board-specific part of the firmware. Each entry is the GPIO for one Synthiam port; 0xff means "not available". This example from the firmware maps five ports and leaves the rest unused:

const uint8_t ARC_TO_ESP_DIGITAL_PIN_MAPPING[24] = {
  2,    // ARC port D0
  13,   // ARC port D1
  14,   // ARC port D2
  15,   // ARC port D3
  12,   // ARC port D4
  0xff, // ARC port D5 (not used)
  ...   // D6 to D23 not used
};

// Serial expansion UART (ARC UART #0)
#define SERIAL2_RX 12
#define SERIAL2_TX 13

There are always 24 digital entries (D0-D23) and 8 ADC entries (ADC0-ADC7). The UART pins must not overlap camera pins or the ports you mapped. If a mapped pin overlaps a camera pin, the firmware stops with an error message instead of breaking the camera.

Servos and pin conflicts

On common AI-Thinker style modules, many users have run servos on D2, D12, D13, D14 and D15, and the general ESP32 recommendation for servo pins is 2, 4, 12-19, 21-23, 25-27, 32-33. The exact safe pins differ by board revision, camera model, and whether the flash LED or SD card is in use, so validate them on your own board.

The current ESP32 Cam EZB firmware (version 13 and later) has no servo support. The camera needs most of the board's CPU time, DMA bandwidth, GPIO and LEDC timers, so servo pulses are offloaded to a dedicated controller such as a PCA9685 or SSC-32. Choose the ESP32 Cam with PCA9685 firmware if you want servos on the same board.

If a pin is shared with the camera or another onboard feature, the camera may still work, but that pin cannot be used reliably for I/O at the same time.

Networking

Wi-Fi modes

AP mode (direct connect)

The ESP32-CAM creates its own Wi-Fi network and your computer connects straight to it, at 192.168.1.1 on current firmware. Simple for quick tests and field use when you do not want a router involved.

Client mode (join your network)

The ESP32-CAM joins your Wi-Fi router, and you connect to the address your network gives it. Open the Arduino serial monitor at 115200 baud to see the connection status and the IP address. If the Wi-Fi drops, the board restarts and joins again on its own.

Get started

Set up an ESP32-CAM

  1. Choose a firmware from the table above and download it from the Firmware section below.
  2. Configure it in the Arduino IDE. Install the ESP32 board package from Espressif and any libraries the firmware page lists. Then: enable the one CAMERA_MODEL_... line for your board, edit the pin-mapping tables to match the pins your board exposes, and choose AP or client mode (in client mode, enter your network name and password).
  3. Upload to the board, open the serial monitor at 115200, reset the board and note its IP address and any camera messages.
  4. Connect in ARC. Join the right Wi-Fi network, add the EZB Connection skill, enter the board's address and connect. Then add the Camera Device skill and start the camera stream from the board.
  5. Or connect in ARCx. Install ARCx, type the address into EZB 0 in the Ezb Connection skill and connect to use the board's ports. For video, add Camera Source (ezb) and enter the same address (it uses port 24 by default). ESP32-CAM video in ARCx is not yet confirmed; if it does not start, use ARC for the camera and tell us on the forum.
  6. Test. Watch the live video, then toggle a digital output on a mapped port. Add a tracking skill once the picture is steady.
The ARCx Ezb Connection configuration showing EZB 0 with its description, connection address and connection script
ARCx's Ezb Connection configuration. Each board is a numbered row with its own connection script.

Good to know

  • The camera XCLK runs at 20 MHz by default. Long or noisy ribbon cables are often steadier at 10 MHz (define XCLOCK_FREQUENCY).
  • Steady power matters: a weak supply shows up as camera dropouts and resets.
  • Frame rate depends on Wi-Fi signal strength; keep the robot within good range of the access point.
ARCx or ARC?

Which software to use today

For an ESP32-CAM, the camera is the main reason to buy one, and the camera is proven in ARC. ARCx is Synthiam's recommended platform wherever it supports the hardware, and it already connects to the board's ports; we will update this page when ESP32-CAM video in ARCx is confirmed.

ARC ARCx
Runs onWindowsWindows 10/11 x64, Ubuntu 24.04 x64 and ARM64, including Raspberry Pi 4/5
User interfaceWindows desktop applicationAny web browser, several people at once; AI agents through MCP
Board connection (ports)EZB ConnectionEzb Connection
Camera videoCamera Device: worksCamera Source (ezb): not yet confirmed with the ESP32-CAM
Troubleshooting

When something does not work

The wrong CAMERA_MODEL_... is enabled, or more than one is. Enable exactly the one for your board and upload again. If the camera fails to start, the firmware prints an error and stops.

A pin in your mapping table (or the UART pins) is also used by the camera. Change that entry to a free pin or to 0xff and upload again.

The port may be unmapped (0xff) or mapped to a pin shared with the camera, SD card, flash LED or PSRAM. Try a different pin that the firmware notes say is not used by the camera.

ESP32 Cam EZB version 13 and later removed servo support. Use the ESP32 Cam with PCA9685 firmware, the Arduino Relay firmware, or a separate servo controller. On older firmware, check that the servo is on a validated pin, has its own 5 V supply and shares ground with the board.

The firmware allows one EZB client and one camera client at a time, and answers extra EZB connections with "already connected". Disconnect the first one. (With ARCx, several people can share one connection by opening ARCx in their browsers.)

Check the power supply first, then the Wi-Fi signal. Long or noisy ribbon cables can make the camera unstable: try a 10 MHz XCLK. Update to the latest firmware, which gives the camera task priority.

Open the Arduino serial monitor at 115200 baud and reset the board; it prints the Wi-Fi status and the address. In AP mode, current firmware uses 192.168.1.1.
Questions

Frequently asked questions

The AI-Thinker style ESP32-CAM is the most common and is listed first in the firmware. Any board in the supported model list works; boards with PSRAM get two frame buffers instead of one.

That is what the ESP32 Cam UART firmware is for: it plugs into the EZ-B v4's camera port and emulates the EZ-B v4 camera over UART. Its firmware page describes it as untested, so expect to experiment.

Yes. The ESP32Plus firmware on the ESP32 page has a camera passthrough for an ESP32-CAM wired to its serial port. You can also run the ESP32-CAM as its own board in the same project.

ARCx's Ezb Connection skill recognizes the ESP32-CAM firmware for its ports. Video through Camera Source (ezb) has not been confirmed yet, so ARC is the proven choice for the camera today.

Give your robot eyes on a small budget

Flash the Synthiam firmware, connect, and add vision to your robot project.


ARC Pro

Upgrade to ARC Pro

Become a Synthiam ARC Pro subscriber to unleash the power of easy and powerful robot programming

Author Avatar
PRO
USA
#1   — Edited

Would like to see a video of this working with Arc

I did get the camera working with a FTDI adapter and Arduino code I found

works great

thanks

Author Avatar
PRO
USA
#3   — Edited

Thank DJ 

followed your instruction above

I got the ESP32 cam working on ARC also now

Used the FTDI adapter to upload, same setting as when I used the Arduino code instructions..

EzAng

Author Avatar
PRO
USA
#4  

On this chart, where are the DX pins?

User-inserted image

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#5  

D1 = gpio1 d2 = gpio2 d3 = gpio3  etc

Author Avatar
PRO
USA
#6   — Edited

*Note: For servo use with EZ-Cam, only pins D2, D12, D13, D14, D15 are recommended.

Tried D12 with GPIO 12 - just got the servo to work -

Camera works good

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#7  

Find ports that work with your version. They're all different. All versions of the ESP 32 cam are different.

Author Avatar
PRO
USA
#8   — Edited

In the esp32 Cam:

Tried D12 with GPIO 12 - D13, and D15 work also

Camera and servos work