Search Code

Tutorial ESP32 42/55 - Qaadashada Sawirka Kamaradda oo lagu kaydiyo Micro SD CAM-1 | Qalabka ESP32 ee SunFounder

Tutorial ESP32 42/55 - Qaadashada Sawirka Kamaradda oo lagu kaydiyo Micro SD CAM-1 | Qalabka ESP32 ee SunFounder

Cashigarkani, waxaan isticmaali doonnaa kontoroolka ESP32 oo ay weheliso looxa kordhintiisa ee SunFounder si aan u qaadanno sawiro iyadoo la isticmaalayo kamarad oo aan si toos ah ugu keydinno SD card yar. Mashruucani wuxuu isticmaalaa awoodaha ku dhex jira ESP32, oo ay ku jiraan Wi-Fi iyo Bluetooth, si loo abuuro qalab sawir qaade oo is haysta. Markaad dhammaystirto casharkan, waxaad yeelan doontaa qalab shaqeeya oo qaadi kara oo keydin kara sawiro, kuwaas oo markii dambe lagu heli karo kombuyuutar.

extension_bopard_camera

Kuwa cusub ee nidaamka ESP32, qalabkani wuxuu bixiyaa goob wax ku ool ah oo loogu talagalay mashaariic kala duwan, oo ay ku jirto tan. Kamaradda loo isticmaalo mashruucan waa OV2640, taas oo bixisa qaraar 1600x1200 pixels. In kasta oo laga yaabo inaysan la mid ahayn tayada taleefannada casriga ah, waxay ku filan tahay hawlo sawir qaadis oo aasaasi ah. Si aad u caddeyso tillaabooyinka, hubi inaad fiiriso fiidiyowga la socda casharkan (fiidiyowga 00:00).

20240103_163227858_iOS

Qalabka La Sharxay

Qaybaha ugu muhiimsan ee mashruucan waxaa ka mid ah kontoroolka ESP32, qaybta kamaradda (OV2640), iyo SD card yar oo loogu talagalay keydinta. ESP32 waa kontorool awood badan oo leh awoodo Wi-Fi iyo Bluetooth oo isku dhafan, taas oo ka dhigaysa mid ku habboon codsiyada IoT. Qaybta kamaraddu waxay qaadaa sawiro, kuwaas oo markaa ay farsameeyaan ESP32.

esp32-41-setting-3

SD card yar waxay u shaqeysaa sidii meel keydin oo loogu talagalay sawirada la qaaday. Qaabkan, ESP32 wuxuu la xiriiraa qaybta kamaradda iyadoo la isticmaalayo biinanka GPIO gaarka ah, sawiradana waxaa lagu keydiyaa qaabka JPEG ee SD card-ka. Tani waxay u oggolaanaysaa in si fudud loo soo celiyo oo loo daawado sawirada markii dambe.

  • Hubi in kamaraddu si sax ah u jihaysan tahay markaad gelinayso looxa ESP32.
  • Isticmaal SD card yar oo awood u leh 32 GB ama ka yar si looga fogaado dhibaatooyinka iswaafajinta.
  • Ku xir GPIO 0 ilaa GND qaabka barnaamijyeynta.
  • Fiiro gaar ah u yeelo sahayda korontada si looga fogaado dhibaatooyinka brownout.
  • Kamaradda si deggan u hay markaad sawir qaadayso si aad uga fogaato sawiro aan caddayn.

Tilmaamaha Xirista

Si aad u xirto qaybta kamaradda ESP32, marka hore hubi in ESP32 uu damay. Ku xir qaybta SD card yar ee ESP32 adigoo isticmaalaya biinanka soo socda: ku xir biinka CS ee SD card-ka ilaa GPIO 5 ee ESP32, MOSI ilaa GPIO 23, MISO ilaa GPIO 19, iyo SCK ilaa GPIO 18. Marka xigta, ku xir biinanka qaybta kamaradda sida soo socota: PWDN ilaa GPIO 32, XCLK ilaa GPIO 0, SIOD ilaa GPIO 26, iyo SIOC ilaa GPIO 27. Biinanka xogta pixel-ka Y2 ilaa Y9 waa in lagu xiraa GPIO 5 ilaa GPIO 39 sida lagu qeexay koodhkaaga.

Hubi inaad si habboon u xirto biinanka dhulka iyo korontada. ESP32 waxaa lagu shidi karaa batteriga ku jira qalabka. Ka dib xirista, hubi in xirsiyadu ay adag yihiin ka hor intaadan shidin qalabka. Haddii aad si dhow u raacdo tilmaamaha, waxaad arki doontaa kamaraddu si sax ah u bilaabato markaad soo geliso koodhka.

Tusaalooyinka Koodhka & Sharaxaad

esp32-41-setting-2
esp32-41-setting-1

Koodhka, waxaan ku bilaabaynaa inaan ku darro maktabado lagama maarmaan ah oo aan qeexno qaabaynta biinanka kamaradda. Doorsoomaha pictureNumber waa la bilaabay si uu u xisaabiyo tirada sawirada la qaaday.

int pictureNumber = 0;

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);  // Disable brownout detector
  Serial.begin(115200);
  camera_config_t config;
  // Configuration settings for the camera
  config.ledc_channel = LEDC_CHANNEL_0;
  // Additional camera settings...
}

Hawsha setup waxay bilaabaysaa isgaarsiinta serial-ka waxayna qaabaynaysaa goobaha kamaradda. Qaabaynta waxaa ku jira cabbiro sida ledc_channel, pin_d0, iyo xclk_freq_hz si loo helo waxqabad wanaagsan.

