Files
esp-idf/examples/peripherals/usb/host/uvc/README.md

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
```