3 คะแนน โดย GN⁺ 2025-02-03 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ESP32 RC Cars

วิดีโอเดโม

  • โปรเจ็กต์นี้สาธิตระบบกล้องรถบังคับระยะไกลที่ใช้ ESP32
  • สามารถส่งสตรีมวิดีโอแบบเรียลไทม์ผ่าน WebSockets และควบคุมมอเตอร์กับเซอร์โวได้
  • แอปพลิเคชันเซิร์ฟเวอร์ Python จัดการการสื่อสารผ่าน WebSocket และให้เว็บอินเทอร์เฟซสำหรับควบคุมอุปกรณ์ ESP32

ฟีเจอร์

  • สตรีมวิดีโอแบบเรียลไทม์จาก ESP32-CAM ไปยังเว็บเซิร์ฟเวอร์
  • ควบคุมมอเตอร์และเซอร์โวจากระยะไกลผ่านคำสั่ง WebSocket
  • ฟังก์ชันหมดเวลาอัตโนมัติสำหรับรีเซ็ตมอเตอร์และเซอร์โวกลับสู่สถานะเริ่มต้น
  • มีแคนวาสวิดีโอฟีดแบบหลายไคลเอนต์ที่สร้างแบบไดนามิกบนเซิร์ฟเวอร์

ข้อกำหนดฮาร์ดแวร์

  • ESP32-CAM (โมดูล AI Thinker หรือบอร์ดที่เข้ากันได้)
  • มอเตอร์และเซอร์โวที่เชื่อมต่อกับขา GPIO ที่เหมาะสม
  • แหล่งจ่ายไฟ 5V ที่เสถียรสำหรับ ESP32-CAM
  • ทางเลือก: การ์ด SD สำหรับฟีเจอร์เพิ่มเติม
  • เครือข่าย Wi‑Fi สำหรับการสื่อสาร

วัสดุ

  • ชุดอุปกรณ์ทั้งหมดสามารถซื้อได้จาก aliexpress
  • แชสซีรถยนต์, electronic speed controller, ที่ใส่แบตเตอรี่, เซลล์ 18650 หรือชุดแบตเตอรี่ 7.4v, ESP32-CAM, เกมแพดบลูทูธ (ใช้คอนโทรลเลอร์ PS4)

ข้อกำหนดซอฟต์แวร์

โค้ด ESP32
ไลบรารี
  • WiFi.h: การเชื่อมต่อ Wi‑Fi
  • ArduinoWebsockets.h: การสื่อสาร WebSocket
  • esp_camera.h: ควบคุมกล้อง ESP32-CAM
  • ServoControl.h และ Esc.h: ควบคุมเซอร์โวและมอเตอร์
  • Arduino.h: ฟังก์ชันมาตรฐานของ Arduino
เซิร์ฟเวอร์ Python
การพึ่งพา
  • ติดตั้งไลบรารี Python ต่อไปนี้: aiohttp, opencv-python, numpy

การตั้งค่า

เฟิร์มแวร์ ESP32
  1. แก้ไขไฟล์ secrets.h เพื่อใส่ข้อมูลรับรอง Wi‑Fi และ URL ของเซิร์ฟเวอร์ WebSocket
  2. ตรวจสอบว่าขา GPIO ของโมดูลกล้อง มอเตอร์ และเซอร์โว ตรงกับการตั้งค่าฮาร์ดแวร์
เซิร์ฟเวอร์ Python
  1. วางสคริปต์เซิร์ฟเวอร์ไว้ในไดเรกทอรีพร้อมไฟล์ index.html สำหรับเว็บอินเทอร์เฟซ
  2. เริ่มเซิร์ฟเวอร์: python3 server.py

วิธีใช้งาน

ESP32
  1. ใช้ Arduino IDE หรือแพลตฟอร์มที่เข้ากันได้เพื่ออัปโหลดสเก็ตช์ที่ให้มาไปยัง ESP32-CAM
  2. ตรวจสอบเอาต์พุตแบบซีเรียลเพื่อดูว่าเชื่อมต่อกับ Wi‑Fi และเซิร์ฟเวอร์ WebSocket สำเร็จหรือไม่
เซิร์ฟเวอร์
  1. รันสคริปต์เซิร์ฟเวอร์ Python
  2. เปิดเว็บอินเทอร์เฟซในเบราว์เซอร์เพื่อดูสตรีมวิดีโอแบบเรียลไทม์
  3. ส่งคำสั่งควบคุมผ่านการเชื่อมต่อ WebSocket

คำสั่ง WebSocket

  • MOTOR:<speed>: ตั้งค่าความเร็วมอเตอร์ (-255 ถึง 255)
  • SERVO:<angle>: ตั้งค่ามุมเซอร์โว (0 ถึง 180)
  • CONTROL:<speed>:<angle>: ควบคุมความเร็วมอเตอร์และมุมเซอร์โวพร้อมกัน

รายละเอียดทางเทคนิค

การเริ่มต้น ESP32
  • Wi‑Fi: เชื่อมต่อกับเครือข่าย Wi‑Fi ที่กำหนด
  • กล้อง: กำหนดค่า ESP32-CAM ด้วยการตั้งค่าที่เหมาะสมสำหรับการสตรีมวิดีโอ
  • WebSocket: ตั้งค่าการเชื่อมต่อ WebSocket กับเซิร์ฟเวอร์
