Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
276
Tıklama
0
Öne Çıkarma
deneyap kart a1 v2 kameradan videoyu sd karta kaydetme
X
2 yıl
Er
Konu Sahibi

Deneyap 1a v2 kartında kamera kullanarak elde ettiğimiz görüntüyü yine kart üzerinde bulunan sd kart yuvasındaki sd karta depolamasını istiyorum ,bunun kodu nasıl olmalı yardımcı olabilir misiniz?
sd kartın example kodunu boş çalıştırdığımda (kamera vs.bağlamadan),kart okuma başarısız hatası alıyorum



A
2 hafta
Er

#include "esp_camera.h"
#include <SD.h>
#include <SPI.h>

#define SD_CS    11  // D18 (SDCS)
#define SD_CLK   13  // D16 (SDCK)
#define SD_MOSI  12  // D17 (SDMO)
#define SD_MISO  14  // D19 (SDMI)

SPIClass spiSD(FSPI);
uint16_t photoNumber = 0;

void cameraInit(void);
void savePhotoToSD();
uint16_t getLastPhotoNumber();

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

  // Kamera başlat
  cameraInit();

  // SD kart başlat
  spiSD.begin(SD_CLK, SD_MISO, SD_MOSI, SD_CS);
  if (!SD.begin(SD_CS, spiSD)) {
    Serial.println("SD Kart bulunamadi veya baslatilamadi!");
    while (true); // Dur
  }
  Serial.println("SD Kart basariyla baslatildi!");

  // 'photos' klasörünü oluştur (yoksa)
  if (!SD.exists("/photos")) {
    SD.mkdir("/photos");
    Serial.println("'photos' klasoru olusturuldu.");
  } else {
    Serial.println("'photos' klasoru bulundu.");
  }

  // En son foto numarasını bul
  photoNumber = getLastPhotoNumber() + 1;
  Serial.printf("Son foto numarasi: %d -> Baslangic: %d\n", photoNumber - 1, photoNumber);
}

void loop() {
  // Her 5 saniyede bir foto kaydet
  savePhotoToSD();
  delay(5000);
}

void savePhotoToSD() {
  camera_fb_t* fb = esp_camera_fb_get();
  if (!fb) {
    Serial.println("Foto cekilemedi");
    return;
  }

  char filename[64];
  sprintf(filename, "/photos/photo_%05d.jpg", photoNumber);
  Serial.printf("Kaydediliyor: %s\n", filename);

  File file = SD.open(filename, FILE_WRITE);
  if (!file) {
    Serial.println("Dosya acilamadi");
    esp_camera_fb_return(fb);
    return;
  }

  file.write(fb->buf, fb->len);
  Serial.printf("Foto kaydedildi, boyut: %u byte\n", fb->len);

  file.close();
  esp_camera_fb_return(fb);
  photoNumber++;
}

void cameraInit(void) {
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = CAMD2;
  config.pin_d1 = CAMD3;
  config.pin_d2 = CAMD4;
  config.pin_d3 = CAMD5;
  config.pin_d4 = CAMD6;
  config.pin_d5 = CAMD7;
  config.pin_d6 = CAMD8;
  config.pin_d7 = CAMD9;
  config.pin_xclk = CAMXC;
  config.pin_pclk = CAMPC;
  config.pin_vsync = CAMV;
  config.pin_href = CAMH;
  config.pin_sscb_sda = CAMSD;
  config.pin_sscb_scl = CAMSC;
  config.pin_pwdn = -1;
  config.pin_reset = -1;
  config.xclk_freq_hz = 15000000;
  config.frame_size = FRAMESIZE_UXGA;       // TAM kalite
  config.pixel_format = PIXFORMAT_JPEG;     // JPEG formatında
  config.grab_mode = CAMERA_GRAB_LATEST;    // En yeni kareyi al
  config.fb_location = CAMERA_FB_IN_PSRAM;  // PSRAM kullan
  config.jpeg_quality = 10;                 // 10 kalite (yüksek)
  config.fb_count = 2;

  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    while (true); // Dur
  }

  sensor_t* s = esp_camera_sensor_get();
  s->set_framesize(s, FRAMESIZE_UXGA);  // 1600x1200
}

uint16_t getLastPhotoNumber() {
  File root = SD.open("/photos");
  if (!root || !root.isDirectory()) {
    Serial.println("Klasor acilamadi veya klasor degil!");
    return 0;
  }

  uint16_t maxNumber = 0;
  File file = root.openNextFile();
  while (file) {
    String name = String(file.name());
    Serial.printf("Bulundu: %s\n", name.c_str());

    if (name.indexOf("photo_") >= 0 && name.endsWith(".jpg")) {
      int idx1 = name.indexOf("photo_") + 6;
      int idx2 = name.indexOf(".jpg");
      if (idx2 > idx1) {
        String numStr = name.substring(idx1, idx2);
        int num = numStr.toInt();
        if (num > maxNumber) {
          maxNumber = num;
        }
      }
    }

    file = root.openNextFile();
  }

  Serial.printf("Bulunan en buyuk foto numarasi: %d\n", maxNumber);
  return maxNumber;
}

Deneyap kart 1a v2 nin detaylı pin özelliklerinde nerelere bağlı olduğuna bakarak sd karta her 5 saniyede en yüksek kalitede görsel kaydedecek bir kod hazırladım ama kodu yüklerken Partition Scheme'yı Huge app seçmeyi unutma


Bu mesaja 1 cevap geldi.
C
geçen hafta
Binbaşı

Forumda neden daha fazla aktif değilsiniz?
Çok güzel fikri paylaşımlar, tartışmalar olurdu.




Bu mesajda bahsedilenler: @abdullahyilar0
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.