ESP32 Cam

ESP32 Cam by Espressif

ESP32-CAM as an EZB for Synthiam ARC: stream video, control GPIO/servos, AP/Client WiFi, and ARC D0-D23 to GPIO pin mapping.
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

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.

ARC to ESP32 GPIO port mapping chart
Example port mapping reference. Always follow the firmware’s model-specific mapping and conflict notes for your board.

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.


Upgrade to ARC Pro

Join the ARC Pro community and gain access to a wealth of resources and support, ensuring your robot's success.

Author Avatar
PRO
Synthiam
#9  

What esp32cam do you use? That’ll be worth mentioning so it adds context to the list of ports you’re providing

Author Avatar
PRO
Synthiam
#11  

that looks the same as mine. Strange

Nink, what version is yours? Does it look the same?

Author Avatar
PRO
USA
#12  

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:

User-inserted image

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 phone

If you want the code just let me know

Author Avatar
Unknown Country
#13  

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

   analogWrite(port, map(pos, 0, 100, 0, 255));

                                             ^

In file included from C:\Users\kirop\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Arduino.h:36,

             from sketch\EZ-ESP32-CAM.ino.cpp:1:

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.

Author Avatar
PRO
Canada
#14  

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

Author Avatar
Unknown Country
#15  

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));

Author Avatar
PRO
Synthiam
#16  

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