Search Code

د ESP32 ټیوټوریل 44/55 - د ESP32 کیمره ویب سرور ویډیو سټریم د وای فای CAM-2 له لارې | د سن فاونډر ESP32 کټ

د ESP32 ټیوټوریل 44/55 - د ESP32 کیمره ویب سرور ویډیو سټریم د وای فای CAM-2 له لارې | د سن فاونډر ESP32 کټ

په دې ټیوټوریل کې به موږ د ESP32 او د هغې د کامرې د پراختیا په کارولو سره یو ریښتینی وخت هوا پېژندونکی سټیشن جوړ کړو. دا پروژه به ESP32 ته دا وړتیا ورکړي چې د هوا معلومات لکه تودوخه او رطوبت په LCD سکرین باندې ښکاره کړي، او په ورته وخت کې د وای فای له لارې ویډیو سټریمینګ وکړي. د دې ټیوټوریل په پای کې به تاسو یو بشپړ فعال هوا پېژندونکی سټیشن ولرئ چې هر ۱۰ ثانیو کې تازه کیږي، او ستاسو په لاس کې به ارزښتناک هوا معلومات چمتو کوي. د لا زیاتې روڼتیا لپاره، ویډیو ته مراجعه وکړئ (په ویډیو کې په ۰۰:۰۰).

extension_bopard_camera

هارډویر تشریح شوی

د دې پروژې اصلي برخې د ESP32 مایکروکنټرولر، یو LCD ښکارندوی، او د کامرې ماډل شامل دي. ESP32 یو پیاوړی مایکروکنټرولر دی چې په کې جوړ شوي وای فای او بلوتوث وړتیاوې لري، چې دا اجازه ورکوي چې انټرنیټ سره وصل شي او له نورو وسیلو سره اړیکه ونیسي. د کامرې ماډل د ویډیو سټریمینګ وړتیا ورکوي، پداسې حال کې چې LCD ښکارندوی کارونکي ته د هوا معلومات وړاندې کوي.

په دې پروژه کې کارول شوی LCD د ۲۰x۴ کرکټر ښکارندوی دی، چې کولی شي په یو وخت کې د پام وړ اندازه معلومات وښیې. دا د تودوخې، رطوبت، او نورو هوا معلوماتو ښودلو لپاره ESP32 سره وصل دی چې د آنلاین API څخه ترلاسه کیږي. ESP32 د بیټرۍ مدیریت سیسټم هم لري، چې دا اجازه ورکوي چې پرته له تار څخه کار وکړي.

ډیټاشیټ تفصیلات

جوړونکی Espressif
د پرزې شمېره ESP32-WROOM-32
منطق/IO ولټاژ 3.3 V
د برېښنا رسولو ولټاژ 3.0 - 3.6 V
د تولید جریان (په هر GPIO) 12 mA
لوړ جریان (په هر GPIO) 40 mA
د PWM فریکونسي لارښود 1 kHz
د منطق داخلیدو حدونه 0.3 * VDD to 0.7 * VDD
د ولټاژ کمښت / RDS(on) / سنتریشن 0.1 V (typ.)
حرارتي حدونه 125 °C
بسته بندي QFN48
یادښتونه / بڼې د PSRAM اختیارونه شامل دي

 

  • د برېښنا سمه رسول ډاډمن کړئ (3.0 - 3.6 V).
  • د لوړ جریان غوښتنلیکونو لپاره د تودوخې ډوبونکي وکاروئ.
  • د GPIO جریان حدونو (په هر پن کې 12 mA) په اړه محتاط اوسئ.
  • LCD او کامره په سمه توګه وصل کړئ ترڅو د غلط اړیکو مخه ونیول شي.
  • د ارتباطي ستونزو لپاره د وای فای اسناد او API کیلي وګورئ.

د تارونو د وصلولو لارښوونې

د ESP32 د LCD او کامرې ماډل سره د وصلولو لپاره، لومړی د برېښنا او ځمکني پنونو په وصلولو پیل وکړئ. د ESP32 ځمکنی پن د LCD او کامرې له ځمکې سره وصل کړئ. بیا د ESP32 5V پن د LCD د VCC سره وصل کړئ. د کامرې لپاره، نسواري تار له ځمکې سره، سور تار له 5V سره، ژیړ تار له GPIO 21 سره، او نارنجي تار له GPIO 22 سره وصل کړئ. ډاډ ترلاسه کړئ چې اړیکې ټینګې دي ترڅو د عملیاتو په جریان کې کومه ستونزه رامنځته نشي.

بیا، LCD د مناسب GPIO پنونو سره وصل کړئ. ځانګړي پنونه ممکن ستاسو د تنظیم پر بنسټ توپیر ولري، مګر په عمومي توګه، تاسو به د کنټرول پنونه د ESP32 په ټاکل شویو GPIOs سره وصل کړئ. د خپل ځانګړي LCD ماډل لپاره د سم تارونو د تایید لپاره ډیټاشیټ یا پن آوټ ډیاګرام ته مراجعه وکړئ. د دې اړیکو بشپړولو وروسته، ټول تارونه د نرمو یا غلطو اړیکو لپاره دوه ځله وګورئ.

د کوډ مثالونه او تفصیل

په کوډ کې، موږ لومړی د کامرې او وای فای فعالیتونو د سمبالولو لپاره اړین کتابتونونه شامل کوو. اړین پیژندونکي اعلان شوي، پشمول د وای فای اسنادو لپاره ssid او password. د کامرې تنظیم د camera_config_t جوړښت په کارولو سره ترتیب شوی، چیرې چې موږ مختلف پیرامیټرې لکه د پکسل بڼه او د چوکاټ اندازه تعریف کوو.

