Esp_camera_init() function makes my ESP32 cam Brownout

I have bought an esp32 cam module that worked until for some reason the serial monitaor started givnig brownout error.

i have tryed to identify the line of code that make that error happen, and i found out it is: esp_err_t err = esp_camera_init(&config);

Model: Aithinker esp32 cam
I used the Camera server example with this code for the .in file

    #include "esp_camera.h"
    #include <WiFi.h>
    
    //
    // WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
    //            Ensure ESP32 Wrover Module or other board with PSRAM is selected
    //            Partial images will be transmitted if image exceeds buffer size
    //
    //            You must select partition scheme from the board menu that has at least 3MB APP space.
    //            Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
    //            seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
    
    // ===================
    // Select camera model
    // ===================
    //#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
    //#define CAMERA_MODEL_ESP_EYE // Has PSRAM
    //#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
    //#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
    //#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
    //#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
    //#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
    //#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
    #define CAMERA_MODEL_AI_THINKER  // Has PSRAM
    //#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
    //#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
    // ** Espressif Internal Boards **
    //#define CAMERA_MODEL_ESP32_CAM_BOARD
    //#define CAMERA_MODEL_ESP32S2_CAM_BOARD
    //#define CAMERA_MODEL_ESP32S3_CAM_LCD
    //#define CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3 // Has PSRAM
    //#define CAMERA_MODEL_DFRobot_Romeo_ESP32S3 // Has PSRAM
    #include "camera_pins.h"
    
    // ===========================
    // Enter your WiFi credentials
    // ===========================
    const char* ssid = "/private";
    const char* password = "/private";
    WiFiServer server(80);
    
    void startCameraServer();
    void setupLedFlash(int pin);
    // Set your Static IP Address Settings
    IPAddress local_IP(192, 168, 1, 17);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress subnet(255, 255, 0, 0);
    IPAddress primaryDNS(8, 8, 8, 8);    // this is optional
    IPAddress secondaryDNS(8, 8, 4, 4);  // this is optional
    void setup() {
      pinMode(4, OUTPUT); // Set the pin as output
      for(int i=0; i<3;i++){
      digitalWrite(4, LOW); //Turn on
      delay (1000); //Wait 1 sec
      digitalWrite(4, HIGH); //Turn off
      delay (1000); //Wait 1 sec
      }
      Serial.begin(115200);
      Serial.setDebugOutput(true);
      Serial.println("Hello word \n");
      Serial.println();
      Serial.println("camera config start done");
      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.frame_size = FRAMESIZE_UXGA;
      config.pixel_format = PIXFORMAT_JPEG;  // for streaming
      //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
      config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
      config.fb_location = CAMERA_FB_IN_PSRAM;
      config.jpeg_quality = 12;
      config.fb_count = 1;
      Serial.println("camera pin config done");
      // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
      //                      for larger pre-allocated frame buffer.
      for(int i=0; i<2;i++){
      digitalWrite(4, LOW); //Turn on
      delay (3000); //Wait 10 sec
      digitalWrite(4, HIGH); //Turn off
      delay (3000); //Wait 10 sec
      }
      if (config.pixel_format == PIXFORMAT_JPEG) {
        if (psramFound()) {
          config.jpeg_quality = 10;
          config.fb_count = 2;
          config.grab_mode = CAMERA_GRAB_LATEST;
        } else {
          // Limit the frame size when PSRAM is not available
          config.frame_size = FRAMESIZE_SVGA;
          config.fb_location = CAMERA_FB_IN_DRAM;
        }
      } else {
        // Best option for face detection/recognition
        config.frame_size = FRAMESIZE_240X240;
     for(int i=0; i<3;i++){
      digitalWrite(4, LOW); //Turn on
      delay (2000); //Wait 5 sec
      digitalWrite(4, HIGH); //Turn off
      delay (2000); //Wait 5 sec
     }Serial.println("camera config quality done");
    #if CONFIG_IDF_TARGET_ESP32S3
        config.fb_count = 2;
    #endif
      }
    
    #if defined(CAMERA_MODEL_ESP_EYE)
      pinMode(13, INPUT_PULLUP);
      pinMode(14, INPUT_PULLUP);
    #endif
    for(int i=0; i<3;i++){
      digitalWrite(4, LOW); //Turn on
      delay (1000); //Wait 1 sec
      digitalWrite(4, HIGH); //Turn off
      delay (2000); //Wait 2 sec
    }
      Serial.println("camera init starting done");
      // camera init
      esp_err_t err = esp_camera_init(&config);
      Serial.println("camera init done");
      if (err != ESP_OK) {
        Serial.printf("Camera init failed with error 0x%x", err);
        return;
      }
      Serial.println("camera init fun done");
      sensor_t* s = esp_camera_sensor_get();
      // initial sensors are flipped vertically and colors are a bit saturated
      if (s->id.PID == OV3660_PID) {
        s->set_vflip(s, 1);        // flip it back
        s->set_brightness(s, 1);   // up the brightness just a bit
        s->set_saturation(s, -2);  // lower the saturation
      }
      
      Serial.println("camera initial setting done");
      // drop down frame size for higher initial frame rate
      if (config.pixel_format == PIXFORMAT_JPEG) {
        s->set_framesize(s, FRAMESIZE_QVGA);
      }
    
    #if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
      s->set_vflip(s, 1);
      s->set_hmirror(s, 1);
    #endif
    
    #if defined(CAMERA_MODEL_ESP32S3_EYE)
      s->set_vflip(s, 1);
    #endif
    
    // Setup LED FLash if LED pin is defined in camera_pins.h
    #if defined(LED_GPIO_NUM)
      setupLedFlash(LED_GPIO_NUM);
    #endif
      Serial.print("Connecting to ");
      Serial.println(ssid);
      // Print feedback if the settings are not configured
      if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
        Serial.println("STA Failed to configure");
      }  // Print feedback if the settings are not configured
      if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
        Serial.println("STA Failed to configure");
      }
    
      WiFi.begin(ssid, password);
      WiFi.setSleep(false);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      startCameraServer();
    
      Serial.print("Camera Ready! Use 'http://");
      Serial.print(WiFi.localIP());
      Serial.println("' to connect");
    }
    
    void loop() {
      // Do nothing. Everything is done in another task by the web server
      delay(10000);
    }

