ESP32 Cam Webserver

วันนี้มาลองเล่น  ESP32 Camera Webserver กันครับ
อุปกรณ์ที่ต้องใช้งาน

  • กล้องจิ๋ว ESP32 Cam
  • บอร์ด   FTDI สำหรับอัพโหลดโปรแกรม  ลง ESP32 เพราะในตัวมันไม่มีช่องเสียบ USB ให้ใช้โดยตรง

การต่อวงจร

การต่อวงจร
FDTI                            ESP32Cam Module

  • GND                             GND
  • RX                                 UOT
  • TX                                  UOR
  • Gnd – IO0                     –
  • Vcc                                3V3
  • 5V                                  5V

การเชื่อมต่อ  GND กับ IO0  ควรใช้ สวิทซ์  สำหรับกด ต่อวงจรในขั้นตอนการโหลดโปรแกรม
 
 
คลิปอ้างอิง

ในคลิปแรกนี้ไม่มีการอธิบายถึงขา 5V  ที่หากไม่ต่อตามคลิปที่ 2 ก็จะใช้งานไม่ได้
 
และ  https://randomnerdtutorials.com/esp32-cam-video-streaming-face-recognition-arduino-ide/

สำหรับโปรแกรมเราจะใช้ตัวอย่าง  ESP32Cam Webserver กันเลย

 

#include "esp_camera.h"
#include <WiFi.h>
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled
//
// Select camera model
#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
//#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
const char* ssid = "*********";
const char* password = "*********";
void startCameraServer();
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_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;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
#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 blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);
#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif
  WiFi.begin(ssid, password);
  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() {
  // put your main code here, to run repeatedly:
  delay(10000);
}

สรุปขั้นตอนการตั้งค่า บอร์ด และอัพโหลด

  1. ตั้งค่าบอร์ด  ESP32 Wrove Module
  2. ตั้งค่า  Partition  NOOTA
  3. กด ปุ่ม reset ใต้บอร์ดกล้อง
  4. กด  Upload โปรแกรม  ขณะ compile และอัพโหลด  ให้กดสวิทซเพื่อต่อ GND กับ IO0 เอาไว้  และเมื่อ  upload สำเร็จแล้วให้ปลด GND-IO0 ออก หรือกรณีที่ใช้สวิทศ์ ก็ปล่อยสวิทซ์
  5. ในจอ Serial monitor ให้สังเกตว่า  มันแสดงให้เห็นว่า  server ไปทำงานที่ แอดเดรสไหน  ก็ตามไปควบคุมกล้อง ผ่าน  browser ที่ แอดเดรสนั้น

ส่วนการตั้งค่า การบันทึก ก็ลองๆ เล่นดูกันต่อได้เลย


 
จากตรงนี้เราจะไปต่อกันที่ทำการประกอบกล้องหลายตัวและให้แสดงผลและบันทึกลง Server กันต่อไป