مشروع · ESP32-CAM · فاصل زمنيّ
كاميرا فاصل زمنيّ من لوحة بسبعة دولارات
موقع بناء، نبتة تنمو، سماء مليئة بالغيوم — الفاصل الزمنيّ يضغط الساعات إلى ثوانٍ، وESP32-CAM تقوم بالعمل كلّه: تلتقط JPEG بجدول، تحفظه على MicroSD، وتقدّم لوحة حيّة ترى فيها من هاتفك عدّاد اللقطات يرتفع والبطاقة تمتلئ.
لقطة → SD، الدورة كاملة
يضغط OV2640 إلى JPEG عتاديًّا، فاللقطة هي grab → write → return. الأسماء المرقّمة
(/0001.jpg…) تجعل خطوة ffmpeg تافهة لاحقًا. قاعدتان للثبات: أعد المخزن دائمًا بـ
esp_camera_fb_return()، وركّب البطاقة بـ SD_MMC.begin("/sdcard", true) —
وضع bit-1 يحرّر طرف فلاش LED:
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"); } اللوحة — تراها تعمل
كاميرا عمياء في علبة تثير القلق. خمس أدوات تحلّ ذلك: عدّاد الصور، مقياس SD، حالة البطاقة، زرّ «صوّر الآن» وسجلّ اللقطات:
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 الكود الجاهز هو examples/06_Projects/CamTrap مع MODE_TIMELAPSE 1؛
والبناء نفسه ينقلب بتعريف واحد إلى مصيدة كاميرا PIR.
اختيار الأرقام
| الإعداد | الاختيار | لماذا |
|---|---|---|
| الدقّة | SVGA 800×600 | حدّة كافية، ~40–80 KB/لقطة — راجع دليل الإعدادات |
| جودة JPEG | 10 | النقطة المثلى حجمًا وتفصيلًا |
| الفاصل | 30 ث (غيوم) · 5 د (نبات) · 15 د (بناء) | حسب سرعة المشهد |
| الوقت | NTP مع Wi-Fi | DS3231 RTC فقط للعمل دون اتّصال كامل |
بطاقة 32 GB بدقّة SVGA تتّسع لنحو نصف مليون لقطة — البطاريّة تنفد قبل التخزين بكثير. للتشغيل لأسابيع غذِّ من محوّل جداريّ أو اجمع خليّة LiFePO4 كبيرة مع النوم العميق بين اللقطات.
من لقطات إلى فيديو
ffmpeg -framerate 30 -i %04d.jpg -c:v libx264 -pix_fmt yuv420p timelapse.mp4 30 إطارًا/ث تعني أنّ كلّ ثانية فيديو تأكل 900 لقطة بفاصل 30 ث — أي 7.5 ساعات من الزمن الحقيقيّ. هذه هي النسبة السحريّة للتخطيط.
اللوحة نفسها والكود نفسه — تعريف واحد يجعلها مصيدة تعمل بالحركة.