Marka xigta, waxaan wax ka qabannaa habka qaadista sawirka adigoo isticmaalaya loop si loo qaado sawiro badan. Xogta sawirka waxaa lagu keydiyaa SD card-ka iyadoo la isticmaalayo magac ku salaysan pictureNumber.

for (int shoot = 0; shoot < 5; shoot++) {
    camera_fb_t *fb = esp_camera_fb_get(); // Take Picture
    String path = "/picture" + String(pictureNumber) + ".jpg"; // File path
    File file = fs.open(path.c_str(), FILE_WRITE); // Open file to write
    // Write image data to file
    file.write(fb->buf, fb->len);
    // Update picture number in EEPROM
    EEPROM.write(0, pictureNumber);
}

Loop-kani wuxuu qaadaa ilaa shan sawir, halkaas oo sawir kasta lagu keydiyo magac gaar ah. Isticmaalka EEPROM wuxuu u oggolaanayaa barnaamijka inuu xasuusto nambarkii sawirka ee ugu dambeeyay, isagoo hubinaya in sawir kasta oo cusub uu leeyahay aqoonsi gaar ah.

Muuqaal / Waxa Laga Filan Karo

Markaad code-ga shaqeysiiso, ESP32 wuxuu bilaabi doonaa kamarada iyo kaadhka SD. Ka dib markaad riixdo badhanka reset ee ESP32, wuxuu qaadi doonaa sawiro taxane ah, kuwaas oo loo tirin doono si isku xigta laga bilaabo 0 ilaa 255 iyadoo lagu salaynayo qiimaha EEPROM. Ka dib qabashada sawirada, waxaad ka saari kartaa kaadhka SD yar oo waxaad ku daawan kartaa sawirada kombiyuutarkaaga.

Khaladaadka caadiga ah waxaa ka mid ah hubinta in kaadhka SD yar si habboon loo qaabeeyey oo la geliyey, iyo sidoo kale ilaalinta booska kamarada oo deggan si looga fogaado sawirada aan caddayn. Haddii aad la kulanto dhibaatooyin kamarada oo aan sawirada qaadayn, dib u hubi fiilooyinka iyo qaabaynta ku qoran code-ka (fiidiyowga 06:45).

Waqtiyada Fiidiyowga

  • 00:00 Bilow
  • 1:39 Hordhac
  • 5:19 Sharaxaadda Code-ka Kamarada ESP32
  • 11:10 Doorashada looxa ESP32 iyo dekedda COM ee Arduino IDE
  • 12:52 Qaadista sawirada gudaha iyo dibadda tijaabo

Sawirro

esp32-41-setting-3
esp32-41-setting-3
extension_bopard_camera
extension_bopard_camera
20240103_163227858_iOS
20240103_163227858_iOS
esp32-41-setting-1
esp32-41-setting-1
esp32-41-setting-2
esp32-41-setting-2
843-ESP32 Tutorial 42/55- Arduino code for taking photo and saving it
Luqadda: C++
/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-take-photo-save-microsd-card
  
  IMPORTANT!!! 
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

#include "esp_camera.h"
#include "Arduino.h"
#include "FS.h"                // SD Card ESP32
#include "SD_MMC.h"            // SD Card ESP32
#include "soc/soc.h"           // Disable brownour problems
#include "soc/rtc_cntl_reg.h"  // Disable brownour problems
#include "driver/rtc_io.h"
#include <EEPROM.h>  // read and write from flash memory

// define the number of bytes you want to access
#define EEPROM_SIZE 1

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

int pictureNumber = 0;

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);  //disable brownout detector

  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 (psramFound()) {
    config.frame_size = FRAMESIZE_UXGA;  // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    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.println("Starting SD Card");
  if (!SD_MMC.begin()) {
    Serial.println("SD Card Mount Failed");
    return;
  }

  uint8_t cardType = SD_MMC.cardType();
  if (cardType == CARD_NONE) {
    Serial.println("No SD Card attached");
    return;
  }

  // initialize EEPROM with predefined size
  EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;

  for (int shoot = 0; shoot < 5; shoot++) {
    camera_fb_t *fb = NULL;

    // Take Picture with Camera
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      return;
    }

    // Path where new picture will be saved in SD Card
    String path = "/picture" + String(pictureNumber) + ".jpg";

    fs::FS &fs = SD_MMC;
    // Serial.printf("Picture file name: %s\n", path.c_str());

    File file = fs.open(path.c_str(), FILE_WRITE);
    if (!file) {
      Serial.println("Failed to open file in writing mode");
    } else {
      file.write(fb->buf, fb->len);  // Write image data to file
      if (shoot == 4) {
        Serial.printf("Saved file to path: %s\n", path.c_str());
      }else{
        Serial.printf("Shooting... \n");
      }
      EEPROM.write(0, pictureNumber);  // Update the picture number in EEPROM
      EEPROM.commit();
    }
    file.close();                      // Close the file
    esp_camera_fb_return(fb);          // Return the frame buffer back to the camera driver
    delay(200);                        // Short delay between shots
  }
  // Turns off the ESP32-CAM white on-board LED (flash) connected to GPIO 4
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  rtc_gpio_hold_en(GPIO_NUM_4);

  // Put the ESP32-CAM to deep sleep
  delay(2000);
  Serial.println("Going to sleep now");
  delay(2000);
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
}

void loop() {
  // Empty loop as we are putting the ESP32-CAM to deep sleep
}

Kheyraadka & Tixraacyada

Faylasha📁

Fayl la'aan.