esp-idf-video-streaming

Capture video from a USB camera using ESP-IDF

MIT License

Stars
42

esp-idf-video-streaming

Capture video from a USB camera using ESP-IDF.

This example demonstrates how to:

This example enumerates the attached camera descriptors, negotiates the selected resolution and FPS, and starts capturing video.

I based it on this official example.

Change from official example

  • Changed Network connection by example_connect to WiFi connection by handler.

  • Supported VideoStreaming format of UncompressedFormat. This will allow you to use Logitech C270n and Microsoft LifeCam. Conversion from UVC_FRAME_FORMAT_YUYV to JPEG used this.

  • Changed from TCP transmission to HTTP transmission. I base it on this.

Hardware Required

ESP32-S2/ESP32-S3

This example requires any ESP32-S2 or ESP32-S3 with external PSRAM and exposed USB connector attached to USB camera. ESP module without external PSRAM will fail to initialize. I used this board. esp32-s3-1

Note for ESP32S2 In earlier versions of the ESP32-S2 chip, USB transfers can cause SPI data contamination (esp32s2>=ECO1 and esp32s3 do not have this bug). Software workaround is here.

Stable power supply

USB cameras consume a lot of electricity. If the power supplied to the USB port is insufficient, the camera will not operate and ESP32 resets.

USB Type-A Femail connector

Breakout boards are available from AliExpress or eBay.

USB camera with UVC support

Here is a list of USB cameras that support UVC that work with FreeBSD. From what I've researched, ESP-IDF has limited USB support. For example, the Logitech C615 works with Linux, but not with ESP-IDF. I tested with these cameras.

  • Logitech C270n -> Success
  • Logitech C615 -> Fail
  • Logitech QuickCam Pro 9000 -> Fail
  • PAPALOOK AF925 -> Fail
  • Microdia(Very old model) -> Success
  • Microdia MSI Starcam Racer -> Success
  • Microsoft LifeCam NX6000 -> Fail
  • Microsoft LifeCam Cinema -> Success
  • Microsoft LifeCam Studio -> Success
  • Microsoft LifeCam HD3000 -> Success
  • Microsoft LifeCam HD5000 -> Success

It is very hard to find a camera that works with ESP-IDF. On this document says that these cameras work with ESP-IDF.

  • Logitech C980
  • CANYON CNE-CWC2

When usb support provided by ESP-IDF is updated, this issue may eliminate the problem. Detail is here.

Software Required

ESP-IDF V5.0 or later. ESP-IDF V4.4 release branch reached EOL in July 2024.

Wireing

ESP BOARD          USB CONNECTOR (type A)
                         +--+
5V        -------------> | || VCC
[GPIO19]  -------------> | || D-
[GPIO20]  -------------> | || D+
GND       -------------> | || GND
                         +--+

Installation

git clone https://github.com/nopnop2002/esp-idf-video-streaming
cd esp-idf-video-streaming
idf.py set-target {esp32s2/esp32s3}
idf.py menuconfig
idf.py flash monitor

Configuration

Some cameras need to change frame size, frame rate and frame format. config-app-2

How to use

  • Build and flash firmware to esp32.

  • Connect the USB camera at this timing. WaitingForDevice

  • For available USB cameras, device information will be displayed and video streaming will begin. StartStreaming

  • For unavailable USB cameras, you will see an error like this. NotSupportCamera

  • Start your browser and enter the ESP32 IP address and port number in the address bar. You can use mDNS instead of ESP32 IP addresses. WebStreaming

  • Streaming example : Some cameras have Auto Focus available. sample-1 sample-2 sample-3

Limitations

  • At 320x240, 30FPS is the maximum rate regardless of camera capabilities.
  • At 640x480, 15FPS is the maximum rate regardless of camera capabilities.

Using ESP32-CAM development board

You can use this repository.

References

https://github.com/nopnop2002/esp-idf-video-snapshot