แม้ว่าจะมีรถยนต์หุ่นยนต์ควบคุมแบบไร้สายที่ใช้ ESP32 พร้อมกล้องในตัวมากมาย เช่น PiCar-X 2.0 หรือ Zeus Car แต่การสร้างบางอย่างด้วยตัวเองอาจสนุกและคุ้มค่ากว่า นั่นคือสิ่งที่เราจะทำในวันนี้ โดยสร้างรถ RC ของเราเองโดยใช้ชิ้นส่วนสำเร็จรูปและบอร์ด ESP32-CAM และเขียนเฟิร์มแวร์สำหรับบอร์ดนี้
โปรเจ็กต์นี้สาธิตระบบกล้องควบคุมระยะไกลที่ใช้ ESP32 ซึ่งสามารถส่งสตรีมวิดีโอสดผ่าน WebSocket และควบคุมมอเตอร์และเซอร์โวได้ แอปพลิเคชันเซิร์ฟเวอร์ Python จัดการการสื่อสาร WebSocket และจัดเตรียมอินเทอร์เฟซเว็บเพื่อดูและควบคุมอุปกรณ์ ESP32
คุณสมบัติ การสตรีมวิดีโอสดจาก ESP32-CAM ไปยังเว็บเซิร์ฟเวอร์ การควบคุมมอเตอร์และเซอร์โวจากระยะไกลผ่านคำสั่ง WebSocket การหมดเวลาอัตโนมัติเพื่อรีเซ็ตมอเตอร์และเซอร์โวเป็นสถานะเริ่มต้น ฟีดวิดีโอแบบไดนามิกสำหรับแคนวาสหลายไคลเอนต์บนเซิร์ฟเวอร์ ข้อกำหนดด้านฮาร์ดแวร์ ESP32-CAM (โมดูล AI Thinker หรือบอร์ดที่เข้ากันได้) มอเตอร์และเซอร์โวเชื่อมต่อกับพิน GPIO ที่เหมาะสม แหล่งจ่ายไฟ 5V ที่เสถียรสำหรับ ESP32-CAM การ์ด SD เสริม (หากจำเป็นสำหรับฟังก์ชันอื่น ๆ) เครือข่ายไวไฟเพื่อการสื่อสาร วัสดุ ตัวถังรถ การควบคุมความเร็วแบบอิเล็กทรอนิกส์: ฉันใช้เวอร์ชัน 30 แอมป์เพราะมีเอาต์พุต BEC ที่ดีกว่า - 5v ที่ 3 แอมป์ ดูเหมือนว่าจะมีกระแสเพียงพอสำหรับจ่ายไฟให้ทั้ง ESC และเซอร์โว ที่ยึดแบตเตอรี่ เซลล์ 2 18650 3.6v หรือชุดแบตเตอรี่ 7.4v (ฉันเคยใช้ทั้งสองแบบ เซลล์มีความยืดหยุ่นมากกว่าสำหรับโครงการอื่น) ESP32-CAM:(สำคัญมากที่จะต้องซื้อแบบที่มีเสาอากาศภายนอก และฉันใช้กล้องฟิชอาย 170 องศา) จอยเกมบลูทูธ (ฉันใช้คอนโทรลเลอร์ PS4) การเดินสายไฟ ฉันถอดอะแดปเตอร์ JST 3 พินออกจากเซอร์โวที่มาพร้อมกับแชสซีรถแล้วใส่ลงในปลั๊ก JST 4 พินเพื่อเสียบเข้ากับ ESP32 จากนั้นฉันจึงต่อสายบวกและสายลบบนเซอร์โวและเพิ่มปลั๊ก JST ตัวเมีย 3 พินโดยใช้เครื่องมือจีบ ในที่สุด ฉันก็ต่อสายควบคุม ESC (สีขาว) เข้ากับปลั๊ก JST 4 พินและปลั๊กตัวเมีย 3 พิน มีลักษณะดังนี้:
ข้อกำหนดของซอฟต์แวร์ รหัส ESP32
ห้องสมุด
WiFi.h สำหรับการเชื่อมต่อ Wi-Fi ArduinoWebsockets.h สำหรับการสื่อสาร WebSocket esp_camera.h สำหรับการควบคุมกล้อง ESP32-CAM ServoControl.h และ Esc.h สำหรับการควบคุมเซอร์โวและมอเตอร์ Arduino.h สำหรับฟังก์ชัน Arduino มาตรฐาน เซิร์ฟเวอร์ Python ความสัมพันธ์ที่ต้องพึ่งพา
ติดตั้งไลบรารี Python ดังต่อไปนี้:
pip3 install aiohttp opencv-python numpy
การกำหนดค่า
เฟิร์มแวร์ ESP32
1. แก้ไขไฟล์ secrets.h เพื่อรวมข้อมูลรับรอง Wi-Fi ของคุณและ URL เซิร์ฟเวอร์ WebSocket:
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
2. ตรวจสอบให้แน่ใจว่าพิน GPIO สำหรับโมดูลกล้อง มอเตอร์ และเซอร์โวตรงกับการตั้งค่าฮาร์ดแวร์ของคุณ:
พิน GPIO ของกล้องได้รับการกำหนดค่าไว้ล่วงหน้าสำหรับบอร์ด AI Thinker ESP32-CAM อัปเดตพินมอเตอร์และเซอร์โวหากจำเป็น เซิร์ฟเวอร์ Python วางสคริปต์เซิร์ฟเวอร์ไว้ในไดเร็กทอรีที่มีไฟล์ index.html สำหรับอินเทอร์เฟซเว็บ
เริ่มต้นเซิร์ฟเวอร์:
python3 server.py
สามารถเข้าถึงเซิร์ฟเวอร์ได้ที่ http://localhost:8080/
การใช้งาน อีเอสพี32
อัปโหลดแบบร่างที่ให้มาไปยัง ESP32-CAM ของคุณโดยใช้ Arduino IDE หรือแพลตฟอร์มที่เข้ากันได้ ตรวจสอบเอาท์พุตแบบอนุกรมเพื่อให้แน่ใจว่าเชื่อมต่อกับ Wi-Fi และเซิร์ฟเวอร์ WebSocket ได้สำเร็จ เซิฟเวอร์
เรียกใช้สคริปต์เซิร์ฟเวอร์ Python เปิดอินเทอร์เฟซเว็บในเบราว์เซอร์เพื่อดูสตรีมวิดีโอสด ส่งคำสั่งควบคุมผ่านการเชื่อมต่อ WebSocket คำสั่ง WebSocket
MOTOR:<ความเร็ว>: ตั้งค่าความเร็วของมอเตอร์ (-255 ถึง 255) SERVO:<มุม>: ตั้งค่ามุมเซอร์โว (0 ถึง 180) การควบคุม: <ความเร็ว>: <มุม>: ควบคุมความเร็วของมอเตอร์และมุมเซอร์โวพร้อมกัน รายละเอียดทางเทคนิค การเริ่มต้น ESP32
Wi-Fi: เชื่อมต่อกับเครือข่าย Wi-Fi ที่ระบุ กล้อง: กำหนดค่า ESP32-CAM ด้วยการตั้งค่าที่เหมาะสมสำหรับการสตรีมวิดีโอ WebSocket: สร้างการเชื่อมต่อ WebSocket กับเซิร์ฟเวอร์ การจัดการการหมดเวลา
หากไม่ได้รับคำสั่งควบคุมภายในระยะเวลาหมดเวลาที่กำหนดไว้ ความเร็วของมอเตอร์จะรีเซ็ตเป็น 0 และมุมเซอร์โวจะรีเซ็ตเป็น 90
เซิร์ฟเวอร์ Python
จัดการการสื่อสาร WebSocket กับไคลเอนต์ ESP32 หลายตัว ประมวลผลเฟรมวิดีโอที่เข้ามาและจัดเรียงแบบไดนามิกในตาราง สตรีมกริดของเฟรมวิดีโอไปยังอินเทอร์เฟซเว็บ การแก้ไขปัญหา ปัญหาการเชื่อมต่อ: ตรวจสอบข้อมูลรับรอง Wi-Fi ใน secrets.h ตรวจสอบว่าเซิร์ฟเวอร์ WebSocket กำลังทำงานและสามารถเข้าถึงได้ ปัญหาการสตรีมวิดีโอ: ตรวจสอบให้แน่ใจว่ามีการจ่ายไฟให้กับ ESP32-CAM อย่างเหมาะสม ตรวจสอบการตั้งค่าการเริ่มต้นใช้งานกล้อง