ESP32-S3接OV5640出现“Failed to get the frame on time”以及“NO-SOI”、“NO-EOI”问题的定位过程与最终解决(4)

接前一篇文章:ESP32-S3接OV5640出现“Failed to get the frame on time”以及“NO-SOI”、“NO-EOI”问题的定位过程与最终解决(3)

 

上一回讲到,笔者使用唯一不会出现“Failed to get the frame on time”的OV5640摄像头,在进行获取一帧图像即拍照的时候时间过长。查代码之后,发现就是乐鑫的官方代码,这套代码已经在多款摄像头开发板和不计其数的摄像头模块上使用过了,其正确性毋庸置疑。那么接下来应该怎样进一步查?

好早笔者已经有了之前正确的板子,新旧板子只是存在以下几处差异:

1)SCCB的SCL和SDA引脚不一样;

2)新版硬件使用了PWDN和RESET引脚,而老版硬件没有使用(接死了);

3)供电不一样。老版硬件是2.8V供电,新版硬件为了省电,改为了1.8V供电。

既然只有这几个区别,那就好办了。将同样的测试程序(代码见前文)在新老两个板子上都跑一下(当然,引脚要进行调整),看一下现象。实测发现:

1)老板子上执行测试程序,功能正常,获取一帧的速度很快;

2)老板子上执行测试程序,获取一帧的速度2~3秒。

走到这里,从宏观现象上来分析,应该不是软件问题了,更多怀疑硬件的问题。即使万里有一,仍然是软件问题,也是与上边这几处差异有关。

针对这一问题与乐鑫的技术支持沟通,得到的建议是:该问题看起来更多的是个硬件问题。测试下 sensor 的VSYNC 、HREF 管脚是否有正常的波形输出。他们决定了是否触发 esp32 上的 start_recv、end_recv。

说来也确实挺惭愧的,这个问题查找至今,都一直没有是用示波器实际测量一下信号,人家乐鑫这个建议非常好。笔者在硬件同事的帮助下测量了XCLK、VSYNC、HREF等信号。经过测量,发现:

XCLK两个板子都一样;VSYNC老板子出现很频繁,1秒钟有2~3次左右,而新板子确实是2~3秒左右才出现一次。这就解释了为什么新板子2~3秒才获得一幅图像。

那么到这里又有两个怀疑和排查的方向:

1)硬件层面,根据《OV5640_Camera_Module_Hardware_Application_Notes》仔细看一下硬件层面有没有没有注意到的;

2)软件层面,对比一下初始化以及拍照过程中的日志,看一下新旧两个版本硬件的摄像头配置是否存在差异。

那么到底是硬件层面还是软件层面的问题呢?请看下回。

 

### ESP32-S3OV5640摄像头模块的兼容性及使用方法 #### 兼容性分析 ESP32-S3是一款基于乐鑫科技(Espressif)设计的微控制器芯片,具有双核处理器、丰富的GPIO口以及支持Wi-Fi和蓝牙的功能。它能够很好地适配多种传感器和外围设备,其中包括OV5640摄像头模块。然而,在实际连过程中可能会遇到一些问题,例如“Failed to get the frame on time”或“No SOI/No EOI”的错误提示[^3]。 这些问题通常源于硬件配置不当或者软件初始化设置不正确。为了确保两者之间的良好配合,需注意以下几个方面: 1. **电源管理** OV5640需要稳定的供电电压来正常工作,推荐为其提供独立的3.3V电源供应,并确认电流容量足够大以满足高分辨率图像采集的需求。 2. **信号完整性** 数据线长度应尽可能短,减少干扰;同时建议增加去耦电容靠近相机模块安装位置,从而改善噪声性能并增强稳定性。 3. **时钟同步** 正确调整PCLK频率至适合范围对于避免数据传输超时至关重要。一般情况下,默认值可能偏高导致丢帧现象发生,适当降低可以有效缓解此类状况。 #### 配置指南 针对上述提到的一些常见挑战,下面给出具体的解决方案及其对应的参数调节策略: - 设置合适的像素格式 (Pixel Format),比如JPEG压缩模式能显著减轻带宽压力; - 调整帧率(Frame Rate)到合理区间内(如15fps~30fps之间),既保证流畅度又兼顾资源消耗平衡; - 如果仍然存在时间不足获取画面的情况,则尝试进一步减小图片尺寸(Size Resolution)直至稳定为止。 这些操作都可以通过修改驱动程序中的相关变量实现控制。 #### 示例代码展示 以下是一段简单的Arduino IDE环境下的测试代码片段用于演示如何读取来自OV5640的数据流并将之保存成文件形式上传云端服务器端口供后续处理分析用途。 ```cpp #include <WiFi.h> #include "esp_camera.h" // WiFi credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(115200); // Initialize camera module with default settings. esp_err_t err = esp_camera_init(&config); if(err != ESP_OK){ Serial.printf("Camera Init Failed\n"); return; } // Connect to Wi-Fi network WiFi.begin(ssid, password); } void loop(){ camera_fb_t * fb = NULL; // Capture an image from the sensor. fb = esp_camera_fb_get(); if(!fb || !fb->width || !fb->height ){ Serial.println("Capture failed."); vTaskDelay(pdMS_TO_TICKS(10)); continue ; } String url="http://example.com/upload"; // Replace this URL as needed. HTTPClient http; // Make a POST request and send captured photo data along headers info etc.. http.addHeader("Content-Type", "image/jpeg"); int httpResponseCode=http.POST(fb->buf , fb->len,url); delay(1000); // Wait one second before next capture cycle begins again... } ``` 此脚本实现了基本功能框架搭建,具体细节部分还需要依据项目需求做相应改动优化才能达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值