การจัดการหมดเวลา
  • หากไม่ได้รับคำสั่งควบคุมภายในช่วงเวลาหมดเวลาที่กำหนดไว้ล่วงหน้า ความเร็วมอเตอร์จะถูกรีเซ็ตเป็น 0 และมุมเซอร์โวเป็น 90
เซิร์ฟเวอร์ Python
  • จัดการการสื่อสารผ่าน WebSocket กับไคลเอนต์ ESP32 หลายตัว
  • ประมวลผลเฟรมวิดีโอที่รับมาและจัดเรียงเป็นกริดแบบไดนามิก
  • สตรีมกริดเฟรมวิดีโอไปยังเว็บอินเทอร์เฟซ

การแก้ปัญหา

ปัญหาการเชื่อมต่อ
  • ตรวจสอบข้อมูลรับรอง Wi‑Fi ใน secrets.h
  • ตรวจสอบว่าเซิร์ฟเวอร์ WebSocket กำลังทำงานและสามารถเข้าถึงได้
ปัญหาสตรีมวิดีโอ
  • ตรวจสอบว่า ESP32-CAM ได้รับไฟเลี้ยงอย่างเหมาะสม
  • ตรวจสอบการตั้งค่าการเริ่มต้นกล้อง

ใบอนุญาต

  • โปรเจ็กต์นี้เผยแพร่แบบโอเพนซอร์สภายใต้ใบอนุญาต MIT

การมีส่วนร่วม

  • ยินดีรับ issue หรือ pull request เพื่อปรับปรุงแอปพลิเคชัน

1 ความคิดเห็น

 
GN⁺ 2025-02-03
ความคิดเห็นบน Hacker News
  • เมื่อ 12 ปีก่อน ในยุคที่มี Arduino แต่ยังไม่มี ESP32 เคยทำโปรเจกต์โดยใช้โทรศัพท์ HTC Magic เป็นทั้งกล้องและตัวส่งสัญญาณ WiFi แล้วเชื่อมต่อกับ Arduino เพื่อควบคุมเซอร์โวและ RGB LED การเชื่อมต่อไม่ค่อยเสถียรแต่ก็สนุกมาก

    • ขอบคุณที่แชร์โปรเจกต์นี้ อยากชุบชีวิตโปรเจกต์นี้ขึ้นมาอีกครั้งด้วยไมโครคอนโทรลเลอร์รุ่นถัดไป
    • ขอบคุณสำหรับฟีดแบ็กเกี่ยวกับโปรเจกต์ อยากทำต่อและอยากดู PR
    • ถ้าคุณชอบโปรเจกต์นี้ ก็น่าจะแนะนำให้คนที่กำลังมองหานักพัฒนาระยะไกลรู้จักได้ ผมเป็นนักพัฒนา Ruby-on-Rails แต่ก็กำลังพิจารณางานด้านหุ่นยนต์ด้วย
  • ถ้าสนใจงานอัตโนมัติสำหรับรถ RC นี่เป็นเรื่องอ่านที่สนุก แม้ข้อมูลจะเก่าหลายปีแล้ว แต่ทุกวันนี้อาจมีวิธีที่ง่ายกว่านี้

  • ก่อนซื้อ ESP32 CAM ควรพิจารณารุ่นที่มีเสาอากาศภายนอกไว้ด้วย ผมอ้างอิงคำแนะนำจาก Reddit เรื่องปัญหาเฟรมเรต

  • ไม่นานมานี้ผมทำโปรเจกต์คล้ายกันโดยใช้ Rust และ Steam Deck

  • ปัญหาใหญ่ของ FPV คือค่าหน่วงเวลา และผมก็สงสัยว่าโปรเจกต์นี้มีค่าหน่วงเวลาเท่าไร

  • เคยควบคุมรถถัง RC ที่ขับเคลื่อนด้วย ESP32 ผ่าน Bluetooth โดยใช้คอนโทรลเลอร์ PlayStation 4

    • ซอฟต์แวร์พื้นฐานเริ่มต้นจากโค้ด C ราว 20 บรรทัด และใช้ไลบรารีคอนโทรลเลอร์ Bluetooth
    • ใช้สติ๊กสองอันควบคุมแทร็กทั้งสองข้างได้ที่ความเร็วต่ำ แต่ที่ความเร็วสูงจำเป็นต้องใช้วิธีควบคุมแบบอื่น
    • ใช้ "ทริกเกอร์" ของคอนโทรลเลอร์ DualShock เพื่อทำการควบคุมแทร็กโดยตรงพร้อมจำกัด rpm
    • เวลาขับที่ความเร็วสูง ใช้สติ๊กซ้ายเป็นคันเร่ง และสติ๊กขวาเป็นพวงมาลัย ทำให้ขับได้เหมือนรถ RC ทั่วไป
    • ได้แชร์วิดีโอของโมเดลที่พิมพ์ด้วย 3D ที่ใช้ไว้แล้ว
  • รถ RC ขนาด 2.5 นิ้วดี ๆ บน AliExpress ราคา 30 ดอลลาร์ และกล้องอะนาล็อก 5.8 GHz แบบสแตนด์อโลนราคา 25 ดอลลาร์

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

  • เคยอยากทำของเล่นแมวที่หลบสิ่งกีดขวางได้อัตโนมัติ และคิดว่าโปรเจกต์นี้อาจเป็นฐานที่ดีกว่าสิ่งที่เคยเลือกไว้ก่อนหน้านี้