ESP32 สำหรับงานเรียนรู้ด้าน IoT และ Video Streaming

Globalbyteshop Blog | IoT & Embedded Systems

ESP32-CAM MJPEG Streaming Setup

ESP32-CAM ทำหน้าที่เป็น MJPEG Streaming Server สำหรับหลายคลায์เอนต์พร้อมกัน

Overview: ESP32 และ MJPEG Streaming คืออะไร

ไปเที่ยว Smart Home Store ใหม่ ๆ ไหม? เห็นกล้องวิดีโอมิติสัก 10-20 ตัว ป้ายบอกว่า "24/7 Streaming" ใช่ไหม

นี่คือ IoT ยุคนี้ - ทำให้อุปกรณ์ถ่ายทำและส่งข้อมูลกลับมาเรียลไทม์ เพื่อให้คนหลายคนดูได้พร้อม ๆ กัน ผ่านมือถือ แท็บเล็ต หรือคอมพิวเตอร์

ESP32 คือ Microcontroller ตัวเล็ก ราคาถูก (100-200 บาท) ที่มี WiFi และ Bluetooth ในตัว

เมื่อต่อกับ ESP32-CAM (กล้องขนาดเล็ก) มันก็ทำได้สิ่งเดียวกัน - ถ่ายรูป บีบอัด และส่ง Stream ไปยังโทรศัพท์ของคุณและเพื่อน ๆ พร้อมกัน

MJPEG (Motion JPEG) คือวิธีการส่งวิดีโอแบบหนึ่ง - ส่งรูปถ่ายหลาย ๆ ภาพต่อเนื่องกัน (15-30 frame ต่อวินาที) จากนั้นลิวจอกมารวมเป็นวิดีโอ

มันเหมือน flip book - แต่ละหน้าคือรูป JPEG ต่างกัน เมื่อเปิดเร็ว มันก็ดูเหมือนวิดีโอ

Things: อุปกรณ์ที่ต้องใช้

ถ้าจะเริ่มต้น โปรเจกต์ ESP32-CAM MJPEG Streaming ต้องเตรียมอะไรบ้าง:

  • ESP32-CAM Module - บอร์ดที่มีกล้อง 2MP + WiFi ในตัว
  • USB-to-Serial Adapter - สำหรับ Upload Code ครั้งแรก (CH340 หรือ CP2102)
  • Jumper Wires - สาย DuPont สำหรับต่อวงจร
  • Power Supply - 5V 2A (ต้องแรงพอ ESP32-CAM หิว) บางคน ใช้ Power Bank ได้
  • Arduino IDE หรือ PlatformIO - สำหรับเขียนและ Upload Code
  • WiFi Network - สำหรับให้ ESP32-CAM ติดต่อกับมือถือ/คอมพิวเตอร์

ราคารวมประมาณ 500-800 บาท - ไม่แพง ถ้าเทียบกับว่าได้โปรเจกต์ IoT แท้ ๆ มา

Story: ทำไมเรื่องนี้สำคัญ

ไม่นานมานี้ โพลที่ว่า "นักเรียน/นักศึกษาที่สนใจ IoT" หรือ "Smart Home" พุ่งสูงขึ้นอย่างนั้น

บ่อย ๆ คนถามว่า "อยากเรียนโปรเจกต์ CCTV แบบ Smart Home ได้ไหม" "ถ่ายทำและส่ง Stream ผ่าน WiFi ได้ยังไง"

ปัญหาคือ - ที่แรก ก็ยาก ที่ที่สอง ก็ราคาแพง ที่ที่สาม ก็ยังไม่เข้าใจ Multi-Client Streaming คืออะไร

เลยเป็นที่มาของบทความนี้ - เราต้องการแสดงให้เห็นว่า "การส่ง Streaming ไปยังหลายคนพร้อมกัน" อาจจะยากกว่าที่คิด และต้องใช้วิทยาการเพิ่มเติม

Background: MJPEG คืออะไร ทำไมถึงเป็น Standard

ก่อนที่จะไปเข้าโรงถ่ายทำ เรามาอ่าน "หลักการ" ของ MJPEG ให้เข้าใจก่อน

MJPEG = Motion JPEG

ไม่ได้เก็บวิดีโอเป็นไฟล์ mp4 หรือ h.264 แบบเดิม

แต่ส่ง JPEG Images ที่เก็บบีบอัดแยกกัน ทีละ 1 ภาพ ในลำดับต่อเนื่องกัน

ลิวจอกมารวมรูปทั้งหมด เป็นวิดีโอต่อเนื่อง (Playback)

