How to configure and use ESP32-CAM with Arduino IDE and Linux

ESP32-CAM is small low cost WiFi camera with OV2460 2Mpix sensor. It allows you to stream video and even to perform some small image filterings and face detection / recognition.

Unfortunately the AI Thinker vendor trying to keep cost as low as possible didn’t include USB programmer in it so the setup is a bit odd.

What do you need to play with ESP32-CAM ?

You need the camera of course and some cables and USB to serial converter which also provide enough 3.3V source to power the camera.

In this example we will use ESP-PROG-C which comes with set of cables and USB-CABLE-micro-1.8M


Install Arduino IDE

Please go to and download and install latest Arduino IDE.


Linux and CH340

CH340 Linux drivers has bad PLL settings for all Linux kernels before 5.5.

If your system happen to be with Linux Kernel before 5.5. here is the GitHub repository with the patch to install.

If you do not have this patch CH340 will work, but will not be able to communicate at speed over 115200 bps, with the patch up to 2Mbps communication is possible.


Wire cables:

You need to connect ESP32-CAM and ESP-PROG this way:


ESP32-CAM 3.3V —-> ESP-PROG 3.3V



For firmware uploading you need one more connection, which is necessary ESP32 to go in Bootloader mode:



Configure Arduino for ESP32-CAM

Run Arduino. In the Files-Preferences add:

In Tools-Board-Board Manager search for ESP32 and install it:

Exit Arduino and Run it again so it loads new board data. From File-Examples select ESP32-Camera-CameraWebServer

In select camera model uncomment CAMERA_MODEL_AI_THINKER and comment all other:

Then enter SSID and PASSWORD for your WiFi router.

In Tools-Board select : ESP32Wrover Module

Speed 921600

Flash Frequency 80Mhz

Flash Mode QIO

Partition Scheme: Huge app

Port: the port where your ESP-PROG USB Serial is connected it may be „ttyUSB0“ if you are running Linux or COMxx if you run Windows

Compile and see if there are no errors:

Then Press RESET button on ESP32-CAM, release it and hit Upload button on Arduino IDE.

If you get this error under Linux:

This means that the access to ttyUSB0 is not enabled for your user and you have to run in terminal

$ sudo chown youruser /dev/ttyUSB0 

Where „youruser“ can be seen and try again.

If everything is OK you will see this picture:

Now you have to disconnect ESP32-CAM IO0 and GND and press reset. In serial monitor you will see this message:

when you open you will see

Now you can play with the different settings!