*i added a blinking function to ceck the code before adding the serial print

Serial monitor:


    camera config start done
    camera pin config done
    camera init starting done
    
    Brownout detector was triggered
    
    ets Jul 29 2019 12:21:46
    
    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........(continue to reboot)

Brownout is caused by an inadequate power supply.

I found this tutorial helpful in getting started: ESP32-CAM - Getting Started & Solving Common Problems

I moved your topic to an appropriate forum category @ragn0.

In the future, please take some time to pick the forum category that best suits the subject of your topic. There is an "About the _____ category" topic at the top of each category that explains its purpose.

This is an important part of responsible forum usage, as explained in the "How to get the best out of this forum" guide. The guide contains a lot of other useful information. Please read it.

Thanks in advance for your cooperation.

Yes but my setup I worked until for some reasons It stopped. I didn't change the setup(PC, USB, cable), i have even already bought and Active USB hub, but still It doesn't work

A poor quality (thin/long/cheap) USB cable can also cause brownouts.
Leo..

With some boards I have never been able to solve this problem from a hardware point of view, I suspect due to incorrect design of the Chinese clones or something like that.

Try adding this code to ypu sketch:

By the way, you can disable brownout detection via software:

#include "soc/soc.h"           
#include "soc/rtc_cntl_reg.h"

.....

setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);       // disable brownout detect
}
1 Like

Given the price point, its quite likely there are compromises.

The schematic shows a 1.2V regulator for one of the camera supplies, that is too specification for the surface mount version of the camera, but the ribbon cable version, as used on ESP32CAM, requires a 1.3V regulator.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.