ESP32-S3 camera board on a breadboard connected to a laptop showing live object detection

ระดับกลาง

สร้างกล้อง / CV เริ่มต้น

เซ็นเซอร์จอแสดงผลIoT

ดูว่าโค้ดของคุณเห็นอะไร — บันทึก, สตรีม หรือประมวลผลภาพจริงด้วยกล้องออนบอร์ด ไม่ต้องใช้ SBC แยกต่างหาก

รวมชิ้นส่วนจริง 4 รายการ

ราคารวมชุดนี้: 1,585.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

สร้างระบบกล้องวิทัศน์ขนาดเล็กบนบอร์ดเดียว: ถ่ายภาพนิ่งและสตรีมวิดีโอสดผ่าน Wi-Fi โดยใช้กล้องออนบอร์ดบน ESP32-S3 Camera Board Kit ในท้ายที่สุด คุณจะมีเว็บเซิร์ฟเวอร์ที่ทำงานได้โดยตรงบนบอร์ด ซึ่งเบราว์เซอร์ใดก็ได้บนเครือข่ายของคุณสามารถเปิดเพื่อดูฟีดสดหรือเรียกการถ่ายภาพ โดยไม่จำเป็นต้องใช้คอมพิวเตอร์บอร์ดเดี่ยวแยกต่างหากหรือบัญชีคลาวด์

ตัวควบคุมทำอะไร

ESP32-S3 คือสมองของระบบนี้ ถูกนำมาใช้ที่นี่โดยเฉพาะแทนบอร์ด ESP32-C3 ขนาดเล็กกว่าที่อื่นในแค็ตตาล็อกนี้ เนื่องจากงานกล้องต้องการ RAM และกำลังประมวลผลที่มากขึ้นอย่างมีนัยสำคัญ: การถอดรหัสฟีดเซ็นเซอร์ภาพสด, การเก็บเฟรมบัฟเฟอร์ในหน่วยความจำ, การบีบอัดเฟรมเป็น JPEG, และการให้บริการผ่าน Wi-Fi ทั้งหมดในคราวเดียวคืองานจริงสำหรับไมโครคอนโทรลเลอร์ การออกแบบแบบดูอัลคอร์ของ ESP32-S3 ช่วยให้สามารถแบ่งภาระนี้ได้ โดยรัน Wi-Fi และเว็บเซิร์ฟเวอร์บนหนึ่งคอร์ ในขณะที่ไปป์ไลน์ของกล้องทำงานบนอีกคอร์ ซึ่งทำให้สตรีมตอบสนองได้ดีแทนที่จะหยุดชะงัก

กล้องทำอะไร

โมดูลกล้องออนบอร์ดจะจับภาพเฟรมดิบจากเซ็นเซอร์และส่งไปยังตัวควบคุมผ่านอินเทอร์เฟซกล้องเฉพาะ จากนั้นตัวควบคุมจะสตรีมเฟรมเหล่านั้นแบบสด ซึ่งโดยทั่วไปจะเข้ารหัสเป็น MJPEG ผ่านเว็บเซิร์ฟเวอร์ง่ายๆ ที่ ESP32-S3 เองเป็นโฮสต์และสามารถดูได้จากเบราว์เซอร์ใดก็ได้บนเครือข่ายเดียวกัน หรือบันทึกภาพนิ่งแต่ละภาพลงในที่เก็บข้อมูลออนบอร์ดเมื่อถูกสั่ง ไม่มีอะไรออกจากเครือข่ายท้องถิ่นของคุณเว้นแต่คุณจะสร้างมันขึ้นมาอย่างชัดเจน วงจรการจับภาพและการสตรีมพื้นฐานจะทำงานแบบครบวงจรบนบอร์ดทั้งหมด

แนวคิดเกี่ยวกับหน่วยความจำและการสตรีม

บัฟเฟอร์เฟรมกล้องกินหน่วยความจำมาก แม้แต่ภาพที่มีความละเอียดปานกลางก็ยังใช้พื้นที่จริงในการเก็บไว้ใน RAM ก่อนที่จะถูกบีบอัดและส่งออกไป และบอร์ดที่ไม่มีหน่วยความจำสำรองเพียงพอจะล้มเหลวในการเริ่มต้นกล้องที่ความละเอียดสูงขึ้น หรือจะรองรับได้เพียงภาพขนาดเล็กและเป็นบล็อก นี่คือหน้าที่ของ PSRAM ออนบอร์ด (RAM ภายนอกพิเศษที่สร้างขึ้นในโมดูล): ช่วยให้ไปป์ไลน์ของกล้องมีพื้นที่เก็บเฟรมบัฟเฟอร์เต็มจำนวนโดยไม่ทำให้ส่วนที่เหลือของโปรแกรมขาดแคลน หากการสร้างของคุณในภายหลังจำเป็นต้องบันทึกวิดีโอลงในที่เก็บข้อมูลแทนที่จะสตรีมเฟรมเดียว คาดว่าข้อจำกัดด้านหน่วยความจำและความเร็วในการเขียนจะส่งผลกระทบเร็วยิ่งขึ้น เริ่มต้นที่ความละเอียดที่เหมาะสมและค่อยๆ เพิ่มขึ้นเมื่อการจับภาพพื้นฐานทำงานได้อย่างน่าเชื่อถือ