ทำไมถึงใช้ MJPEG?

  • เรียบง่าย - ไม่ต้อง Codec ที่ซับซ้อน (H.264, VP9)
  • ประหยัดทรัพยากร - ใช้พลังประมวลผล (CPU/GPU) น้อย บน Microcontroller เล็ก ๆ
  • รองรับกว้าง - เบราว์เซอร์เดิม รองรับ MJPEG ได้เลย ไม่ต้องติดตั้ง Plugin
  • ยืดหยุ่น - เปลี่ยนคุณภาพรูป (Quality) และจำนวน Frame ต่อวินาที ได้ง่าย

เลยถ้าคุณเข้าเว็บกล้อง CCTV เดิม ๆ และเห็น ".mjpeg" หรือ "mjpg_streamer" ก็คือนี่แหละ - ข่าวเก่ามิ้ว แต่ยังใช้กันอยู่เยอะ เพราะ "มันทำงาน"

Challenge #1: Single Client Problem

คุณขึ้น Arduino IDE เขียน Code ง่าย ๆ ให้ ESP32-CAM ส่ง Stream ออกมา

ตอนแรก ดี ครับ - เปิดบราว์เซอร์ไปที่ http://192.168.1.100:81 ก็เห็นวิดีโอ real-time

แต่พอ - สมมติว่ามีคนที่สองพยายามเข้าดู Stream เดียวกัน ทันใด นั้น

เฉพาะคนแรกเท่านั้นที่ได้ Stream ชัดเจน

คนที่สองเข้า - ช้า/สะดุด หรือ Connection Reset

ESP32-CAM ไม่มีทรัพยากรพอ (RAM, CPU) ที่จะส่ง Stream ให้หลายคน พร้อมกัน

นี่คือปัญหาแรก - "Single Client Streaming" - ESP32-CAM Code เดิม ไม่ได้ออกแบบมาให้หลายคนเข้าดูพร้อมกัน

Streaming to More Than One Client: วิธีแก้ปัญหา

ดังนั้น ดรัม Anatoli Arkhipenko (ผู้เขียนบทความต้นฉบับ) เขียน Code ใหม่ - เพื่อให้ ESP32-CAM รองรับ Multi-Client Streaming

วิธีการคิด:

  • ใช้ Task หลายตัว - แทนที่จะให้ Core เดียวส่ง Stream ให้ Client หนึ่งตัว มันแบ่งเป็น Task ขนาน (Concurrent)
  • Circular Buffer - แทนที่จะ Capture → Send รอบ ๆ ไป มันเก็บรูป ล่าสุดไว้ใน Buffer
  • Multi-Threading - Client แต่ละคน ได้ Thread ตัวเอง อ่านจาก Buffer เดียวกัน ส่งไปให้ Client นั้น

ผลที่ได้:

✓ คนที่ 1 ดูได้

✓ คนที่ 2 ดูได้

✓ คนที่ 3, 4, 5... ดูได้ (ถึงเท่านี้ ESP32-CAM ไหว)

✓ ทุกคนเห็นวิดีโอเดียวกัน เกือบ Real-time

ใน Code ของ Anatoli - เขาใช้ FreeRTOS Task (ระบบปฏิบัติการจริง ๆ บน ESP32) เพื่อแยก "Capture Thread" กับ "Client Streaming Threads"

Capture Thread ยังถ่ายรูปแบบตั้งแต่เดิม แต่เมื่อไม่มี Client ใครเข้ามา มันเก็บรูปล่าสุดไว้ แล้ว Client หลายตัวอ่านจากที่เดียวนั้น

Challenge #2 & Cherry on Top: ปัญหาและความเก่ง

ปัญหาต่อมา - Bandwidth & Performance

พอเปิด Multi-Client Streaming ได้แล้ว ปัญหา ใหม่ เกิด

WiFi Bandwidth - ถ้า 5 คนเข้ามา ต้องส่งข้อมูล 5x เพื่อให้ 5 คนดู

Quality vs Speed - ถ้าเพิ่มขนาด Frame หรือ Quality ของรูป JPEG ก็ช้าลง

Latency - เวลา Delay ระหว่างการถ่ายรูปกับการแสดงบนจอ (อาจ 500ms - 2s)

ความเก่งของ Anatoli's Solution:

Efficient Buffering - ใช้ Circular Buffer ไม่มีการ Copy ข้อมูลซ้ำ ๆ

Quality Adjustment - ปรับคุณภาพ JPEG ได้โดยตรง เพื่อลด Bandwidth

Frame Rate Control - ควบคุมจำนวน Frame ต่อวินาที ตามสภาวะ

Connection Management - จัดการ Client ที่หลุด/ปิด Connection โดยอัตโนมัติ

Challenge #3: ใช้ Drivers ใหม่

ปัญหาสุดท้าย - Compatibility กับ Sensor ต่าง ๆ

ESP32-CAM มี Sensor หลายรุ่น - OV2640 (เดิม), OV3660 (ใหม่), OV5640 (แพง)

