• Skip to main content
  • Skip to primary sidebar

RNTLab.com

The Ultimate Shortcut to Learn Electronics and Programming with Open Source Hardware and Software

  • Courses
  • Forum
    • Forum
    • Ask Question
  • Shop
  • Account
  • Blog
  • Login

esp32-cam

Q&A Forum › Category: ESP32 › esp32-cam
0 Vote Up Vote Down
ROBERT MAY asked 6 days ago

Hi. I need some help please. I have been running the IP Camera sketch for a while without any problems but I am now receiving this error message: “Guru Meditation Error: Core 0 panic’ed (Unhandled debug exception). Debug exception reason: Stack canary watchpoint triggered (cam_task)” in the output monitor and crashes before the error code is reached. I understsnd it is the memory that is over running.
This is the block of code that causes the problem:
// Camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf(“Camera init failed with error 0x%x”, err);
return;
}
and this is the statement that crashes: “if (err != ESP_OK)”. I have played around with the camera settings and scoured the internet for a solution but nothing works. Occasionally I am able to connect to Wi-Fi but not very often. The CameraWebserver sketch works okay. Any ideas please? Thank you in advance.
I am using a Esp32S-cam AI Thinker module
Arduino IDE 2.3.6
Esp32-cam MD programmer
The code: 
/*********
Rui Santos & Sara Santos – Random Nerd Tutorials
Complete instructions at https://RandomNerdTutorials.com/esp32-cam-projects-ebook/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
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 <WiFi.h>
#include “esp_timer.h”
#include “img_converters.h”
#include “Arduino.h”
#include “fb_gfx.h”
#include “soc/soc.h” //disable brownout problems
#include “soc/rtc_cntl_reg.h” //disable brownout problems
#include “esp_http_server.h”
// Replace with your network credentials
const char *ssid = “************”;
const char *password = “***************”;
// Set your Static IP address
IPAddress local_IP(*************); //Esp32-Cam2
// Set your Gateway IP address
IPAddress gateway(*********************);
IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8); //optional
IPAddress secondaryDNS(8, 8, 4, 4); //optional
 
#define PART_BOUNDARY “123456789000000000000987654321”
#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
//#define CAMERA_MODEL_WROVER_KIT
#if defined(CAMERA_MODEL_WROVER_KIT)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 21
#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 19
#define Y4_GPIO_NUM 18
#define Y3_GPIO_NUM 5
#define Y2_GPIO_NUM 4
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23

#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 32
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23

#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 17
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21
#elif defined(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
#else
#error “Camera model not selected”
#endif
static const char* _STREAM_CONTENT_TYPE = “multipart/x-mixed-replace;boundary=” PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = “\r\n–” PART_BOUNDARY “\r\n”;
static const char* _STREAM_PART = “Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n”;
httpd_handle_t stream_httpd = NULL;
static esp_err_t stream_handler(httpd_req_t *req){
camera_fb_t * fb = NULL;
esp_err_t res = ESP_OK;
size_t _jpg_buf_len = 0;
uint8_t * _jpg_buf = NULL;
char * part_buf[64];
res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
if(res != ESP_OK){
return res;
}
while(true){
fb = esp_camera_fb_get();
if (!fb) {
Serial.println(“Camera capture failed”);
res = ESP_FAIL;
} else {
if(fb->width > 400){
if(fb->format != PIXFORMAT_JPEG){
bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
esp_camera_fb_return(fb);
fb = NULL;
if(!jpeg_converted){
Serial.println(“JPEG compression failed”);
res = ESP_FAIL;
}
} else {
_jpg_buf_len = fb->len;
_jpg_buf = fb->buf;
}
}
}
if(res == ESP_OK){
size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
}
if(res == ESP_OK){
res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
}
if(res == ESP_OK){
res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
}
if(fb){
esp_camera_fb_return(fb);
fb = NULL;
_jpg_buf = NULL;
} else if(_jpg_buf){
free(_jpg_buf);
_jpg_buf = NULL;
}
if(res != ESP_OK){
break;
}
//Serial.printf(“MJPG: %uB\n”,(uint32_t)(_jpg_buf_len));
}
return res;
}
void startCameraServer(){
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.server_port = 80;
httpd_uri_t index_uri = {
.uri = “/”,
.method = HTTP_GET,
.handler = stream_handler,
.user_ctx = NULL
};

//Serial.printf(“Starting web server on port: ‘%d’\n”, config.server_port);
if (httpd_start(&stream_httpd, &config) == ESP_OK) {
httpd_register_uri_handler(stream_httpd, &index_uri);
}
}
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
Serial.println(WiFi.macAddress()); //Prints the Esp32’s MAC address

Serial.begin(115200);
Serial.setDebugOutput(false);

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_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_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);
return;
}
if(!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println(“STA Failed to configure”);
}
// Wi-Fi connection
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);

Serial.print(“Camera Stream Ready! Go to: http://&#8221;);
Serial.print(WiFi.localIP());

// Start streaming web server
startCameraServer();
} //End of setup
void loop() {
delay(1);
}
The output:
16:27:53.523 -> configsip: 0, SPIWP:0xee
16:27:53.523 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
16:27:53.559 -> mode:DIO, clock div:1
16:27:53.559 -> load:0x3fff0030,len:4980
16:27:53.559 -> load:0x40078000,len:16612
16:27:53.559 -> load:0x40080400,len:3480
16:27:53.559 -> entry 0x400805b4
16:27:54.780 -> Guru Meditation Error: Core 0 panic’ed (Unhandled debug exception).
16:27:54.814 -> A14 : 0x3ffb2ab0 A15 : 0xff000000 SAR : 0x00000004 EXCCAUSE: 0x00000001
16:27:54.814 -> EXCVADDR: 0x00000000 LBEG : 0x4008aaf1 LEND : 0x4008ab01 LCOUNT : 0xfffffffe
16:27:54.847 ->
16:27:54.847 ->
16:27:54.847 -> Backtrace: 0x4008e317:0x3ffb2550 0x40092629:0x3ffb2580 0x4009265e:0x3ffb25a0 0x400927d4:0x3ffb25c0 0x400830df:0x3ffb25e0 0x400830f9:0x3ffb2610 0x40082d75:0x3ffb2630 0x4008e804:0x3ffb2650 0x4008d895:0x3ffb2670 0x4008db0c:0x3ffb2690 0x4008375e:0x3ffb26b0 0x400837a6:0x3ffb26d0 0x40083909:0x3ffb2700 0x400e17bd:0x3ffb2720 0x400e5d89:0x3ffb2750 0x4000bd83:0x3ffb2770 0x4000182a:0x3ffb2790 0x400e5431:0x3ffb27b0 0x400e5d89:0x3ffb27d0 0x4008a7aa:0x3ffb27f0 0x40089c4d:0x3ffb2810 0x40089c9e:0x3ffb2830 0x4008a19d:0x3ffb2850 0x40173a07:0x3ffb2880 0x4017341e:0x3ffb28a0 0x4016a145:0x3ffb2bc0 0x400938a9:0x3ffb2bf0 0x40117079:0x3ffb2c50 0x4008e1f5:0x3ffb2ca0
16:27:54.880 ->
16:27:54.880 ->
16:27:54.880 ->
16:27:54.880 ->
16:27:54.880 -> ELF file SHA256: aba5fd24b
16:27:54.880 ->
16:27:55.243 -> Rebooting…

3 Answers
0 Vote Up Vote Down
Sara Santos Staff answered 5 days ago

Hi.
How are you powering your ESP32-CAM?
Does this happen only on this board, or did it happen with other ESP32-CAM boards too?
Which board are you selecting in Tools>Board?
 
Did you make some updates to the IDE? Like updating to a new ESP32 core? Did it work previously with older versions of the core?
 
Regards,
Sara

0 Vote Up Vote Down
ROBERT MAY answered 2 days ago

Thank you Sara for your reply. I think it is the board version that was causing the problem. Although I did go bac a couple of versions, I didn’t go back far enough. I am on version: 2.0.11 and so far there hasn’t been a problem.Are you conversant with using Frigate in Home Assistant? Because I am stuck.

0 Vote Up Vote Down
Sara Santos Staff answered 23 hours ago

Hi.
Great. I still need to figure out what’s causing the issue in newer versions of the core.
 
No, unfortunately, I’m not familiar with that.
 
Regards,
Sara

Primary Sidebar

Login to Ask or Answer Questions

This Forum is private and it’s only available for members enrolled in our Courses.

Login »

Latest Course Updates

  • [eBook Updated] Smart Home with Raspberry Pi, ESP32, and ESP8266 V1.6 September 9, 2025
  • [eBook Updated] Learn LVGL: Build GUIs for ESP32 Projects – Version 1.5 July 7, 2025

You must be logged in to view this content.

Contact Support - Refunds - Privacy - Terms - MakerAdvisor.com - Member Login

Copyright © 2013-2025 · RandomNerdTutorials.com · All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.