2

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();
   }
 }
| improve this question | | | | |
  • Were you able to make any progress on this? – Codebling Mar 8 at 20:54

Your Answer

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

Browse other questions tagged or ask your own question.