构建一个基于实时以太网的JPEG流媒体系统
扫描二维码
随时随地手机看文章
1. 项目概述
本项目演示了一个基于实时以太网的JPEG流媒体系统,该系统使用WIZnet Pico (RP2040/RP2350)板结合ArduCAM快速启动300万像素DVP摄像机构建。
该系统由两个主要部分组成:
摄像头侧(Pico):通过8位DVP接口捕获JPEG帧,并将数据分成UDP数据包通过以太网传输。
PC端(Python):接收数据包,使用报头信息重新组装完整的帧,并使用OpenCV实时解码jpeg。
通过该项目,创客可以全面了解通过以太网传输的实时嵌入式摄像头,为物联网视觉、机器人和远程监控应用奠定基础。
核心关键词:RP2040 DVP PIO DMA / UDP JPEG流/帧重组/ OpenCV实时解码
2. 硬件模块
WIZnet Pico (RP2040 / RP2350)
支持RP2040和RP2350(最高200MHz系统时钟)
嵌入式以太网选项:
W5100S / W5500 / W6100 - SPI (40MHz)
W6300 - QSPI Quad (37.5MHz)
完全兼容Pico SDK 1.5.1
支持同时使用DVP摄像机+以太网+ SPI Flash + UART
Arducam物联网快速启动300万像素DVP摄像头
【Arducam物联网快速启动300万像素DVP摄像头】
该模块具有300ms的瞬时启动能力和超低功耗设计,是“即时响应物联网视觉应用”的理想选择。
3. 性能比较(Sys Clock 200MHz)
W6300 QSPI变体即使在实时应用程序中也能提供平滑的高清流。
这些值代表了典型的jpeg压缩帧大小和在W6300-EVB-Pico2板上37.5 MHz QSPI操作下测量的吞吐量。
4. 引脚映射(Pico↔ArduCAM)
每个PCLK上升沿采样一个像素(8位数据),而VSYNC HIGH定义活动帧传输窗口。
5. JPEG帧捕获序列(在Pico上)
PIO处理时序逻辑,而DMA连续地将32位数据块(每行512字节)传输到RAM中。
如果在前4行(512B × 4)中未检测到SOI标记(0xFFD8),则系统将重试,直到捕获有效帧为止。
6. 最终流处理(基于udp的传输)
由于JPEG帧的大小不同(从几KB到几十KB),单个UDP数据包不能包含整个图像。
因此,Pico将每个帧分成≤1400字节的有效负载,并为每个帧附加一个小的4字节报头。
T传输(Pico)
R汇编(Python)
在接收端,每个数据包根据帧ID和包ID重新组装。Assembler类重建完整的JPEG帧如下:
然后,OpenCV对帧进行解码并实时显示。
即使在UDP传输下,本设计也通过基于id的智能重排序实现了帧的无损拼接。
7. 如何运行(执行指南)
按照以下步骤构建、flash和运行ArduCAM × WIZnet Pico JPEG Streaming演示。
①在Top-Level CMakeLists.txt中选择您的Board
打开项目的根目录CMakeLists.txt。
取消评论您的目标板(例如,W6300-EVB-PICO2)并注释掉其他板。
这确保了正确的引脚映射、SPI/QSPI模式和驱动程序的使用。
例子:
然后,打开
例子/ WIZnet_ArduCAMMega_UDP_Streaming / c
并根据需要修改如下参数:
IP地址/网关/子网
UDP端口号(默认为5000)
系统时钟频率(默认200mhz)
编辑完成后保存文件。
②构建固件
在项目目录下打开终端,运行:
这将生成编译后的固件文件:
③将固件Flash到Pico
通过USB连接您的WIZnet Pico (RP2040/RP2350),同时按住BOOTSEL按钮。
该板将显示为USB驱动器(例如,RPI-RP2)。
复制生成的main。Uf2文件到这个驱动器。
单板将自动重启并开始运行流固件。
④在PC上运行Python GUI
移动到示例目录并运行GUI流查看器:
这个GUI将:
•连接到Pico的UDP流媒体服务器
•重新组装传入的JPEG数据包
•解码和显示他们在实时使用OpenCV
8. 关键要点
本文编译自hackster.io





