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
- แก้ไขไฟล์
secrets.h เพื่อใส่ข้อมูลรับรอง Wi‑Fi และ URL ของเซิร์ฟเวอร์ WebSocket
- ตรวจสอบว่าขา GPIO ของโมดูลกล้อง มอเตอร์ และเซอร์โว ตรงกับการตั้งค่าฮาร์ดแวร์
เซิร์ฟเวอร์ Python
- วางสคริปต์เซิร์ฟเวอร์ไว้ในไดเรกทอรีพร้อมไฟล์
index.html สำหรับเว็บอินเทอร์เฟซ
- เริ่มเซิร์ฟเวอร์:
python3 server.py
วิธีใช้งาน
ESP32
- ใช้ Arduino IDE หรือแพลตฟอร์มที่เข้ากันได้เพื่ออัปโหลดสเก็ตช์ที่ให้มาไปยัง ESP32-CAM
- ตรวจสอบเอาต์พุตแบบซีเรียลเพื่อดูว่าเชื่อมต่อกับ Wi‑Fi และเซิร์ฟเวอร์ WebSocket สำเร็จหรือไม่
เซิร์ฟเวอร์
- รันสคริปต์เซิร์ฟเวอร์ Python
- เปิดเว็บอินเทอร์เฟซในเบราว์เซอร์เพื่อดูสตรีมวิดีโอแบบเรียลไทม์
- ส่งคำสั่งควบคุมผ่านการเชื่อมต่อ 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 ความคิดเห็น
ความคิดเห็นบน Hacker News
เมื่อ 12 ปีก่อน ในยุคที่มี Arduino แต่ยังไม่มี ESP32 เคยทำโปรเจกต์โดยใช้โทรศัพท์ HTC Magic เป็นทั้งกล้องและตัวส่งสัญญาณ WiFi แล้วเชื่อมต่อกับ Arduino เพื่อควบคุมเซอร์โวและ RGB LED การเชื่อมต่อไม่ค่อยเสถียรแต่ก็สนุกมาก
ถ้าสนใจงานอัตโนมัติสำหรับรถ RC นี่เป็นเรื่องอ่านที่สนุก แม้ข้อมูลจะเก่าหลายปีแล้ว แต่ทุกวันนี้อาจมีวิธีที่ง่ายกว่านี้
ก่อนซื้อ ESP32 CAM ควรพิจารณารุ่นที่มีเสาอากาศภายนอกไว้ด้วย ผมอ้างอิงคำแนะนำจาก Reddit เรื่องปัญหาเฟรมเรต
ไม่นานมานี้ผมทำโปรเจกต์คล้ายกันโดยใช้ Rust และ Steam Deck
ปัญหาใหญ่ของ FPV คือค่าหน่วงเวลา และผมก็สงสัยว่าโปรเจกต์นี้มีค่าหน่วงเวลาเท่าไร
เคยควบคุมรถถัง RC ที่ขับเคลื่อนด้วย ESP32 ผ่าน Bluetooth โดยใช้คอนโทรลเลอร์ PlayStation 4
รถ RC ขนาด 2.5 นิ้วดี ๆ บน AliExpress ราคา 30 ดอลลาร์ และกล้องอะนาล็อก 5.8 GHz แบบสแตนด์อโลนราคา 25 ดอลลาร์
กำลังพิจารณาโปรเจกต์คล้ายกัน และอยากรู้ประสบการณ์เรื่องค่าหน่วงเวลา อยากรู้ว่าสามารถดูวิดีโอฟีดแล้วควบคุมจากระยะไกลได้ไหม คิดว่าค่าหน่วงเวลาน่าจะเป็นปัญหาสำหรับการหลบสิ่งกีดขวาง
เคยอยากทำของเล่นแมวที่หลบสิ่งกีดขวางได้อัตโนมัติ และคิดว่าโปรเจกต์นี้อาจเป็นฐานที่ดีกว่าสิ่งที่เคยเลือกไว้ก่อนหน้านี้