esps3-cam LoadProhibited 异常,求助

本人小白,多多见谅
设备esps3-cam内置了一个ov2640的摄像头

运行代码

import camera
import time


def deinit_camera():
    try:
        camera.deinit()
        print("摄像头资源已释放")
    except Exception as e:
        print("释放摄像头资源失败:", e)


def init_camera():
    try:
        
        deinit_camera()
      
        time.sleep(1)
       
        camera.init(0, format=camera.JPEG) 
        print("摄像头初始化成功")
    except Exception as e:
        print("摄像头初始化失败:", e)
        raise


def main():
    try:
        init_camera()
        
    except Exception as e:
        print("程序运行失败:", e)
    finally:
       
        deinit_camera()


if __name__ == "__main__":
    main()

运行输出

MPY: soft reboot
摄像头资源已释放
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x4201c02a  PS      : 0x00060030  A0      : 0x820134fe  A1      : 0x3fced690  
A2      : 0x3fcabe88  A3      : 0x3fced7f8  A4      : 0x3c132c8c  A5      : 0x00001000  
A6      : 0xffff8fff  A7      : 0x3ffffffc  A8      : 0x00000000  A9      : 0x3fced6a0  
A10     : 0x00000016  A11     : 0x00000000  A12     : 0x0000005c  A13     : 0x3fcabee4  
A14     : 0x00000001  A15     : 0x00000005  SAR     : 0x00000011  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x400570e8  LEND    : 0x400570f3  LCOUNT  : 0x00000000  


Backtrace: 0x4201c027:0x3fced690 0x420134fb:0x3fced6d0 0x42012fd9:0x3fced700 0x42002ba5:0x3fced750 0x42002c03:0x3fced7f0 0x4202018d:0x3fced8a0 0x42026e99:0x3fced8d0 0x42026f5d:0x3fced8f0 0x40379785:0x3fced910 0x4202012c:0x3fced9b0 0x42026e99:0x3fced9e0 0x403796d5:0x3fceda00 0x4202012c:0x3fcedaa0 0x42026e99:0x3fcedad0 0x403796d5:0x3fcedaf0 0x4202012c:0x3fcedb90 0x42026e99:0x3fcedbe0 0x42026eae:0x3fcedc00 0x42059133:0x3fcedc20 0x420592d0:0x3fcedcb0 0x42039f8a:0x3fcedd00




ELF file SHA256: cb0d8b0075e23314

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40383786
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3810,len:0xf8c
load:0x403c9700,len:0xb3c
load:0x403cc700,len:0x2dc8
entry 0x403c989c
MicroPython v1.20.0-555-g92717a95c-dirty on 2023-11-05; ESP32S3 module (spiram octal) with ESP32S3
Type "help()" for more information.
7 个赞

我是小白,看不懂

坛子里有几位大佬的搞这个的,想不起来名字了,想起来再艾特。

今天开放注册了帖子多,你这不一定被大佬瞅见呀。

不懂帮顶一下

白嫖客,不懂

你需要看一下你的硬件原理图,按照原理图做一下管脚配置。
我这边的配置是
PWDN_GPIO_NUM = -1
RESET_GPIO_NUM = -1
XCLK_GPIO_NUM = 15
SIOD_GPIO_NUM = 4
SIOC_GPIO_NUM = 5

Y2_GPIO_NUM = 11
Y3_GPIO_NUM = 9
Y4_GPIO_NUM = 8
Y5_GPIO_NUM = 10
Y6_GPIO_NUM = 12
Y7_GPIO_NUM = 18
Y8_GPIO_NUM = 17
Y9_GPIO_NUM = 16

然后camera的初始化用如下方法:
camera.init(0, d0=Y2_GPIO_NUM, d1=Y3_GPIO_NUM, d2=Y4_GPIO_NUM, d3=Y5_GPIO_NUM, d4=Y6_GPIO_NUM, d5=Y7_GPIO_NUM, d6=Y8_GPIO_NUM, d7=Y9_GPIO_NUM,
format=camera.JPEG, framesize=camera.FRAME_HVGA,
xclk_freq=camera.XCLK_10MHz,
href=HREF_GPIO_NUM, vsync=VSYNC_GPIO_NUM, reset=RESET_GPIO_NUM, pwdn=PWDN_GPIO_NUM,
sioc=SIOC_GPIO_NUM, siod=SIOD_GPIO_NUM, xclk=XCLK_GPIO_NUM, pclk=PCLK_GPIO_NUM)

PS:淘宝卖的板子都是天下文章一大抄,售后也不好,哪天我闲了自己设计一块儿,省的这些事儿

我先书签了,感谢大佬,我现在在学校回去再弄了

我有arduino版的代码

/**
 * @file Camera.h
 * @author 稀饭
 * @brief 定义了 Camera 类,用于控制摄像头模块的初始化和图像捕获。
 * 
 */

#ifndef CAMERA_H
#define CAMERA_H

#include <Arduino.h>
#include <esp_camera.h>
#include "Logger.h"

extern Logger logger; ///< 外部定义的日志记录器对象

#define PWDN_GPIO_NUM 32    ///< 摄像头模块的电源控制 GPIO 引脚
#define RESET_GPIO_NUM -1   ///< 摄像头模块的复位 GPIO 引脚
#define XCLK_GPIO_NUM 0     ///< 摄像头模块的时钟信号 GPIO 引脚
#define SIOD_GPIO_NUM 26    ///< 摄像头模块的数据线 GPIO 引脚
#define SIOC_GPIO_NUM 27    ///< 摄像头模块的控制线 GPIO 引脚