const char* ssid = "SSID";
const char* password = "PASSWORD";

void setup() {
  Serial.begin(115200);
  camera_config_t config;
  // ... (د تنظیم ترتیبات)
  esp_err_t err = esp_camera_init(&config);
  // د تېروتنو لپاره وګورئ
}

دا ټوټه کامره پیل کوي او د تنظیم په جریان کې د هرې تېروتنې لپاره ګوري. که کامره پیل نشي، د تېروتنې پیغام سیریل مانیټر ته چاپ کیږي.

بیا، موږ د وای فای اړیکه اداره کوو او د کامرې سرور پیل کوو. د اړیکې لوپ تر هغه پورې دوام کوي تر څو چې بریالۍ وای فای اړیکه رامنځته شي، کوم چې د API څخه د هوا معلوماتو ترلاسه کولو لپاره خورا مهم دی.

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
startCameraServer();

په دې برخه کې، موږ د وای فای اړیکه پیل کوو او تر هغه پورې سیریل مانیټر ته نقطې چاپ کوو تر څو چې اړیکه رامنځته شي. یوځل چې وصل شي، د کامرې سرور پیل کیږي، چې د ویډیو سټریمینګ اجازه ورکوي.

بشپړ کوډ به د مقالې لاندې بار شي، چیرې چې تاسو لیدلی شئ چې ټولې برخې څنګه سره یوځای کیږي.

ښکارندوی / څه تمه وکړو

یوځل چې هرڅه وصل شي او کوډ اپلوډ شي، تاسو تمه کولی شئ چې ESP32 د وای فای شبکې سره وصل شي او هر ۱۰ ثانیو کې د هوا معلومات ترلاسه کول پیل کړي. د تودوخې او رطوبت لوستل به په LCD سکرین باندې ښکاره شي. برسیره پردې، کامره به د وای فای له لارې ویډیو سټریم کړي، کوم چې د سیریل مانیټر کې چاپ شوي محلي IP پتې له لارې لاسرسی کیدی شي. که د وای فای اړیکه ناکامه شي، ESP32 به تاسو ته د سیریل آوټ پټ له لارې خبر درکړي (په ویډیو کې په ۱۰:۰۰).

د ویډیو وخت نښې

  • 00:00 پیل
  • 1:42 د ESP32-Cam پیژندنه
  • 4:30 د Arduino کوډ تشریح شوی
  • 7:35 په Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
  • 9:17 ښکارندوی
  • 12:06 په ګرځنده تلیفون باندې ښکارندوی

Images

ESP32-40-micro-sd-card-2
ESP32-40-micro-sd-card-2
extension_bopard_camera
extension_bopard_camera
845-ESP32 Tutorial 44/55- Arduino code for camera web sever
Language: C++
#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
//            Ensure ESP32 Wrover Module or other board with PSRAM is selected
//            Partial images will be transmitted if image exceeds buffer size
//
//            You must select partition scheme from the board menu that has at least 3MB APP space.
//            Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15 
//            seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well

// ===================
// Select camera model
// ===================
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
// #define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
// ** Espressif Internal Boards **
//#define CAMERA_MODEL_ESP32_CAM_BOARD
//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
//#define CAMERA_MODEL_ESP32S3_CAM_LCD

#include "camera_pins.h"

// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";

void startCameraServer();
void setupLedFlash(int pin);

void setup() {
  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_sccb_sda = SIOD_GPIO_NUM;
  config.pin_sccb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.frame_size = FRAMESIZE_UXGA;
  config.pixel_format = PIXFORMAT_JPEG; // for streaming
  // config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
  config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
  config.fb_location = CAMERA_FB_IN_PSRAM;
  config.jpeg_quality = 12;
  config.fb_count = 1;
  
  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
  //                      for larger pre-allocated frame buffer.
  if(config.pixel_format == PIXFORMAT_JPEG){
    if(psramFound()){
      config.jpeg_quality = 10;
      config.fb_count = 2;
      config.grab_mode = CAMERA_GRAB_LATEST;
    } else {
      // Limit the frame size when PSRAM is not available
      config.frame_size = FRAMESIZE_SVGA;
      config.fb_location = CAMERA_FB_IN_DRAM;
    }
  } else {
    // Best option for face detection/recognition
    config.frame_size = FRAMESIZE_240X240;
#if CONFIG_IDF_TARGET_ESP32S3
    config.fb_count = 2;
#endif
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

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

  sensor_t * s = esp_camera_sensor_get();
  // initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1); // flip it back
    s->set_brightness(s, 1); // up the brightness just a bit
    s->set_saturation(s, -2); // lower the saturation
  }
  // drop down frame size for higher initial frame rate
  if(config.pixel_format == PIXFORMAT_JPEG){
    s->set_framesize(s, FRAMESIZE_QVGA);
  }

#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

#if defined(CAMERA_MODEL_ESP32S3_EYE)
  s->set_vflip(s, 1);
#endif

// Setup LED FLash if LED pin is defined in camera_pins.h
#if defined(LED_GPIO_NUM)
  setupLedFlash(LED_GPIO_NUM);
#endif

  WiFi.begin(ssid, password);
  WiFi.setSleep(false);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  // Do nothing. Everything is done in another task by the web server
  delay(10000);
}

Resources & references

Files📁

No files available.