Skip to content

ESP32-CAM test crashes in 2.0.2- OK in 1.0.6 #6526

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
1 task done
fanfanlatulipe26 opened this issue Apr 3, 2022 · 12 comments
Closed
1 task done

ESP32-CAM test crashes in 2.0.2- OK in 1.0.6 #6526

fanfanlatulipe26 opened this issue Apr 3, 2022 · 12 comments
Labels
Area: Libraries Issue is related to Library support.

Comments

@fanfanlatulipe26
Copy link

Board

ESP32-CAM

Device Description

"Simple" (?) ESP32-CAM module here from Banggood

Hardware Configuration

No other connection.
Powered by FTDI on an USB port of the PC or with an external 5v power supply. (FTDI only for upload /debug)

Version

v2.0.2

IDE Name

Arduino IDE 1.8.19

Operating System

Windows 10

Flash frequency

80Mhz

PSRAM enabled

yes

Upload speed

921600

Description

When compiled with release 1.0.6 the test case run as expected.
With exactly the same hardware (same PC, same FTDD, cable ....;) but with release 2.0.2 it crashes very often, with ramdom (??) causes.

The code is exactly this one from a tutorial at randomnerdtutorials.com
Raw code is here.
Small websever (using ESPAsyncWebServer) with a web page allowing to take a picture (always under the same name), save it in SPIFFS and display it on demand.
(I am aware of the need of config.grab_mode = CAMERA_GRAB_LATEST; for this kind of application in 2.02)

The original demo turns off the brownout detection, but even with the brownout detection enabled the results are bad and there is no explicit crash for brownout detection. Does not seem to be a power supply problem. Tests were also done wih external power supply.

Same test adapted to use the SD card instead of the SPIFFS run perfectly in 2.0.2
For this adaptation I just changed the #include and the .begin

//#include <SPIFFS.h>
#include <FS.h>
#include "SD_MMC.h"            // SD Card ESP32 + fs ++++++++++++++++++++++++++++++
#define SPIFFS SD_MMC         // SD Card ESP32 + fs +++++++ and change the .begin(  )

and 

// if (!SPIFFS.begin(true)) {
  if (!SPIFFS.begin("/sdcard",true)) {    //  +++++ changed for SD . Prevent use of pin 4 the LED

ESPAsyncWebServer version 1.2.3
Code compiled for AI Thinker ESP32-CAM board or ESP32 Dev Kit with psram enabled. Same results.

Sketch

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-take-photo-display-web-server/
  
  IMPORTANT!!! 
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

#include "WiFi.h"
#include "esp_camera.h"
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "soc/soc.h"           // Disable brownour problems
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include "driver/rtc_io.h"
#include <ESPAsyncWebServer.h>
#include <StringArray.h>
#include <SPIFFS.h>
#include <FS.h>

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

boolean takeNewPhoto = false;

// Photo File Name to save in SPIFFS
#define FILE_PHOTO "/photo.jpg"

// OV2640 camera module pins (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

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    body { text-align:center; }
    .vert { margin-bottom: 10%; }
    .hori{ margin-bottom: 0%; }
  </style>
</head>
<body>
  <div id="container">
    <h2>ESP32-CAM Last Photo</h2>
    <p>It might take more than 5 seconds to capture a photo.</p>
    <p>
      <button onclick="rotatePhoto();">ROTATE</button>
      <button onclick="capturePhoto()">CAPTURE PHOTO</button>
      <button onclick="location.reload();">REFRESH PAGE</button>
    </p>
  </div>
  <div><img src="saved-photo" id="photo" width="70%"></div>
</body>
<script>
  var deg = 0;
  function capturePhoto() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', "/capture", true);
    xhr.send();
  }
  function rotatePhoto() {
    var img = document.getElementById("photo");
    deg += 90;
    if(isOdd(deg/90)){ document.getElementById("container").className = "vert"; }
    else{ document.getElementById("container").className = "hori"; }
    img.style.transform = "rotate(" + deg + "deg)";
  }
  function isOdd(n) { return Math.abs(n % 2) == 1; }
