ESP32-CAM Guru Meditation Error

I’ve gone through my code and cleaned it up a bit for readability. I’m a bit confused about the “messy pin assignments”, all pins assigned are required. Are you maybe referencing how there is a section for defining the pins and then lower down in setup the initialization? That isn’t a double declaration but rather setting the pins up and then initializing the camera with those pins.

Here is my cleaned up code, followed by the error received when requesting a photo through the app. The behaviour is a little inconsistent. Sometimes the device fails when trying to initialize the camera on boot up, at which point it will reboot 2-3 times before successfully booting with a connection to Blynk. Once it is connected it is stable and all functions work with the exception of taking a photo. Taking a photo causes the device to crash with the same error (sometimes slightly different memory addresses) at which point it will reboot, sometimes immediately with a successful boot and other times with the above mentioned 2-3 reboot cycle before success.

Is it possible that Blynk Edgent is storing either the provisioning setup or OTA in the same area the camera is attempting to write too? If so does anyone know how to adjust the write address for the camera or have experience in anything like this? Otherwise, any ideas on the reason for the crash if you feel this isn’t the issue?

Code:

 
// Fill-in information for your Blynk connection here


#define BLYNK_TEMPLATE_ID "xxxx"
#define BLYNK_DEVICE_NAME "xxxx"
#define BLYNK_HEARTBEAT 30
#define BLYNK_FIRMWARE_VERSION        "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG

// Pin Defines

#define PHOTOCLICK V5
#define LED 4
#define DOORUP V7
#define DOORDOWN V6


// Uncomment your board, or configure a custom board in Settings.h
//define USE_WROVER_BOARD

// Libraries

#include "BlynkEdgent.h"
#include "esp_camera.h"
#include "Arduino.h"
#include <WiFi.h>
#include <WiFiClient.h> 
#include <ESP32_FTPClient.h>
#include "soc/soc.h"           // Disable brownout problems
#include "soc/rtc_cntl_reg.h"  // Disable brownout problems

// Blynkv LED setup

WidgetLED led1(V1);
WidgetLED led2(V2);
WidgetLED led3(V3);
WidgetLED led4(V4);

// Pin definition for CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

//FTP server information and setup

char ftp_server[] = "files.000webhost.com";
char ftp_user[] = "xxxxx";
char ftp_pass[] ="xxxxx";
ESP32_FTPClient ftp (ftp_server,ftp_user,ftp_pass, 5000, 2); // you can pass a FTP timeout and debbug mode on the last 2 arguments

// Variables 

bool takePhoto = false; 
bool loading = false;
String displayImage = "https://coopcommandimages.000webhostapp.com/uploads/1.png";
String coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/1.png";
String coopImage = "coopPic.jpg";
int i = 1;
int ic = 1;
int imageFlip = 1;
char coopRx; // Info received from CoopCommand
bool newDataRx = false; //has CoopCam received new data from CoopCommand


void setup() {
  
  // Startup Serial, Blynk, Blynk Timers and initial imamge. Disable brownout detector
  Serial.begin(115200);
  delay(50);
  BlynkEdgent.begin();
  pinMode(LED, OUTPUT);
  timer.setInterval(1000,coopCom);
  timer.setInterval(250,loadingImage);
  Blynk.setProperty(V0, "url", 1, coopImageURL);
  Blynk.virtualWrite(V0, 1); 
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
  
  // Configure the Camera

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG; 
  
// Image settings depending on PSRAM availability

  if(psramFound()){
    config.frame_size = FRAMESIZE_SVGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 20;
    config.fb_count = 2;
  } 
  else {
    config.frame_size = FRAMESIZE_VGA;
    config.jpeg_quality = 20;
    config.fb_count = 1;
  }
  // Initialize Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    return;
  }

}


// Changes image in Blynk app depending on camera state
void loadingImage( void ) {
if (loading) {
  displayImage= "https://coopcommandimages.000webhostapp.com/uploads/";
  displayImage+= i;
  displayImage+= ".png";
  Blynk.setProperty(V0, "url", 1, displayImage); 
  if (i <= 6) {
    i ++;
  }
  else if (i > 6) {
    i = 1;
  }
}
else if (!loading) {
  if (ic == 1) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic2.jpg";
  }
  else if (ic == 2) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic3.jpg";
  }
  else if (ic == 3) {
    coopImageURL = "https://coopcommandimages.000webhostapp.com/uploads/coopPic4.jpg";
  }
Blynk.setProperty(V0, "url", 1, coopImageURL);
Blynk.virtualWrite(V0, 1);  
i = 1;      
}
}

// Sends a new image to the FTP server 

void sendPhoto ( void ) {
   if (takePhoto) {

   camera_fb_t * fb = NULL;
  
  // Take Picture with Camera
  fb = esp_camera_fb_get(); 
  digitalWrite(LED, LOW); 
  delay (50);
  if(!fb) {
//    Serial.println("Camera capture failed");
    ESP.restart();
    return;
  }

if (imageFlip == 1) {
  ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic2.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 2;
  ic = 1;
  esp_camera_fb_return(fb);
    Serial.print('N');
   }
else if (imageFlip == 2) {
   ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic3.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 3;
  ic = 2;
  esp_camera_fb_return(fb);
  Serial.print('N');
   }
else if (imageFlip == 3) {
   ftp.OpenConnection();
  // Create the new file and send the image
  ftp.ChangeWorkDir("/public_html/uploads/");
  ftp.InitFile("Type I");
  ftp.NewFile("coopPic4.jpg");
  ftp.WriteData( fb->buf, fb->len );
  ftp.CloseFile();
  ftp.CloseConnection();
  takePhoto = false;
  imageFlip = 1;
  ic = 3;
  esp_camera_fb_return(fb);
  Serial.print('N');
   }
}
}