ปัญหา: Code เดิม บางทีอ่าน Sensor ไม่ออก หรือ Feature บางอย่าง ใช้ไม่ได้

วิธีแก้: ใช้ ESP32-CAM Drivers ใหม่ (esp32-camera library เวอร์ชั่นล่าสุด)

Drivers ใหม่มี Support สำหรับ Sensor รุ่นใหม่ และให้ control มากขึ้น (Brightness, Contrast, Face Detection)

ใน Hackster Project นี้ - ข้อมูล Reference หลักของ Anatoli ใช้ Driver เวอร์ชั่นล่าสุด เพื่อให้ Compatible กับ Board ต่าง ๆ มากขึ้น

Practical Application: ใช้งานจริง ๆ

ออกแบบแล้ว ปัญหากำจัดแล้ว - ตอนนี้ลองใช้มันจริง ๆ ดู

  • Home Security Monitoring - เปิด MJPEG Stream บนเว็บ ดูกล้องที่บ้านจากมือถือ เมื่อไหร่ก็ได้
  • Smart Pet Camera - ดูสัตว์เลี้ยงขณะไป ออฟฟิศ หลายคน (ครอบครัว) ดูได้พร้อมกัน
  • Classroom Live Stream - ครู Livestream บทเรียนให้นักศึกษา (ที่บ้านหรือ Quarantine) ดูแบบ Real-time
  • Wildlife Camera - ถ่ายนก แมลง สัตว์ป่า ส่ง Stream ไปยังแอปพลิเคชัน Tracking
  • Industrial Monitoring - เฝ้าระวัง Machine หรือ Assembly Line ตั้ง 1-3 กล้อง ดูได้จากห้องควบคุมหรือบนมือถือ

Step-by-step ก็ง่าย:

  • ติดตั้ง Arduino IDE + ESP32 Board (ติดตั้ง Library)
  • Download Code จาก GitHub ของ Anatoli
  • ใส่ WiFi SSID & Password
  • Upload Code ลงไป
  • เปิดบราว์เซอร์ → http://[IP Address]:81
  • เสร็จ - ดูวิดีโอได้แล้ว

ตัวอย่างการทำงานของ Multi-Client MJPEG Streaming บน ESP32-CAM

Enjoy: สุดท้าย เพลิดเพลินกับโปรเจกต์ของคุณ

พอเข้าใจขั้นตอนและปัญหาแล้ว เวลาเล่นโปรเจกต์ของคุณเอง

ที่พูดเจอบ่อยที่สุด: "อ่านแล้วฟังดูยากเหมือนกัน - แล้วฉันจะเริ่มตรงไหน?"

คำตอบ: ก็เริ่มจากตัวอย่าง (Example Code) ของ Anatoli ตรง ๆ ลอง Upload ลงไป ดูว่ามันทำงานยังไง หลังจากนั้นค่อยปรับแต่ง (Tweak) ตามต้องการของคุณ

อย่าหนีจากการลอง - ความผิดพลาดแรก ๆ คือการเรียนรู้ที่ดีที่สุด

และเมื่อเสร็จแล้ว? ขึ้นรูป Showcase ได้เลย - โปรแกรม GitHub, Blog, Portfolio ของคุณ

ใครรู้ว่า - อาจจะ "Multi-Client MJPEG Streaming" นี้จะกลายเป็น Foundation ของโปรเจกต์ใหญ่ ๆ ในอนาคต

อยากสร้างโปรเจกต์ ESP32-CAM Streaming เองบ้าง?

ติดต่อ Globalbyteshop เพื่อขอคำแนะนำในการเลือก Sensor รุ่นต่าง ๆ และ ได้รับ Code Example พร้อมใช้

สอบถามเพิ่มเติมได้ที่: Globalbyteshop LINE Community

ประกาศสำคัญ:

เนื้อหาบทความนี้เป็นการสรุป เรียบเรียง และแปลจากบทความต้นฉบับภาษาอังกฤษจาก Hackster.io โดยเขียนโดย Anatoli Arkhipenko

ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือการย่อเนื้อหา

อ้างอิงต้นฉบับ:

Hackster.io - Multi-Client MJPEG Streaming from ESP32 โดย Anatoli Arkhipenko

GitHub Repository - esp32-mjpeg-multiclient-espcam-drivers

Globalbyteshop Blog

การศึกษา IoT, Embedded Systems, และ Maker Projects

ติดต่อสั่งซื้อ: openlink.co/globalbyte | LINE Community: Globalbyteshop

แท็ก


Blog posts

© 2026 บริษัท โกลบอลโทรนิค อินเตอร์เทรด จํากัด, ขับเคลื่อนโดย Shopify

    • PayPal

    เข้าสู่ระบบ

    ลืมรหัสผ่านใช่ไหม?

    ยังไม่มีบัญชีใช่ไหม?
    สร้างบัญชี