本示例旨在演示如何实现简单的网络服务器并使用 WIZnet W5100S 将图像从 OV2640 摄像头传输到网页。
转发: Image Capture and Streaming Webserver using W5100S, RP2040 and OV2640
项目介绍
项目中用到的库
项目总结
Web 服务器将服务 3 个页面:
- 根页面 - 显示简单文本和服务器正常运行时间
- 捕获页面 - 当用户访问页面时,相机拍摄单张图像并传输到页面
- 流页面 - 用户访问时,摄像头实时发送帧。
代码解释
以太网和网络服务器相关代码:
出于测试目的,网络服务器将在静态 IP 上运行,该 IP 编码在 Defines.h 文件中。
函数功能:
- 此函数生成一个 HTML 响应,其中包含有关服务器正常运行时间的信息,并在访问根 URL(“/”)时提供该响应。
函数功能:
- 当未找到页面(404 Not Found)时,此函数会响应有关所请求的 URI、HTTP 方法和参数的信息。 - 如果请求中提供了查询参数“ql”,则会更改相机模块的 JPEG 质量设置。
serverCapture() 函数:
- 该函数启动相机捕获,测量捕获所需的时间,然后调用“camCapture()”将捕获的图像发送到客户端。
serverStream() 函数:
- 此函数为流视频帧设置多部分响应。 - 它连续捕获来自摄像机的帧并将其作为多部分响应的一部分发送,从而创建实时视频流。
相机相关功能
test_capture() 函数:
- 此函数清除相机的 FIFO(先进先出)标志并启动捕获。
camCapture() 函数:
- 此函数从相机捕获图像并将其作为具有适当内容类型和长度的 HTTP 响应发送。 - 它从相机的 FIFO 缓冲区读取图像数据并将其发送到客户端。
read_fifo_burst() 函数:
- 该函数以突发模式从相机模块的 FIFO 缓冲区读取图像数据。 - 它处理图像数据并将其打印到串行端口。 该函数不直接用于处理 HTTP 请求。
i2c_init()、spi_init() 和camera_init() 函数:
- 这些函数初始化 I2C 和 SPI 通信接口并设置相机模块。 - 他们执行各种检查以确保正确建立与相机模块的通信。
设置和循环
设置()函数:
- 此函数是 Arduino 启动时运行一次的设置例程。 - 初始化串行通信、I2C、SPI 和相机模块。 - 它配置以太网连接并设置各种路由来处理 HTTP 请求。
循环()函数:
- `loop()` 函数持续运行,其主要目的是通过 `server.handleClient()` 方法处理传入的 HTTP 请求。
示范
当连接到网络时,该板将在指定的 IP 上运行 Web 服务器。
文件