// Serial communication with CoopCommand board

void coopCom ( void ) {

  if (Serial.available() > 0) {
    coopRx = Serial.read();
    newDataRx = true;
  }
  if (newDataRx == true) {
    if (coopRx == 'O') { //If CoopCommand says the door is up
      led1.on();
      led2.off();
      led3.off();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'S') { //If CoopCommand says the door is down

      led1.off();
      led2.on();
      led3.off();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'U') { //If CoopCommand says the door is opening
      led1.off();
      led2.off();
      led3.on();
      led4.off();
      newDataRx = false;
    }
    if (coopRx == 'D') { //If CoopCommand says the door is closing
      led1.off();
      led2.off();
      led3.off();
      led4.on();
      newDataRx = false;
    }
  }
}

// Put the door up

BLYNK_WRITE(DOORUP) {
Serial.print('U');
}

// Put the door down

BLYNK_WRITE(DOORDOWN) {
Serial.print('D');
}

// Take a photo and display it in the app

BLYNK_WRITE(V5) {
digitalWrite(LED, HIGH);
Serial.print('L'); 
takePhoto = true;
loading = true;
loadingImage();
timer.setTimeout(250, sendPhoto);
timer.setTimeout(3000, []()
{
  loading = false;
  loadingImage();
});
}

// Sync app and device when connected

BLYNK_CONNECTED() {
    Blynk.syncAll();
}

void loop() {
  BlynkEdgent.run();
}

Error:

[E][camera.c:1327] camera_init(): gpio_install_isr_service failed (105)
[1353] Hold the button to reset configuration...
[E][camera.c:14Guru Meditation Error: Core  1 panic'ed (Interrupt wdt timeout on CPU1)
Core 1 register dump:
PC      : 0x4009297a  PS      : 0x00060e34  A0      : 0x80091b97  A1      : 0x3ffc0fa0  
A2      : 0x3ffb81f0  A3      : 0x3ffb8074  A4      : 0x00000001  A5      : 0x00000001  
A6      : 0x00060e23  A7      : 0x00000000  A8      : 0x3ffb8074  A9      : 0x3ffb8074  
A10     : 0x00000018  A11     : 0x00000018  A12     : 0x00000001  A13     : 0x00000001  
A14     : 0x00060e21  A15     : 0x00000000  SAR     : 0x0000000a  EXCCAUSE: 0x00000006  
EXCVADDR: 0x00000000  LBEG    : 0x4008d785  LEND    : 0x4008d795  LCOUNT  : 0xfffffffb  
Core 1 was running in ISR context:
EPC1    : 0x4009107a  EPC2    : 0x00000000  EPC3    : 0x00000000  EPC4    : 0x4009297a

ELF file SHA256: 0000000000000000

Backtrace: 0x4009297a:0x3ffc0fa0 0x40091b94:0x3ffc0fc0 0x4008fe73:0x3ffc0fe0 0x400e0b65:0x3ffc1020 0x400dedf1:0x3ffc1040 0x4017b509:0x3ffc1060 0x400d16a5:0x3ffc1080 0x400d25f1:0x3ffc10a0 0x40081379:0x3ffc10c0 0x4008aab5:0x3ffc10e0 0x4000921c:0x3ffb1d60 0x40007d13:0x3ffb1d80 0x40007c69:0x3ffb1da0 0x40008106:0x3ffb1dc0 0x400e0f82:0x3ffb1e50 0x400e3a91:0x3ffb1eb0 0x400d4951:0x3ffb1ee0 0x400e0606:0x3ffb1fb0 0x4009007a:0x3ffb1fd0

Core 0 register dump:
PC      : 0x4009107a  PS      : 0x00060e34  A0      : 0x800921d5  A1      : 0x3ffb3d70  
A2      : 0x3ffc04c0  A3      : 0x0000cdcd  A4      : 0xb33fffff  A5      : 0x00000001  
A6      : 0x00060e23  A7      : 0x0000abab  A8      : 0x0000abab  A9      : 0x3ffb3d80  
A10     : 0x3ffb32a0  A11     : 0x3ffb32a0  A12     : 0x00060620  A13     : 0x00000001  
A14     : 0x00060820  A15     : 0x00000000  SAR     : 0x00000000  EXCCAUSE: 0x00000006  
EXCVADDR: 0x00000000  LBEG    : 0x4008d26e  LEND    : 0x4008d279  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000

Backtrace: 0x4009107a:0x3ffb3d70 0x400921d2:0x3ffb3da0 0x4008fddb:0x3ffb3dc0 0x4014c4ae:0x3ffb3e00 0x4014c79c:0x3ffb3e20 0x40142760:0x3ffb3e40 0x401427be:0x3ffb3e60 0x401509ea:0x3ffb3e80 0x40150b4a:0x3ffb3ea0 0x401509c9:0x3ffb3ec0 0x40150b7c:0x3ffb3ee0 0x4014cfc4:0x3ffb3f00 0x4009007a:0x3ffb3f30

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
[1044]