#define Y9_GPIO_NUM 35      ///< 摄像头模块的 Y9 数据线 GPIO 引脚
#define Y8_GPIO_NUM 34      ///< 摄像头模块的 Y8 数据线 GPIO 引脚
#define Y7_GPIO_NUM 39      ///< 摄像头模块的 Y7 数据线 GPIO 引脚
#define Y6_GPIO_NUM 36      ///< 摄像头模块的 Y6 数据线 GPIO 引脚
#define Y5_GPIO_NUM 21      ///< 摄像头模块的 Y5 数据线 GPIO 引脚
#define Y4_GPIO_NUM 19      ///< 摄像头模块的 Y4 数据线 GPIO 引脚
#define Y3_GPIO_NUM 18      ///< 摄像头模块的 Y3 数据线 GPIO 引脚
#define Y2_GPIO_NUM 5       ///< 摄像头模块的 Y2 数据线 GPIO 引脚
#define VSYNC_GPIO_NUM 25   ///< 摄像头模块的 VSYNC 信号 GPIO 引脚
#define HREF_GPIO_NUM 23    ///< 摄像头模块的 HREF 信号 GPIO 引脚
#define PCLK_GPIO_NUM 22    ///< 摄像头模块的像素时钟 GPIO 引脚

/**
 * ### 摄像头控制类
 * 
 * 该类负责控制摄像头模块的初始化和图像捕获。
 * 
 * ### 属性
 * 
 * - `config`:摄像头配置信息
 * 
 * ### 方法
 * 
 * - `Camera()`:构造函数
 * - `init()`:初始化摄像头模块
 * - `capture()`:捕获图像
 * 
 */
class Camera {
public:
    /**
     * ### 构造函数
     * 
     * 初始化 Camera 对象。
     */
    Camera();

    /**
     * ### 初始化摄像头模块
     * 
     * 初始化 ESP32 上的摄像头模块。
     * 
     * #### 返回
     * 
     * - esp_err_t:ESP32 系统错误码,ESP_OK 表示成功
     */
    esp_err_t init();

    /**
     * ### 捕获图像
     * 
     * 从摄像头模块捕获图像帧。
     * 
     * #### 返回
     * 
     * - camera_fb_t*:指向捕获到的图像帧的指针
     */
    camera_fb_t* capture();

    /**
     * ### 返回图像帧缓冲区
     * 
     * 释放不再使用的图像帧缓冲区。
     * 
     * #### 参数
     * 
     * - `fb`:要释放的图像帧缓冲区的指针
     */
    void returnFrameBuffer(camera_fb_t *fb);

private:
    camera_config_t config; ///< 摄像头配置信息
};

#endif // CAMERA_H
/**
 * @file Camera.cpp
 * @author 稀饭
 * @brief 实现了 Camera 类的方法,包括摄像头模块的初始化和图像捕获功能。
 */

#include "Camera.h"

/**
 * ### 构造函数
 * 
 * 初始化 Camera 对象,并设置摄像头模块的配置参数。
 */
Camera::Camera()
{
    config = (camera_config_t){
        .pin_pwdn = PWDN_GPIO_NUM,
        .pin_reset = RESET_GPIO_NUM,
        .pin_xclk = XCLK_GPIO_NUM,
        .pin_sscb_sda = SIOD_GPIO_NUM,
        .pin_sscb_scl = SIOC_GPIO_NUM,
        .pin_d7 = Y9_GPIO_NUM,
        .pin_d6 = Y8_GPIO_NUM,
        .pin_d5 = Y7_GPIO_NUM,
        .pin_d4 = Y6_GPIO_NUM,
        .pin_d3 = Y5_GPIO_NUM,
        .pin_d2 = Y4_GPIO_NUM,
        .pin_d1 = Y3_GPIO_NUM,
        .pin_d0 = Y2_GPIO_NUM,
        .pin_vsync = VSYNC_GPIO_NUM,
        .pin_href = HREF_GPIO_NUM,
        .pin_pclk = PCLK_GPIO_NUM,
        .xclk_freq_hz = 20000000,
        .ledc_timer = LEDC_TIMER_0,
        .ledc_channel = LEDC_CHANNEL_0,
        .pixel_format = PIXFORMAT_JPEG,
        .frame_size = FRAMESIZE_QVGA,
        .jpeg_quality = 10,
        .fb_count = 1,
    };
}

/**
 * ### 初始化摄像头模块
 * 
 * 初始化 ESP32 上的摄像头模块,并配置指定的参数。
 * 
 * #### 返回
 * 
 * - esp_err_t:ESP32 系统错误码,ESP_OK 表示成功
 */
esp_err_t Camera::init()
{
    esp_err_t err = esp_camera_init(&config);
    if (err != ESP_OK)
    {
        logger.error("相机初始化失败", "camera");
        return err;
    }

    sensor_t *s = esp_camera_sensor_get();
    if (s->id.PID == OV2640_PID)
    {
        // Camera initialized
    }

    logger.info("相机初始化成功", "camera");
    return ESP_OK;
}

/**
 * ### 捕获图像
 * 
 * 从摄像头模块捕获一帧图像。
 * 
 * #### 返回
 * 
 * - camera_fb_t*:指向捕获到的图像帧的指针,如果捕获失败,则返回 nullptr
 */
camera_fb_t *Camera::capture()
{
    camera_fb_t *fb = esp_camera_fb_get();
    if (!fb)
    {
        logger.error("获取图像失败", "camera");
        return nullptr;
    }

    logger.info("获取图像成功", "camera");
    return fb;
}

/**
 * ### 返回图像帧缓冲区
 * 
 * 释放不再使用的图像帧缓冲区。
 * 
 * #### 参数
 * 
 * - `fb`:要释放的图像帧缓冲区的指针
 */
void Camera::returnFrameBuffer(camera_fb_t *fb)
{
    esp_camera_fb_return(fb);
}

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。