แนวคิดเกี่ยวกับซอฟต์แวร์และไลบรารี

เฟิร์มแวร์กล้องสำหรับบอร์ดตระกูล ESP32 มักสร้างขึ้นจากไลบรารีไดรเวอร์กล้องที่สื่อสารกับเซ็นเซอร์ผ่านอินเทอร์เฟซควบคุมของมัน รวมถึงสเก็ตช์ตัวอย่างสำหรับรูปแบบทั่วไป เช่น เซิร์ฟเวอร์กล้องบนเว็บ หรือรูทีนการจับภาพนิ่งแบบง่ายๆ ไปยังที่เก็บข้อมูล โปรดทราบว่าไลบรารีกล้องและบทช่วยสอนมักเขียนขึ้นสำหรับตระกูลเซ็นเซอร์เฉพาะ และการกำหนดค่า และบางครั้งแม้แต่คุณภาพของภาพและการวางแนว อาจแตกต่างกันไปในแต่ละตระกูลเซ็นเซอร์ ก่อนที่จะทำตามบทช่วยสอนออนไลน์ใดๆ ให้ยืนยันว่าบทช่วยสอนนั้นคาดการณ์ว่าใช้เซ็นเซอร์ใดและตรวจสอบว่าตรงกัน (หรือรองรับอย่างชัดเจน) กับเซ็นเซอร์บนบอร์ดนี้ แทนที่จะคิดว่าบทช่วยสอนกล้อง ESP32 ทุกอันจะสามารถใช้งานได้โดยไม่ต้องเปลี่ยนแปลง

การทดสอบและการแก้ไขปัญหา

  • กล้องไม่สามารถเริ่มต้นได้: กรณีนี้เกือบทั้งหมดเป็นปัญหาเกี่ยวกับการกำหนดค่าหน่วยความจำหรือ PSRAM ในโค้ด ไม่ใช่ข้อบกพร่องของฮาร์ดแวร์ ตรวจสอบให้แน่ใจว่า PSRAM ของบอร์ดถูกตรวจพบและกำหนดค่าอย่างถูกต้องในสเก็ตช์ของคุณก่อนที่จะสรุปว่าโมดูลกล้องนั้นมีข้อบกพร่อง
  • ภาพเสียหายหรือมีสัญญาณรบกวนที่มองเห็นได้หรือเส้นที่ผิดเพี้ยน: ตรวจสอบว่าขั้วต่อสายแพรกล้องถูกเสียบเข้าไปในซ็อกเก็ตอย่างแน่นหนาและสม่ำเสมอ ขั้วต่อสายแพรที่เสียบไม่สนิทเป็นสาเหตุที่พบบ่อยที่สุดของอาการนี้ในโมดูลกล้องเหล่านี้
  • การสตรีมทำงานแต่ช้าหรือกระตุก: นี่เป็นพฤติกรรมปกติที่ความละเอียดสูงผ่าน Wi-Fi ไม่ใช่ข้อบกพร่องเสมอไป ลองลดความละเอียดหรือคุณภาพของ JPEG ก่อน และยืนยันว่าการสตรีมราบรื่นขึ้นก่อนที่จะสงสัยว่ามีปัญหาฮาร์ดแวร์หรือเครือข่าย
  • ไม่มีภาพเลยแต่บอร์ดบูตได้ตามปกติ: ตรวจสอบการกำหนดค่าขาของกล้องในโค้ดของคุณอีกครั้งว่าตรงกับการเดินสายไฟจริงของบอร์ดนี้หรือไม่ เนื่องจากแผนที่ขาที่ไม่ตรงกันจะทำให้กล้องไม่ถูกเริ่มต้นโดยไม่มีข้อความแจ้งเตือนแม้ว่าส่วนที่เหลือของสเก็ตช์จะทำงานได้ดีก็ตาม

การอัปเกรดในอนาคต (ทางเลือก): การตรวจจับวัตถุบนอุปกรณ์

