ESP32-CAM + externer Sensor = kein SD Zugriff

Heyho,

ich bin immer noch mit der ESP32-Cam dabei und versuche jetzt Zum Beispiel einen HC-SR04 Sensor dazu zuschalten.
Folgendes Problem:

Sketch funktioniert - und es wird ein Foto gemacht und abgespeichert... auch mehrere. Doch sobald ich einen Sensor dazu gebe, bekomme ich einen Fehler: "Failed to open file in writing mode". ( Zeile 142). Mir wird dann zwar korrekterweise die Werte vom HC-SR04 angezeigt, dafür aber reagiert die Cam nicht mehr...

Egal welchen Eingang ich benütze, selbes verhalten. Habs auch schon mit ESP-Now anstatt dem Sensor probiert - immer das selbe verhalten.

Was übersehe ich, dass die CAM bzw. die SD-Karte nicht mehr will, sobald ein Eingang belegt wird?

#include "SD_MMC.h"
#include "FS.h"
#include "esp_camera.h"
#include "esp_system.h"


// Pin definition for 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

//Your Sensor Pins
const int trigPin = 13;
const int echoPin = 15;
boolean startTimer = false;
unsigned long time_now = 0;
int pinSensor = 0 ,Cam_capture = 0 ,time_capture=0;
long duration;
int distance;


void setup()
{
  Serial.begin(115200);
   while (!Serial) {  ;  }
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  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(psramFound()){
// FRAMESIZE_ +
//QQVGA/160x120//QQVGA2/128x160//QCIF/176x144//HQVGA/240x176
//QVGA/320x240//CIF/400x296//VGA/640x480//SVGA/800x600//XGA/1024x768
//SXGA/1280x1024//UXGA/1600x1200//QXGA/2048*1536
    config.frame_size = FRAMESIZE_VGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_QQVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Init Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

     Serial.print("SD-Card init...");
    if (!SD_MMC.begin()) {
        Serial.println("failed!");
        return;
    }
}

void loop()
{
  
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance= duration*0.034/2;
    Serial.print("Distance: ");
    Serial.println(distance);

    if(distance<8) {
      //Camera_capture();
      Serial.println("Unterschritten");
    }
    else Serial.println("kein Foto");
    

    Camera_capture();
    delay(5000);
}

int imageNumber=1;
char fileNumber[6];

void Camera_capture() {
  camera_fb_t * fb = NULL;
  delay(200); 
  // Take Picture with Camera
  fb = esp_camera_fb_get(); 
  if(!fb) {
    Serial.println("Camera capture failed");
    return;
  }

   sprintf(fileNumber, "%05d", imageNumber++);
    String imageFilename = "/image"+String(fileNumber)+".jpg";
   fs::FS &fs = SD_MMC;
   File imgFile = fs.open(imageFilename.c_str(), FILE_WRITE);
    if (!imgFile) {
        Serial.println("Failed to open file in writing mode");
    } else {
        imgFile.write(fb->buf, fb->len);
        Serial.println("Saved " + imageFilename);
        imageNumber++;
    }
    imgFile.close();

   esp_camera_fb_return(fb);
   Serial.println("OK"); 

}

Hallo,
wird der Programmablauf schon gestört, wenn du den Code um die Sensor-Routine erweiterst? Oder erst wenn der Sensor angeschlossen wird ?

Ich sehe aktuell keinen Grund für das geschilderte Problem.

Edit:
Welches Board genau verwendest du ?
Ich sehe gerade, es gibt Boards, da wird GPIO13 und 15 für den internen SPI verwendet.
Da kann es evtl. Probleme mit der SD-Card geben.

Hi,

sobald ich den Sensor anschließe wird der Programm ablaufgestört. Der Code selber löst keinen Fehler aus.

Habe auch andere GPIOs probiert.
Ebenso habe ich auch ein anderes ESP32-CAM Board versucht. Ich verwende dieses Board (https://www.amazon.de/gp/product/B08MZV1TT9/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1)

Weiterer Versuch: Mittels eines anderen ESPs ein HIGH Signal zu einem Eingang der ESP-CAM zu schicken um dann die CAM auszulösen... gleiches Problem.
Selbst wenn ich mittels ESP NOW ein Signal sende, kann ich nicht mehr auf die SD-Karte zugreifen...

Jumperkabel habe ich ebenso getauscht...

Irgendwas ganz grobes übersehe ich.
Grüße

Ja, habe ich dir oben unter Edit geschrieben.

Wenn du das Board nicht ständig am USB/UART-Wandler dran hast, könnte GPIO1 und GPIO3 funktionieren.

Um nur ein Auslösesignal anzubinden, geht auch GPIO16.