4

I can successfully flash my ESP32-CAM to do the blink demo but when I try to run the code below I get the following error (b/t the asterisks/bar.)

It seems the "Serial Camera Control Bus" (SCCB) is not able to connect to write to the buffer in memory. I tried to double check the code I borrowed to see if pointer were coded with typos or errors but to be honest that is a little outside of my comprehension. Then there is the "camera_init(): Failed to set frame size" and the "esp_camera_init() failure error 0x20002"

After trying to trouble shoot and research online it seems as if the camera pins aren't connecting properly or there is a failure to write to memory.

If anyone has a better grasp on C++ and could help me further troubleshoot or point me in the right direction I would greatly appreciate it.

[E][sccb.c:154] SCCB_Write(): SCCB_Write Failed addr:0x30, reg:0xe1, data:0x67, ret:263
[E][sccb.c:154] SCCB_Write(): SCCB_Write Failed addr:0x30, reg:0xff, data:0x01, ret:263
[E][camera.c:1215] camera_init(): Failed to set frame size
[E][camera.c:1270] esp_camera_init(): Camera init failed with error 0x20002

Code to send a JPEG image to my Apache server using php://input so they can be stored on my computer:


 #include "esp_http_client.h"
 #include "esp_camera.h"
 #include "WiFi.h"
 #include "Arduino.h"

 const char* ssid = "************";
 const char* password = "***************";
 int capture_interval = 20000; // Microseconds between captures
 const char *post_url = "***************/wifi/index.php"; 
 // Location where images are POSTED

 bool internet_connected = false;
 long current_millis;
 long last_capture_millis = 0;

 // 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.begin(115200);

   if (init_wifi()) { // Connected to WiFi
     internet_connected = true;
     Serial.println("Internet connected");
   }

   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;
   //init with high specs to pre-allocate larger buffers
   if (psramFound()) {
     config.frame_size = FRAMESIZE_UXGA;
     config.jpeg_quality = 10;
     config.fb_count = 2;
   } else {
     config.frame_size = FRAMESIZE_SVGA;
     config.jpeg_quality = 10;
     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;
   }
 }

 bool init_wifi()
 {
   int connAttempts = 0;
   Serial.println("\r\nConnecting to: " + String(ssid));
   WiFi.begin(ssid, password);
   while (WiFi.status() != WL_CONNECTED ) {
     delay(500);
     Serial.print(".");
     if (connAttempts > 10) return false;
     connAttempts++;
   }
   return true;
 }


 esp_err_t _http_event_handler(esp_http_client_event_t *evt)
 {
   switch (evt->event_id) {
     case HTTP_EVENT_ERROR:
       Serial.println("HTTP_EVENT_ERROR");
       break;
     case HTTP_EVENT_ON_CONNECTED:
       Serial.println("HTTP_EVENT_ON_CONNECTED");
       break;
     case HTTP_EVENT_HEADER_SENT:
       Serial.println("HTTP_EVENT_HEADER_SENT");
       break;
     case HTTP_EVENT_ON_HEADER:
       Serial.println();
       Serial.printf("HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
       break;
     case HTTP_EVENT_ON_DATA:
       Serial.println();
       Serial.printf("HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
       if (!esp_http_client_is_chunked_response(evt->client)) {
         // Write out data
         // printf("%.*s", evt->data_len, (char*)evt->data);
       }
       break;
     case HTTP_EVENT_ON_FINISH:
       Serial.println("");
       Serial.println("HTTP_EVENT_ON_FINISH");
       break;
     case HTTP_EVENT_DISCONNECTED:
       Serial.println("HTTP_EVENT_DISCONNECTED");
       break;
   }
   return ESP_OK;
 }

 static esp_err_t take_send_photo()
  {
    Serial.println("Taking picture...");
    camera_fb_t *fb = NULL;
    esp_err_t res = ESP_OK;

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

   esp_http_client_handle_t http_client;

   esp_http_client_config_t config_client = {0};
   config_client.url = post_url;
   config_client.event_handler = _http_event_handler;
   config_client.method = HTTP_METHOD_POST;

   http_client = esp_http_client_init(&config_client);

   esp_http_client_set_post_field(http_client, (const char *)fb->buf, fb->len);

   esp_http_client_set_header(http_client, "Content-Type", "image/jpg");

   esp_err_t err = esp_http_client_perform(http_client);
   if (err == ESP_OK) {
      Serial.print("esp_http_client_get_status_code: ");
     Serial.println(esp_http_client_get_status_code(http_client));
   }

   esp_http_client_cleanup(http_client);

   esp_camera_fb_return(fb);
 }

 void loop()
 {
   // TODO check Wifi and reconnect if needed

   current_millis = millis();
   if (current_millis - last_capture_millis > capture_interval) { // Take another picture
     last_capture_millis = millis();
     take_send_photo();
   }
 }
  • Were you able to make any progress on this? – Codebling Mar 8 at 20:54
1

The board needs 5V current. I had the same error when trying with 3.3V. Uploading worked but when running I got the same error. I switched the USB programmer to 5V, then it all worked fine.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.