การจับภาพและสตรีมพื้นฐานเป็นเพียงขั้นตอนแรกของสิ่งที่บอร์ดที่มีกล้องสามารถทำได้ การรันการตรวจจับวัตถุจริงบนอุปกรณ์หรือการจัดประเภทรูปภาพ การให้บอร์ดเองรู้จักว่ามีอะไรอยู่ในเฟรมแทนที่จะแค่แสดงให้คุณเห็นนั้นเป็นขั้นตอนที่แท้จริงและแยกต่างหากนอกเหนือจากความสามารถที่มาพร้อมกับชุดนี้ ต้องใช้โมเดลที่ได้รับการฝึกฝนให้มีขนาดพอดีกับหน่วยความจำและงบประมาณการประมวลผลของบอร์ด รวมถึงทรัพยากรบนบอร์ดที่เหลือเพียงพอหลังจากไปป์ไลน์ของกล้องเพื่อรันการอนุมานในแต่ละเฟรม ถือว่านี่เป็นเส้นทางการอัปเกรดในอนาคตที่แท้จริงที่ควรสำรวจเมื่อคุณคุ้นเคยกับการจับภาพและสตรีมพื้นฐานแล้ว ไม่ใช่สิ่งที่ชุดพื้นฐานนี้ทำโดยค่าเริ่มต้น

การเดินสาย

  • Freenove ESP32-S3 Camera Board → คอมพิวเตอร์ผ่านสาย USB-C — สำหรับจ่ายไฟและตั้งโปรแกรม/จอภาพซีเรียล
  • โมดูลกล้องถูกประกอบมาล่วงหน้ากับบอร์ดผ่านขั้วต่อริบบอน/บอร์ด — ห้ามถอดหรือเดินสายไฟใหม่ ไม่จำเป็นต้องมีสายไฟภายนอกเพิ่มเติมสำหรับโครงการนี้

การแมปข้อมูลขาของกล้องที่แน่นอนนั้นขึ้นอยู่กับบอร์ดและไม่ใช่สิ่งที่จะเดาได้ — สเก็ตช์ตัวอย่างของ Freenove เอง (หรือตัวอย่าง CameraWebServer ที่สร้างขึ้นใน Arduino IDE สำหรับ ESP32 → Camera) มาพร้อมกับ `camera_pins.h` ที่ถูกต้องสำหรับรุ่นบอร์ดที่รู้จัก ดังนั้นให้ใช้สิ่งนั้นแทนการเดินสายขาด้วยมือ รันสเก็ตช์เริ่มต้นด้านล่างก่อนเพื่อยืนยันว่าบอร์ดและ PSRAM ถูกตรวจพบก่อนที่จะไปยังตัวอย่างกล้อง — PSRAM ต้องแสดงว่าพร้อมใช้งาน มิฉะนั้นตัวอย่างกล้องจะล้มเหลวในการจัดสรรบัฟเฟอร์เฟรม

โค้ดเริ่มต้น

// Bring-up sanity check ONLY - confirms the board is alive and PSRAM is detected
// before moving on to the camera example. This does NOT touch the camera at all,
// so it has no board-specific pin numbers to get wrong.

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println("=== ESP32-S3 Camera Board Bring-Up ===");
  Serial.print("Chip model: ");
  Serial.println(ESP.getChipModel());
  Serial.print("Chip revision: ");
  Serial.println(ESP.getChipRevision());
  Serial.print("CPU frequency (MHz): ");
  Serial.println(getCpuFrequencyMhz());
  Serial.print("PSRAM size (bytes): ");
  Serial.println(ESP.getPsramSize());
  Serial.print("Free heap (bytes): ");
  Serial.println(ESP.getFreeHeap());

  if (ESP.getPsramSize() == 0) {
    Serial.println("WARNING: No PSRAM detected - the camera example needs PSRAM enabled.");
    Serial.println("Check Tools > PSRAM is set to 'OPI PSRAM' (or your board's PSRAM option) in Arduino IDE.");
  }
}

void loop() {
  // Nothing to do here - this sketch is just a bring-up check.
}

/*
 * NEXT STEP - loading the real camera example (do this instead of guessing pins):
 * 1. In Arduino IDE: File > Examples > ESP32 > Camera > CameraWebServer
 *    (this ships with the Arduino-ESP32 core and already contains correct
 *    camera_pins.h definitions for known board models).
 * 2. In the sketch, find the block of "#define CAMERA_MODEL_..." lines near the
 *    top and uncomment the one matching your Freenove board (check Freenove's
 *    own product page/wiki for the exact model name - if none match exactly,
 *    use Freenove's own official example sketch instead, which ships with the
 *    correct camera_pins.h for their board).
 * 3. Enter your WiFi credentials, set PSRAM enabled in Tools, and upload.
 * 4. Open Serial Monitor at 115200 baud to get the board's IP address, then
 *    visit it in a browser to confirm the camera stream works.
 */

ไม่แน่ใจขั้นตอนไหน? ถามเรา