Skip to content

nopnop2002/esp-idf-video-snapshot

Repository files navigation

esp-idf-video-snapshot

Capture still images 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.

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

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 C270 -> 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.

cameras

Software Required

esp-idf v5.0 or later.
A compilation error occurs in ESP-IDF Ver4.

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-snapshot
cd esp-idf-video-snapshot
idf.py set-target {esp32s2/esp32s3}
idf.py menuconfig
idf.py flash monitor

Configuration

config-top config-app

Wifi Setting

config-wifi-1

You can connect using the mDNS hostname instead of the IP address.
config-wifi-2

You can use static IP.
config-wifi-3

Select Snapshot Trigger

You can choose one of the following as trigger.

  • Trigger is the Enter key on the keyboard
    For operation check

config-trigger-1

  • Trigger is a GPIO toggle
    Some GPIOs are used as boot straps and cannot be used as inputs.

    • Initial Sate is PULLDOWN
      The trigger is prepared when it is turned from OFF to ON, and a picture is taken when it is turned from ON to OFF.

    • Initial Sate is PULLUP
      The trigger is prepared when it is turned from ON to OFF, and a picture is taken when it is turned from OFF to ON.

config-trigger-2

  • Trigger is TCP Socket
    You can use tcp_send.py as trigger.
    python3 ./tcp_send.py

config-trigger-3

  • Trigger is UDP Socket
    You can use udp_send.py as trigger.
     python3 -m pip install -U netifaces
     python3 ./udp_send.py
    

config-trigger-4

  • Trigger is MQTT Subscribe
    You can use mosquitto_pub as trigger.
    mosquitto_pub -h your_broker -p 1883 -t "/take/picture" -m ""

config-trigger-5

  • Trigger is HTTP Request
    You can use this command as trigger.
    curl "http://esp32-camera.local:8080/take/picture"

config-trigger-6

Post Setting

  • No post
    Still images don't post anywhere.

config-post-1

  • Post using HTTP
    Still images are posted using HTTP.
    You can download the HTTP server from here.

config-post-21

Filenames can be timestamped.

config-post-22

config-post-3

Camera Setting

Some cameras need to change frame size and frame format.
See here.
config-camera-1

config-camera-2

config-camera-3

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.
    StreamStart

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

  • Execute trigger.
    ExecuteTrigger

View picture using Built-in WEB Server

You can view the pictures taken using the built-in WEB server.
Enter the ESP32's IP address and port number in the address bar of your browser.
You can use mDNS instead of IP address.

browser

References

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

Releases

No releases published

Packages

No packages published