前言

记录下ESP32-S3的开发过程,由于项目中的摄像头与主控板之间的距离较远,所以需要使用传输距离能够达到1m的USB摄像头,项目开发基于官方usb组件进行修改。这里只介绍如何让项目跑起来,若想详细了解代码请参考:【esp32s3】4 - 例程解析 - USB Camera WIFI 图传_usb camera wifi设置方法视频教程-CSDN博客

一、硬件介绍

1. 摄像头

摄像头是从淘宝买的“小智USB摄像头”,说是还包含麦克风和扬声器,目前还没用,只进行了USB摄像头开发。

2. 开发板

开发板上的芯片模组是ESP32-S3-N8R2,本项目中 N8R2 和 N16R8 的区别在于配置 PSRAM 时的选项不同。

3. 接线

接线时可以用Type-C转USB将摄像头连接至开发板上带有 USB 丝印的 Type-C 母座(不要接到COM端。

或者也可以将USB线头剪开接在开发板的引脚上,这里我怕剪坏了,于是又接了一个USB延长器,把USB延长器的线给剪开接上杜邦线接头。

  • USB 摄像头 红线接 5V 
  • USB 摄像头 黑线接 GND
  • USB 摄像头 D+ (绿线) 接 GPIO20
  • USB 摄像头 D- (白线) 接 GPIO19

4. 注意事项

需要把板子背面的USB-OTG焊点短接后芯片才能使用USB数据传输功能,并且GPIO19 GPIO20不能再用于其他功能,板子的这个 Type-C 接口连接的这两个引脚,启用 USB 功能后 GPIO19 GPIO20 会被占用。

二、代码介绍

1. 代码介绍

从github上获取到官方组件后,用VSCode打开该项目,主要文件结构如下

|————components
|        |
|        |————xfer_http
|                |
|                |————include
|                |————www
|                |————app_http.c
|                |————app_wifi.c
|
|————main
|        |
|        |————main.c

app_http.c 文件是进行服务器配置,负责服务器初始化及摄像头画面的 http 传输。

app_wifi.c 文件是进行 wifi 配置,负责 wifi 初始化与连接。

main.c 文件负责 USB 设备的初始化以及主循环任务,下面介绍下初始化配置。

/****************** configure the example working mode *******************************/
#define ENABLE_UVC_CAMERA_FUNCTION        1        /* enable uvc function */
#define ENABLE_UAC_MIC_SPK_FUNCTION       0        /* enable uac mic+spk function */
#if (ENABLE_UVC_CAMERA_FUNCTION)
#define ENABLE_UVC_FRAME_RESOLUTION_ANY   1        /* Using any resolution found from the camera */
#define ENABLE_UVC_WIFI_XFER              1        /* transfer uvc frame to wifi http */
#endif
  • ENABLE_UVC_CAMERA_FUNCTION 作用是使能UVC设备(USB 视频捕获设备),也就是摄像头这里将值设为 1。
  • ENABLE_UAC_MIC_SPK_FUNCTION 作用是使能UAV设备(USB音频输入/输出设备),也就是麦克风和话筒,这里将值设为 0。
  • ENABLE_UVC_FRAME_RESOLUTION_ANY 作用是使用摄像头支持的任意分辨率,ESP32-S3会自动适配摄像头的分辨率,若值为 0,则会调用默认值 480 * 320 的分辨率,在这里可以修改为摄像头支持的其他分辨率。
  • ENABLE_UVC_WIFI_XFER 作用是使能 wifi 及 http 视频传输,这里我将值设为1,这样能够在网页上看到摄像头画面,如果只想验证摄像头是否能够运行,将该值设为 0。
  • DEMO_UVC_XFER_BUFFER_SIZE 作用是指定USB摄像头数据缓冲区的大小。

在主函数 app_main() 中的 frame_interval 可以修改帧率,这里先不做改动。

2. 项目配置

(1)目标芯片设置

我使用的 ESP-IDF 版本为 v5.4.3,在选择芯片 esp32-s3 时产生报错,这里需要把 main 文件夹下idf_component.yml 文件中的 override_path: "../../../../../components/usb/usb_stream" 给删除掉,把项目中生成的 build 文件夹手动删除(若没有 build 则忽略)。然后再重新选择芯片esp32-s3。

(2)wifi 连接模式

项目中有两种 wifi 连接模式:STA (作为客户端连接 wifi)和AP(作为热点供外部设备连接)。默认情况下,项目采用 AP 模式。打开 components\xfer_http\app_wifi.c 文件可以查看 wifi 配置。

  • EXAMPLE_ESP_WIFI_SSID          STA 模式时连接目标 wifi 的 ID 名称。
  • EXAMPLE_ESP_WIFI_PASS   STA 模式时连接目标 wifi 的密码。
  • EXAMPLE_ESP_MAXIMUM_RETRY  STA 模式时连接目标 wifi 的最大重连次数。
  • EXAMPLE_ESP_WIFI_AP_SSID  AP 模式时作为热点的 ID 名称。
  • EXAMPLE_ESP_WIFI_AP_PASS AP 模式时作为热点所需的密码。
  • EXAMPLE_MAX_STA_CONN STA 模式时允许连接设备的数量。
  • EXAMPLE_IP_ADDR  作为服务器的IP地址(默认 192.168.4.1)。
  • EXAMPLE_ESP_WIFI_AP_CHANNEL  AP 模式时的信道配置。

设置哪种模式的 ID 就以哪种模式工作,并且ESP32-S3可同时作为 STA 和 AP 工作,这里先不做设置。

三、烧录运行

将程序构建好后直接烧录至开发板中,此时可以用手机 wifi 搜索到名为 ESP32S3-UVC 的热点,连接后打开手机浏览器,在地址栏输入 192.168.4.1,点击 “Start Stream” 即可打开 即可打开视频接收画面。

 

检查 VSCode 的终端日志,能够查看摄像头所支持的分辨率和帧率信息,同样的摄像头用在不同的芯片上,所支持的信息是不同的。若需要查看日志后修改帧率否则无法运行,帧率计算规则是   fps = 10000000ul / FrameInterval。比如1280*720的分辨率下,设备支持帧率为 10fps 或15fps。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