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

Step.1

Install Arduino IDE

Please go to arduino.cc and download and install latest Arduino IDE.

Step.2

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.

Step.3

Wire cables:

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

ESP32-CAM GND —-> ESP-PROG GND

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

ESP32-CAM U0T —-> ESP-PROG RXD

ESP32-CAM U0R —-> ESP-PROG TXD

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

ESP32-CAM IO0 —-> ESP32-CAM GND

Step.4

Configure Arduino for ESP32-CAM

Run Arduino. In the Files-Preferences add:

https://dl.espressif.com/dl/package_esp32_index.json

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 http://192.168.100.109/ you will see

Now you can play with the different settings!

2 Comments (+add yours?)

  1. michaelmccarty450227265
    Feb 05, 2021 @ 05:17:59

    Even after patching kernel I still get invalid head of packet every time updating. But at least this points me in the right direction if it is indeed a linux bug for the pll of the 340 I can just use windows or another version of linux, or buy a different usb to uart.

    Reply

  2. Sahil
    May 04, 2022 @ 18:42:24

    Can you help me 😭😭😭 ? I have connected my esp32 via wifi with my Android phone and connected the same phone via USB tethering to the pc. When I am searching the ip on android it shows the correct output but it is not showing any output and giving error the connection has timed out in pc when I am searching on it.

    Reply

Leave a comment