ESP32 Cam by Espressif
Firmware
Transform ESP32-CAM into an EZ-B for Synthiam ARC: simultaneous video streaming and servo control in a compact, cost-effective solution.
Synthiam ARC ESP32-CAM firmware: EZ-B-compatible controller, OV2640 live video, PCA9685 16-channel servo/PWM, stable timing and AP/Client Wi-Fi
ESP32 Cam gateway for Arduino streams live video to Synthiam ARC and routes I/O over WiFi for servo, sensor, and analog control
ESP32 Camera firmware emulates EZ-B v4 camera over UART for plug-and-play, 3.3V-powered, cost-effective video integration and customization.
The ESP32-CAM is a small, affordable WiFi microcontroller board that includes an onboard camera and enough GPIO to control simple robotics hardware. When you flash the Synthiam ESP32-CAM firmware, the board behaves like an EZ-B compatible controller: ARC can connect to it over WiFi, stream the camera, and use the GPIO that doesn’t conflict with the camera wiring.
What this firmware provides
- WiFi camera streaming to ARC (via the Camera Device robot skill)
- EZ-B style connectivity so ARC can control supported GPIO
- Configurable WiFi mode (AP or Client)
- Pin mapping to translate ARC ports (D0-D23) to ESP32 GPIO pins
Setup guidance
Each firmware build includes configuration details and model-specific notes to help you: select the correct camera model define, choose WiFi mode, confirm the IP address, and avoid pin conflicts. Always follow the firmware’s comments and documentation for your specific board.
Supported Camera Models
The firmware supports multiple ESP32 camera boards. Select the matching model in the firmware by enabling the correct
#define CAMERA_MODEL_... entry before compiling.
- CAMERA_MODEL_AI_THINKER Common
- 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
WiFi Modes
The firmware supports two WiFi modes. Choose the one that best matches how you run ARC.
AP Mode (Direct Connect)
The ESP32-CAM creates its own WiFi network and your PC connects directly to it. This is simple for quick testing and field use when you don’t want a router involved.
Client Mode (Join Your Network)
The ESP32-CAM connects to your existing WiFi router. ARC then connects using the IP address assigned by your network. Use the Arduino Serial Monitor at 115200 baud to view connection status and the IP address.
Port Configuration and Pin Mapping
ARC labels controller ports as D0 - D23, while ESP32 boards label pins as GPIO numbers that vary by board and camera wiring. The firmware includes a mapping layer so ARC can consistently talk in D-ports, while the firmware translates those ports to the correct GPIO pins for your camera model.
Notes About Servos and Pin Conflicts
Some boards (especially common AI Thinker style modules) have a handful of pins that often work well for servos, but the exact safe pins can differ by board revision, camera model, and whether the flash LED or SD card is enabled.

What esp32cam do you use? That’ll be worth mentioning so it adds context to the list of ports you’re providing
this is the camera I purchased;
https://www.amazon.com/gp/product/B07T1PG77D/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1
that looks the same as mine. Strange
Nink, what version is yours? Does it look the same?
I found some Arduino code that makes a webserver, form serial monitor I get 192.168.1.17, put it in a browser, I get this:

when I click start stream on bottom, I get the camera's video, also I can put this in my Iphone's browser - I can see the camera video on the phoneIf you want the code just let me know
I am new in this, and trying to setup ESP32 Cam for ARC use. There is problem during compilation of ESP32 Cam firmware in Arduino IDE, on the end I get lot of error messages
Arduino: 1.8.19 (Windows 10), Board: "AI Thinker ESP32-CAM, 240MHz (WiFi/BT), QIO, 80MHz"
C:\EZ-ESP32-CAM\EZ-ESP32-CAM.ino:119:24: warning: passing NULL to non-pointer argument 1 of 'WiFiClient::WiFiClient(int)' [-Wconversion-null]
WiFiClient _CLIENT = NULL;
C:\EZ-ESP32-CAM\EZ-ESP32-CAM.ino:120:27: warning: passing NULL to non-pointer argument 1 of 'WiFiClient::WiFiClient(int)' [-Wconversion-null]
WiFiClient _CLIENTCAM = NULL;
C:\EZ-ESP32-CAM\EZ-ESP32-CAM.ino: In function 'void doEZProtocol()':
EZ-ESP32-CAM:755:49: error: call of overloaded 'analogWrite(byte&, long int)' is ambiguous
In file included from C:\Users\kirop\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Arduino.h:36,
C:\Users\kirop\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32/esp32-hal.h:93:6: note: candidate: 'void analogWrite(uint8_t, int)'
void analogWrite(uint8_t pin, int value);
In file included from C:\EZ-ESP32-CAM\EZ-ESP32-CAM.ino:16:
C:\EZ-ESP32-CAM\analogWrite.h:9:8: note: candidate: 'void analogWrite(uint8_t, uint16_t)'
void analogWrite( uint8_t APin, uint16_t AValue );
Multiple libraries were found for "WiFi.h"
Used: C:\Users\kirop\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\libraries\WiFi
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
call of overloaded 'analogWrite(byte&, long int)' is ambiguous
This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
Hey @DJ Just downloaded this version and the serial monitor isn't showing my IP and ezb scanner can't find so had to login to my router (and that's fine) what is strange when I connect and disconect it shows the wrong IP of the host it shows an 80.163.252.XXX address. I removed the last digits cause not sure what it is but its not me and it appears to be Denmark?
16:26:24.857 -> Client ezb connected from 80.163.252.XXX 16:26:24.857 -> EZB Client disconnected 16:26:24.898 -> Waiting for ezb client... 16:27:43.922 -> Client ezb connected from 80.163.252.XXX 16:28:15.861 -> EZB Client disconnected 16:28:15.908 -> Waiting for ezb client... 16:28:54.883 -> Client ezb connected from 80.163.252.XXX 16:29:20.268 -> Client cam connected from 192.168.72.60
I can not compile the firmware in arduino and receive below error. Any advice on this?
call of overloaded 'analogWrite(byte&, long int)' is ambiguous
analogWrite(port, map(pos, 0, 100, 0, 255));
Sometimes arduino ide’s change some things. Usually this error pops up a lot. You will need to cast the value to a byte (byte). Not sure why some ide’s do that. But I guess that’s why it’s free