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]