Error uploading code to ESP32 Clone

I get this error message:

"A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header"

Here are my materials:
Arduino UNO CH340
ESP32 Camera Clone HW-818

I installed the CH340 driver thinking it was a problem with the clone, but nothing seems to be wrong with the Arduino. I also did all the basic troubleshooting methods for this error. I checked the wiring, baud rate, and COM port.

This is the video tutorial I watched to upload a sketch.

I hope I provided all the information you needed.

All help and tips would be very much appreciated! Thank you.

If you have a problem uploading code it would be useful to add the code to your post!

The UNO is 5V logic level.

The ESP32CAM is 3.3V logic level, so is not compatible.

Check the logic level of your ESP32CAM, if it is 3.3v then you need to get a logic level shifter like a CYT1076.

Here is the code:

#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
//

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_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_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM

#include "camera_pins.h"

const char* ssid = "*********";
const char* password = "*********";

void startCameraServer();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  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 PSRAM IC present, init with UXGA resolution and higher JPEG quality
  //                      for larger pre-allocated frame buffer.
  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;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // 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;
  }

  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
  }
  // drop down frame size for higher initial frame rate
  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

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}

@srnet @arduinobotting
Thank you for the help!

I am a bit confused though since the guy in the video managed to make it work despite the difference in logic levels.

So since the guy in the video had the miss matched logic levels working with his particular parts, is that a gurantee it will always work ?

The ESP32CAM I have can work on 3.3V and 5V and both options don't work. I also bought an FTDI programmer and a BSS138 Logic level converter since I can't find any CYT1076 models. Tested the same process with a 3.3V setting and 5V and nothing seems to work. Could it be my ESP32CAM is defective or am I troubleshooting this wrong? Thanks again for the help!

Here is a link for CYT1076 . https://www.amazon.co.uk/Gebildet-3-3V-5V-Channels-Converter-Bi-Directional/dp/B07RY15XMJ/ref=sr_1_1?keywords=CYT1076&qid=1689082635&sr=8-1

Although, it does look visually similar to the Logic level converter you mentioned.

If I were you I would try another board because maybe you damaged it already.

If you have issues connecting the Logic level converter then post a your wiring diagram.

1 Like

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