</script>
</html>)rawliteral";

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    ESP.restart();
  }
  else {
    delay(500);
    Serial.println("SPIFFS mounted successfully");
  }

  // Print ESP32 Local IP Address
  Serial.print("IP Address: http://");
  Serial.println(WiFi.localIP());

  // Turn-off the 'brownout detector'
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

  // OV2640 camera module
  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;

  if (psramFound()) {
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    ESP.restart();
  }

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send_P(200, "text/html", index_html);
  });

  server.on("/capture", HTTP_GET, [](AsyncWebServerRequest * request) {
    takeNewPhoto = true;
    request->send_P(200, "text/plain", "Taking Photo");
  });

  server.on("/saved-photo", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, FILE_PHOTO, "image/jpg", false);
  });

  // Start server
  server.begin();

}

void loop() {
  if (takeNewPhoto) {
    capturePhotoSaveSpiffs();
    takeNewPhoto = false;
  }
  delay(1);
}

// Check if photo capture was successful
bool checkPhoto( fs::FS &fs ) {
  File f_pic = fs.open( FILE_PHOTO );
  unsigned int pic_sz = f_pic.size();
  return ( pic_sz > 100 );
}

// Capture Photo and Save it to SPIFFS
void capturePhotoSaveSpiffs( void ) {
  camera_fb_t * fb = NULL; // pointer
  bool ok = 0; // Boolean indicating if the picture has been taken correctly

  do {
    // Take a photo with the camera
    Serial.println("Taking a photo...");

    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      return;
    }

    // Photo file name
    Serial.printf("Picture file name: %s\n", FILE_PHOTO);
    File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);

    // Insert the data in the photo file
    if (!file) {
      Serial.println("Failed to open file in writing mode");
    }
    else {
      file.write(fb->buf, fb->len); // payload (image), payload length
      Serial.print("The picture has been saved in ");
      Serial.print(FILE_PHOTO);
      Serial.print(" - Size: ");
      Serial.print(file.size());
      Serial.println(" bytes");
    }
    // Close the file
    file.close();
    esp_camera_fb_return(fb);

    // check if file has been correctly saved in SPIFFS
    ok = checkPhoto(SPIFFS);
  } while ( !ok );
}

Debug Message

