RisalDash RisalDash

Loyiha · ESP32-CAM · Time-lapse

$7 lik platadan time-lapse kamera

Qurilish maydoni, oʻsayotgan oʻsimlik, bulutli osmon — time-lapse soatlarni soniyalarga siqadi, va ESP32-CAM butun ishni qiladi: jadval boʻyicha JPEG tushiradi, MicroSD’ga yozadi va telefoningizdan kadr hisoblagichi oʻsishi va karta toʻlishini koʻrsatadigan jonli dashboard beradi.

LoyihaESP32-CAMTime-lapseMicroSD
ESP32-CAM time-lapse kamera loyihasi: jadval boʻyicha MicroSD’ga JPEG, jonli dashboard

Kadr → SD, butun tsikl

OV2640 JPEG’ni apparatda siqadi, shuning uchun kadr — grab → write → return. Raqamlangan nomlar (/0001.jpg…) keyingi ffmpeg qadamini oson qiladi. Barqarorlikning ikki qoidasi: buferni doim esp_camera_fb_return() bilan qaytaring va kartani SD_MMC.begin("/sdcard", true) deb ulang — 1-bit rejim flash-LED pinini boʻshatadi:

void capture(const char* why) {
  camera_fb_t* fb = esp_camera_fb_get();           // grab a JPEG frame
  if (!fb) { if (evlog) evlog->print("Capture FAILED"); return; }
  char name[16];
  snprintf(name, sizeof(name), "/%04u.jpg", (unsigned)++shotNo);
  File f = SD_MMC.open(name, FILE_WRITE);
  if (f) { f.write(fb->buf, fb->len); f.close(); shots = shotNo; }
  esp_camera_fb_return(fb);                        // ALWAYS return the frame buffer
  if (evlog) evlog->print(String(why) + " -> " + name);
}

// loop(): a shot every CAPTURE_EVERY_S seconds
if (millis() - lastShot > CAPTURE_EVERY_S * 1000UL) { lastShot = millis(); capture("Timer"); }

Dashboard — ishlayotgani koʻrinadi

Korpusdagi «koʻr» kamera asabga tegadi. Besh vidjet hal qiladi: foto hisoblagichi, SD shkalasi, karta holati, qoʻlda «Tushir» tugmasi va kadrlar jurnali:

dash.layout("Trap", RICON_MOTION);
dash.stat("Photos", &shots, "");
dash.gauge("SD used", &sdUsedPct, 0, 100, "%").variant("bar");
dash.led("SD ready", &sdOk);
dash.button("Shoot", "Capture now", []() { capture("Manual"); });
evlog = &dash.log("Captures", 6);
dash.beginAP("RisalDash-CamTrap", "12345678");

sdOk = SD_MMC.begin("/sdcard", true);   // 1-bit mode frees the flash-LED pin

Tayyor sketch — examples/06_Projects/CamTrap, MODE_TIMELAPSE 1 bilan; xuddi shu yigʻilma bitta define bilan PIR fototuzoqqa aylanadi.

Parametrlarni tanlash

ParametrTanlovNega
OʻlchamSVGA 800×600yetarlicha aniq, ~40–80 KB/kadr — sozlamalar qoʻllanmasi
JPEG quality10hajm/tafsilot oltin oʻrtasi
Interval30 s (bulut) · 5 min (oʻsimlik) · 15 min (qurilish)syujet tezligiga mos
VaqtWi-Fi’da NTPDS3231 RTC — faqat toʻliq oflayn uchun

SVGA’da 32 GB karta yarim millionga yaqin kadr sigʻdiradi — batareya xotiradan ancha oldin tugaydi. Haftalik syomkalar uchun rozetkadan quvvatlang yoki katta LiFePO4 ni kadrlar orasida deep sleep bilan juftlang.

Kadrlar → video

ffmpeg -framerate 30 -i %04d.jpg -c:v libx264 -pix_fmt yuv420p timelapse.mp4

30 fps degani: 30 s intervalda videoning har soniyasi 900 kadr yeydi — 7.5 soat real vaqt. Shu nisbat atrofida rejalashtiring.

Oʻsha plata, oʻsha sketch — bitta define uni harakat fototuzogʻiga aylantiradi.