使用HTTP / MQTT构建以太网供电的物联网摄像头
扫描二维码
随时随地手机看文章
现代物联网应用需要可靠的实时图像流功能,用于从安全监控到远程监控的应用。虽然基于wifi的解决方案很常见,但它们往往存在信号不稳定和范围有限的问题。该项目演示了如何使用内置以太网功能的W6300-EVB-PICO2微控制器构建强大的以太网供电摄像机系统,使用HTTP和MQTT协议将实时图像流式传输到Adafruit IO,以实现最大的灵活性和可靠性。
步骤1:收集组件
对于这个项目,您将需要:
•W6300-EVB-PICO2单片机
•OV2640摄像头模块
•电阻2K欧姆
•面包板和跳线
步骤2:硬件设置
evb - pico2 -先进的物联网基础
W6300-EVB-PICO2为该项目提供了良好的基础:
•RP2350双Cortex-M33 (150MHz) + 520KB SRAM用于处理图像
•16MB闪存+ 64KB网络缓冲数据处理
•用于HTTP/MQTT通信的8个并发套接字
•IPv4/IPv6双栈支持面向未来的网络
•增强安全性与TrustZone +安全启动
连接sov2640相机→W6300-EVB-PICO2
•Vsync→gp12
•Href→gp11
•PCLK→gp10
•D0-D7→GP0-GP7(数据总线)
•SCL→GP9 (I2C时钟)→WITH上拉电阻3.3V
•SDA→GP8 (I2C数据)→WITH上拉电阻3.3V
•RESET→GP13(可选)
重要提示:在给电路板上电之前,要仔细检查所有连接的安全性和准确性。
为什么上拉电阻是必不可少的?
•I2C协议要求:I2C是一个开路漏极/开路采集器总线,需要上拉
•信号完整性:没有上拉,SDA和SCL线路将浮动,导致通信错误
•适当的逻辑电平:上拉确保信号达到适当的高(3.3V)和低(0V)电平
•摄像机检测:如果没有上拉,摄像机的I2C地址(0x30)将无法检测到
电阻规格
•取值范围:标准值为4.7kΩ(4700欧姆),也可选择2kΩ-10kΩ
•功率:1/4瓦(0.25W)标准电阻
•数量:2个电阻(一个用于SDA,一个用于SCL)
•连接:3.3V到每条I2C线之间
步骤3:设置Adafruit IO
设置Adafruit IO
创建提要:
•相机饲料
设计仪表板:
•转到Dashboard部分设计界面,添加图像块
步骤4:代码解释
导入所需库
核心系统库
•time -为图像捕获之间的延迟和间隔提供计时功能
•board -访问微控制器特定的引脚定义和硬件功能
•busio -处理串行通信协议,包括摄像头控制的I2C和以太网通信的SPI
•digitalio -管理相机控制信号和以太网复位功能的GPIO引脚
相机控制
•adafruit_ov2640 - OV2640相机模块控制的专用库,提供图像捕获,分辨率设置和JPEG压缩配置的功能
以太网连接(W6300专用)
•wiznet - wiznet芯片组驱动程序在W6300-EVB-PICO2上实现以太网连接
•adafruit_wiznet5k -高级以太网接口库,带有WIZNET5K类,用于网络初始化和管理
•socketpool——为HTTP和MQTT通信创建和管理网络套接字
数据处理与编码
•binascii -将二进制图像数据转换为适合网络传输的ASCII格式
•ssl——为加密通信提供安全套接字层支持(尽管通常出于性能考虑而禁用)
•gc -用于内存管理的垃圾收集模块,在处理大型图像缓冲区时至关重要
云通信协议
•adafruit_requests -简化的HTTP客户端,用于对Adafruit IO进行REST API调用
•adafruit_minimqtt -轻量级MQTT客户端,用于使用Adafruit IO发布/订阅消息
•adafruit_io - Adafruit IO集成库与IO_HTTP类,用于基于http的数据传输
管理的秘密
此字典存储您的Adafruit IO凭据。您应该创建一个单独的secrets.py文件来保证敏感信息的安全。
网络配置
定义网络连接的MAC地址、静态IP地址、子网掩码、网关和DNS服务器地址。
硬件初始化
•以太网配置:为以太网连接配置引脚并重置WIZnet模块。
•初始化以太网:WIZnet模块使用SPI初始化,启用DHCP以自动获取IP地址。
相机的设置
为摄像机控制初始化I2C通信,并配置具有并行数据传输引脚的OV2640摄像机模块。
细节:
•I2C引脚(GP8, GP9)用于摄像头配置和设置
•并行数据引脚(GP0-GP7)使用8位并行接口处理高速图像数据传输
•控制信号(时钟,vsync, href, reset)管理图像捕获的定时和同步:
•时钟(GP10):用于数据同步的像素时钟
•VSYNC (GP12):表示帧启动的垂直同步信号
•HREF (GP11):行数据的水平参考信号
•Reset (GP13):摄像头模块的硬件复位控制
通信协议选择
允许用户选择HTTP或MQTT协议之间的数据传输到Adafruit IO。
过程:
•用户输入提示选择通信协议
•根据选择初始化适当的客户端(HTTP或MQTT)
•设置Adafruit IO平台的连接参数
•提供连接就绪状态反馈
HTTP模式:
•使用ssl安全的HTTP会话进行数据传输
•为Adafruit IO通信创建HTTP IO客户端
•适用于简单的请求/响应数据传输
MQTT模式:
•为发布/订阅通信建立持久的MQTT连接
•连接到Adafruit IO的MQTT代理
•使用未加密连接(为提高内存效率禁用SSL)
•为图像提要发布创建主题路径
主捕获回路
连续图像捕获和传输循环与动态内存管理和错误处理。
工艺流程:
•对于内存受限的环境,初始化时使用较小的缓冲区大小(15KB)
•从相机连续捕获图像
•通过选定的协议(HTTP或MQTT)传输图像
•实现基于内存可用性的自适应缓冲区大小
•包括全面的错误恢复机制
主要业务:
图像获取:
•为图像存储分配字节数组缓冲区
•从OV2640相机捕获JPEG图像
•验证捕获的图像是否有足够的数据(>100字节)
数据处理:
•将图像数据编码为Base64格式,用于基于文本的传输
•Base64编码确保通过基于文本的协议安全传输数据
数据传输:
•MQTT模式:将编码的图像发布到Adafruit IO feed
•HTTP模式:通过HTTP POST请求发送编码后的图像
基于用户选择的特定模式传输
动态内存管理:
•缓冲区扩展:当图像接近当前限制时增加缓冲区大小
•Buffer Reduction:减少内存错误时的缓冲区大小
•内存限制:缓冲区范围从10KB到25KB
•垃圾收集:每个周期后显式内存清理
步骤5:功能和好处
•双重协议支持(HTTP/MQTT)
•自适应内存管理
•实时图像传输
•鲁棒错误恢复
•硬件摄像头/以太网集成
结论
该物联网图像捕获系统成功演示了:
•在W6300-EVB-PICO2上可靠的摄像头到云传输
•约束环境的有效内存管理
•灵活的协议支持不同的部署需求
•嵌入式视觉应用的实践基础
该解决方案平衡了性能和资源限制,为各种物联网视觉用例提供了一个通用的平台。
本文编译自hackster.io