Log with Debug Level Error (see latter with Debug level None)

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
[xxxxxxxxxxxxxx
-hal-cpu.c:211] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[   843][D][esp32-hal-psram.c:84] psramInit(): PSRAM enabled
[   904][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 0 - WIFI_READY
[   992][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 2 - STA_START
Connecting to WiFi...
Connecting to WiFi...
[  3086][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
Connecting to WiFi...
Connecting to WiFi...
[  5631][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[  5632][D][WiFiGeneric.cpp:880] _eventCallback(): STA IP: 192.168.0.14, MASK: 255.255.255.0, GW: 192.168.0.254
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 81280 bytes
[ 71686][W][AsyncTCP.cpp:969] _poll(): rx timeout 4
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
Guru Meditation Error: Core  1 panic'ed (Cache disabled but cached memory region accessed). 

Core  1 register dump:
PC      : 0x4011047c  PS      : 0x00060035  A0      : 0x800863a4  A1      : 0x3ffbf14c  
A2      : 0x3ffcaf2c  A3      : 0x00000000  A4      : 0x3ffbf184  A5      : 0x3ffb2370  
A6      : 0x3ffb23fc  A7      : 0x3ff420c0  A8      : 0x8008633b  A9      : 0x3ffbf11c  
A10     : 0x3ffcaf2c  A11     : 0x3ffbf158  A12     : 0x3ffbf184  A13     : 0x00000000  
A14     : 0x3ffd3454  A15     : 0x3ffd34a0  SAR     : 0x00000018  EXCCAUSE: 0x00000007  
EXCVADDR: 0x00000000  LBEG    : 0x4008af38  LEND    : 0x4008af54  LCOUNT  : 0x00000000  


Backtrace:0x40110479:0x3ffbf14c |<-CORRUPTED




ELF file SHA256: 0000000000000000

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

rst:0x3 (SW_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
XXXXXXXXXXX
hal-cpu.c:211] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[   843][D][esp32-hal-psram.c:84] psramInit(): PSRAM enabled
[   904][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 0 - WIFI_READY
[   992][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 2 - STA_START
Connecting to WiFi...
Connecting to WiFi...
[  3087][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
Connecting to WiFi...
Connecting to WiFi...
[  5560][D][WiFiGeneric.cpp:831] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[  5560][D][WiFiGeneric.cpp:880] _eventCallback(): STA IP: 192.168.0.14, MASK: 255.255.255.0, GW: 192.168.0.254
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
Guru Meditation Error: Core  1 panic'ed (Cache disabled but cached memory region accessed). 

Core  1 register dump:
PC      : 0x4011047c  PS      : 0x00060035  A0      : 0x800863a4  A1      : 0x3ffbf14c  
A2      : 0x3ffcaf00  A3      : 0x00000000  A4      : 0x3ffbf184  A5      : 0x3ffb23c0  
A6      : 0x00000006  A7      : 0x3ffc42c8  A8      : 0x8008633b  A9      : 0x3ffbf11c  
A10     : 0x3ffcaf00  A11     : 0x3ffbf158  A12     : 0x3ffbf184  A13     : 0x00000000  
A14     : 0x3ffd3444  A15     : 0x3ffd3490  SAR     : 0x00000018  EXCCAUSE: 0x00000007  
EXCVADDR: 0x00000000  LBEG    : 0x4008b0da  LEND    : 0x4008b0e5  LCOUNT  : 0x00000000  


Backtrace:0x40110479:0x3ffbf14c |<-CORRUPTED




ELF file SHA256: 0000000000000000

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

rst:0x3 (SW_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Log with Debug Level None:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 104064 bytes
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
E (56694) cam_hal: EV-EOF-OVF
ets Jun  8 2016 00:22:57

rst:0x8 (TG1WDT_SYS_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14
Taking a photo...
Picture file name: /photo.jpg
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
ets Jun  8 2016 00:22:57

rst:0x8 (TG1WDT_SYS_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14

Other Steps to Reproduce

Test OK with 1.0.6
Test OK in 2.0.2 if SD card is used instead of SPIFFS
In fact I see other crashes than the ones reported here, but could not reproduce at capture time :-<
Crashes not the same with debug level none. (see the 2 logs , separted with ++++++++++++++++++)

I have checked existing issues, online documentation and the Troubleshooting Guide

  • I confirm I have checked existing issues, online documentation and Troubleshooting guide.
@fanfanlatulipe26 fanfanlatulipe26 added the Status: Awaiting triage Issue is waiting for triage label Apr 3, 2022
@fanfanlatulipe26
Copy link
Author

Simpler testcase with no wifi webserver. Only take a picture, save it in SPIFFS

// Loop: take a photo, save it in SPIFFS. No WIFI
//
//  ESP32 Dev Kit, psram enabled, partition Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
// or AI Thinker ESP32-CAM
/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-take-photo-display-web-server/

  IMPORTANT!!!
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/


#include "esp_camera.h"
//#include "soc/soc.h"           // Disable brownour problems
//#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include <SPIFFS.h>
#include <FS.h>

int count = 0;

// Photo File Name to save in SPIFFS
#define FILE_PHOTO "/photo.jpg"

// OV2640 camera module pins (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

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);
  Serial.println("Formating SPIFFS");
  if (!SPIFFS.format()) {
    Serial.println("An Error has occurred while formating SPIFFS");
    ESP.restart();
  }
  else {
    delay(500);
    Serial.println("SPIFFS formated successfully");
  }

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    ESP.restart();
  }
  else {
    delay(500);
    Serial.println("SPIFFS mounted successfully");
  }

  // Turn-off the 'brownout detector'
  //  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

  // OV2640 camera module
  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;

  if (psramFound()) {
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x % x", err);
    ESP.restart();
  }
}

void loop() {
  do {
    count++;
    Serial.print("------ -Test nbr "); Serial.println(count);
    capturePhotoSaveSpiffs();
    delay(5000);
  } while (count < 10);
  Serial.println("------ -The end ");
  while (true) {};
}

// Check if photo capture was successful
bool checkPhoto( fs::FS &fs ) {
  File f_pic = fs.open( FILE_PHOTO );
  unsigned int pic_sz = f_pic.size();
  return ( pic_sz > 100 );
}

// Capture Photo and Save it to SPIFFS
void capturePhotoSaveSpiffs( void ) {
  camera_fb_t * fb = NULL; // pointer
  bool ok = 0; // Boolean indicating if the picture has been taken correctly

  do {
    // Take a photo with the camera
    Serial.println("Taking a photo...");

    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      return;
    }

    // Photo file name
    Serial.printf("Picture file name: % s\n", FILE_PHOTO);
    File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);

    // Insert the data in the photo file
    if (!file) {
      Serial.println("Failed to open file in writing mode");
    }
    else {
      file.write(fb->buf, fb->len); // payload (image), payload length
      Serial.print("The picture has been saved in ");
      Serial.print(FILE_PHOTO);
      Serial.print(" - Size: ");
      Serial.print(file.size());
      Serial.println(" bytes");
    }
    // Close the file
    file.close();
    esp_camera_fb_return(fb);

    // check if file has been correctly saved in SPIFFS
    ok = checkPhoto(SPIFFS);
  } while ( !ok );
}

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
Formating SPIFFS
SPIFFS formated successfully
SPIFFS mounted successfully
------ -Test nbr 1
Taking a photo...
Picture file name: /photo.jpg
Guru Meditation Error: Core  1 panic'ed (Cache disabled but cached memory region accessed). 

Core  1 register dump:
PC      : 0x400ea768  PS      : 0x00060035  A0      : 0x80085f38  A1      : 0x3ffbee0c  
A2      : 0x3ffb96f0  A3      : 0x00000000  A4      : 0x3ffbee44  A5      : 0x3ffb2440  
A6      : 0x00000006  A7      : 0x3ffc240c  A8      : 0x80085ecf  A9      : 0x3ffbeddc  
A10     : 0x3ffb96f0  A11     : 0x3ffbee18  A12     : 0x3ffbee44  A13     : 0x00000000  
A14     : 0x3ffb3678  A15     : 0x3ffb36c4  SAR     : 0x00000018  EXCCAUSE: 0x00000007  
EXCVADDR: 0x00000000  LBEG    : 0x40087b7a  LEND    : 0x40087b85  LCOUNT  : 0x00000000  


Backtrace:0x400ea765:0x3ffbee0c |<-CORRUPTED




ELF file SHA256: 0000000000000000

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

rst:0x3 (SW_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:0x3fff0030,len:1324
ho 0 tail 12 room 4
load:0x40078000,len:13508
load:0x40080400,len:3604
entry 0x400805f0
Formating SPIFFS
SPIFFS formated successfully
SPIFFS mounted successfully
------ -Test nbr 1
Taking a photo...
Picture file name: /photo.jpg
E (13148) cam_hal: EV-EOF-OVF
Guru Meditation Error: Core  1 panic'ed (Cache disabled but cached memory region accessed). 

Core  1 register dump:
PC      : 0x400ea768  PS      : 0x00060035  A0      : 0x80085f38  A1      : 0x3ffbee0c  
A2      : 0x3ffb96f0  A3      : 0x00000000  A4      : 0x3ffbee44  A5      : 0x3ffb23e0  
A6      : 0x00000006  A7      : 0x3ffc240c  A8      : 0x80085ecf  A9      : 0x3ffbeddc  
A10     : 0x3ffb96f0  A11     : 0x3ffbee18  A12     : 0x3ffbee44  A13     : 0x00000000  
A14     : 0x3ffb3678  A15     : 0x3ffb36c4  SAR     : 0x00000018  EXCCAUSE: 0x00000007  
EXCVADDR: 0x00000000  LBEG    : 0x40087b7a  LEND    : 0x40087b85  LCOUNT  : 0x00000000  


Backtrace:0x400ea765:0x3ffbee0c |<-CORRUPTED




ELF file SHA256: 0000000000000000

@VojtechBartoska
Copy link
Contributor

Hello. is the error the same for 2.0.3-RC1?

@Jason2866
Copy link
Collaborator

The test sketch is not working.

src/main.cpp: In function 'void loop()':
src/main.cpp:117:5: error: 'capturePhotoSaveSpiffs' was not declared in this scope
     capturePhotoSaveSpiffs();
     ^~~~~~~~~~~~~~~~~~~~~~
*** [.pio/build/esp32cam/src/main.cpp.o] Error 1

@fanfanlatulipe26
Copy link
Author

Don't know how to install 2.0.3-RC1
May I have both version 2.0.2 and 2.0.3-RC1 at the same time and an easy way to switch from one to the other ?

@me-no-dev
Copy link
Member

decoding those exceptions can also help much. (And it is a requirement) https://github.com/me-no-dev/EspExceptionDecoder

@fanfanlatulipe26
Copy link
Author

Well: there is no stack in the output, just "Backtrace:0x400ea765:0x3ffbee0c |<-CORRUPTED"

@fanfanlatulipe26
Copy link
Author

@Jason2866 : no problem in Arduino IDE.
Maybe just need to add the function prototype before

@Jason2866
Copy link
Collaborator

In general there is no problem with the webcam. We have a webcam build with Tasmota and it worked never so stable as with core 2.0.x

@fanfanlatulipe26
Copy link
Author

Test done with 2.0.3-RC1:

  • small testcase with no wifi / webserver runs perfectly.
  • test case with the webserver runs also pretty well, but many messages in the log, such as
    cam_hal: EV-EOF-OVF
    or
    cam_hal: EV-VSYNC-OVF
    Doesn't occur in 1.0.6
    The program needs to take 2 or more picture in order to get one really stored in the SPIFFS. Don't understand.

Doesn't occure if the picture is save on the SD card instead of the SPIFFS

Here is a log (no more information if compiled with debug level "debug")

Connecting to WiFi...
Connecting to WiFi...
[  5457][D][WiFiGeneric.cpp:852] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[  5457][D][WiFiGeneric.cpp:914] _eventCallback(): STA IP: 192.168.0.14, MASK: 255.255.255.0, GW: 192.168.0.254
Connecting to WiFi...
SPIFFS mounted successfully
IP Address: http://192.168.0.14
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 105344 bytes
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 0 bytes
Taking a photo...
Picture file name: /photo.jpg
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF
The picture has been saved in /photo.jpg - Size: 117248 bytes
cam_hal: EV-EOF-OVF
cam_hal: EV-EOF-OVF

@VojtechBartoska
Copy link
Contributor

I just see you mentioned ESPAsyncWebServer problems, it can be probably related to this issue? #6502?

@VojtechBartoska VojtechBartoska added Area: Libraries Issue is related to Library support. and removed Status: Awaiting triage Issue is waiting for triage labels Apr 7, 2022
@fanfanlatulipe26
Copy link
Author

The mix SPIFFS + ESPAsyncWebServer have a strange behavior.

@Parsaabasi
Copy link

Hello,

Due to the overwhelming volume of issues currently being addressed, we have decided to close the previously received tickets. If you still require assistance or if the issue persists, please don't hesitate to reopen the ticket.

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: Libraries Issue is related to Library support.
Projects
None yet
Development

No branches or pull requests

5 participants