mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-27 18:32:54 +00:00
97 lines
3.6 KiB
Markdown
97 lines
3.6 KiB
Markdown
| Supported Targets | ESP32-P4 | ESP32-S2 | ESP32-S3 |
|
|
| ----------------- | -------- | -------- | -------- |
|
|
|
|
# USB Camera Example
|
|
|
|
## Overview
|
|
|
|
This example shows basic usage of [USB UVC host driver](https://components.espressif.com/components/espressif/usb_host_uvc). The example waits for USB camera connection, it then configures the camera and starts streaming video frames until the device is removed.
|
|
|
|
More advanced examples can be found in [UVC host driver repository](https://github.com/espressif/esp-usb/tree/master/host/class/uvc/usb_host_uvc/examples).
|
|
|
|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
|
|
|
|
## How to Use Example
|
|
|
|
### Hardware Required
|
|
|
|
* Development board with USB-OTG support and external PSRAM
|
|
* Exposed USB host connector
|
|
* USB camera
|
|
|
|
Running this example on an **ESP module without external PSRAM will fail on initialization**. Please select your PSRAM configuration in menuconfig `Component config->ESP PSRAM`. If you manually disable PSRAM, the required frame buffers might not fit into DRAM (especially on ESP32-S2). If you absolutely must not use PSRAM, consider the following for minimizing RAM usage:
|
|
* Select smaller resolution (eg. 320x240)
|
|
* Select fewer frame buffers (eg. 2)
|
|
* Select smaller and fewer URBs (eg. 2x 2kB)
|
|
|
|
Follow instructions in [examples/usb/README.md](../../README.md) for specific hardware setup.
|
|
|
|
### Frame format
|
|
|
|
You can select frame format in [main.c](./main/main.c) file in `stream_config` variable. Default is set to very common 640x480@15FPS, MJPEG encoded.
|
|
|
|
This example will print supported formats on device connection - this can be disabled in menuconfig ` Component config → USB HOST UVC`. The frame format can also be changed in runtime by calling `uvc_host_stream_format_select()` function.
|
|
|
|
### Build and Flash
|
|
|
|
Build the project and flash it to the board, then run the monitor tool to view the serial output:
|
|
|
|
Run `idf.py set-target esp32xx` to set target chip.
|
|
|
|
Run `idf.py -p PORT flash monitor` to build, flash and monitor the project.
|
|
|
|
(To exit the serial monitor, type ``Ctrl-]``.)
|
|
|
|
See the Getting Started Guide for all the steps to configure and use the ESP-IDF to build projects.
|
|
|
|
## Known limitations
|
|
|
|
On targets with Full Speed USB peripheral the MPS (maximum packet size) is limited to 512 bytes, the ESP32-S2/S3 is capable of reading data at approximately 0.5 MB/s. When connected to Full Speed USB host, cameras usually provide resolution no larger than 640x480 pixels. The following two formats are the most commonly supported at Full Speed :
|
|
* 320x240 30 FPS MJPEG
|
|
* 640x480 15 FPS MJPEG
|
|
|
|
## Tested cameras
|
|
* Logitech C980
|
|
* Logitech C270
|
|
* Logitech C170
|
|
* Logitech Brio 100
|
|
* CANYON CNE-CWC2
|
|
* Trust WebCam
|
|
* Anker Powerconf C200
|
|
* Microsoft LifeCam HD-6000
|
|
* Asus Webcam C3
|
|
|
|
## Example Output
|
|
|
|
Output with USB camera already connected at program start:
|
|
```
|
|
...
|
|
I (1460) main_task: Calling app_main()
|
|
I (1460) UVC example: Installing USB Host
|
|
I (1500) UVC example: Installing UVC driver
|
|
I (1500) UVC example: Opening UVC device 0x0000:0x0000 640x480@15.0FPS...
|
|
I (1500) main_task: Returned from app_main()
|
|
*** Configuration descriptor ***
|
|
|
|
...
|
|
Here is rest of Configuration descriptor
|
|
...
|
|
|
|
I (3140) UVC example: UVC Device OPENED!
|
|
I (3240) UVC example: Stream start. Iteration 0
|
|
I (4410) UVC example: New frame! Len: 13392
|
|
I (4470) UVC example: New frame! Len: 13392
|
|
I (4530) UVC example: New frame! Len: 13392
|
|
|
|
...
|
|
More frames received
|
|
...
|
|
|
|
I (8310) UVC example: New frame! Len: 18512
|
|
I (8310) UVC example: Stream stop
|
|
I (10440) UVC example: Stream start. Iteration 1
|
|
|
|
...
|
|
Streaming continues here
|
|
```
|