ESP32 RC Cars
Video demo
- Dự án này trình diễn một hệ thống camera điều khiển từ xa dựa trên ESP32
- Có thể truyền luồng video thời gian thực qua WebSockets và điều khiển động cơ cùng servo
- Ứng dụng máy chủ Python quản lý giao tiếp WebSocket và cung cấp giao diện web để điều khiển thiết bị ESP32
Tính năng
- Truyền phát video thời gian thực từ ESP32-CAM lên máy chủ web
- Điều khiển từ xa động cơ và servo thông qua lệnh WebSocket
- Tính năng tự động timeout để đặt lại động cơ và servo về trạng thái mặc định
- Cung cấp canvas luồng video đa máy khách động từ phía máy chủ
Yêu cầu phần cứng
- ESP32-CAM (mô-đun AI Thinker hoặc bo mạch tương thích)
- Động cơ và servo được kết nối với các chân GPIO phù hợp
- Nguồn cấp 5V ổn định cho ESP32-CAM
- Tùy chọn: thẻ SD cho các tính năng bổ sung
- Mạng Wi-Fi để giao tiếp
Vật liệu
- Tất cả các bộ kit đều có thể mua trên aliexpress
- Khung xe, bộ điều tốc điện tử, khay pin, cell 18650 hoặc bộ pin 7.4v, ESP32-CAM, tay cầm game Bluetooth (đã dùng tay cầm PS4)
Yêu cầu phần mềm
Mã ESP32
Thư viện
WiFi.h: kết nối Wi-Fi
ArduinoWebsockets.h: giao tiếp WebSocket
esp_camera.h: điều khiển camera ESP32-CAM
ServoControl.h và Esc.h: điều khiển servo và động cơ
Arduino.h: các hàm Arduino tiêu chuẩn
Máy chủ Python
Phụ thuộc
- Cài đặt các thư viện Python sau:
aiohttp, opencv-python, numpy
Cấu hình
Firmware ESP32
- Chỉnh sửa tệp
secrets.h để thêm thông tin xác thực Wi-Fi và URL máy chủ WebSocket
- Đảm bảo các chân GPIO của mô-đun camera, động cơ và servo khớp với cấu hình phần cứng
Máy chủ Python
- Đặt script máy chủ trong thư mục cùng với tệp
index.html cho giao diện web
- Khởi động máy chủ:
python3 server.py
Cách dùng
ESP32
- Dùng Arduino IDE hoặc nền tảng tương thích để nạp sketch được cung cấp vào ESP32-CAM
- Theo dõi đầu ra serial để xác nhận đã kết nối thành công với Wi-Fi và máy chủ WebSocket
Máy chủ
- Chạy script máy chủ Python
- Mở giao diện web trong trình duyệt để xem luồng video thời gian thực
- Gửi lệnh điều khiển thông qua kết nối WebSocket
Lệnh WebSocket
MOTOR:<speed>: đặt tốc độ động cơ (-255 đến 255)
SERVO:<angle>: đặt góc servo (0 đến 180)
CONTROL:<speed>:<angle>: điều khiển đồng thời tốc độ động cơ và góc servo
Chi tiết kỹ thuật
Khởi tạo ESP32
- Wi-Fi: kết nối với mạng Wi-Fi được chỉ định
- Camera: cấu hình ESP32-CAM với thiết lập phù hợp để truyền video
- WebSocket: thiết lập kết nối WebSocket với máy chủ
Xử lý timeout
- Nếu không nhận được lệnh điều khiển trong khoảng thời gian timeout được định nghĩa trước, tốc độ động cơ sẽ được đặt lại về
0 và góc servo về 90
Máy chủ Python
- Xử lý giao tiếp WebSocket với nhiều máy khách ESP32
- Xử lý các khung hình video nhận được và sắp xếp chúng động trong một lưới
- Truyền lưới khung hình video tới giao diện web
Khắc phục sự cố
Vấn đề kết nối
- Kiểm tra thông tin xác thực Wi-Fi trong
secrets.h
- Xác nhận máy chủ WebSocket đang chạy và có thể truy cập được
Vấn đề luồng video
- Xác nhận ESP32-CAM được cấp nguồn phù hợp
- Kiểm tra cấu hình khởi tạo camera
Giấy phép
- Dự án này được cung cấp dưới dạng mã nguồn mở theo giấy phép MIT
Đóng góp
- Hoan nghênh gửi issue hoặc pull request để cải thiện ứng dụng
1 bình luận
Bình luận trên Hacker News
12 năm trước, vào thời Arduino đã có nhưng ESP32 còn chưa xuất hiện, tôi từng làm một dự án dùng điện thoại HTC Magic làm camera và bộ phát WiFi, kết nối với Arduino để điều khiển servo và LED RGB. Kết nối không ổn định lắm nhưng rất vui
Nếu bạn quan tâm đến tự động hóa xe RC thì đây là một bài đọc thú vị. Dù là tài liệu từ vài năm trước, ngày nay có thể đã có cách dễ hơn
Trước khi mua ESP32 CAM, nên cân nhắc loại có ăng-ten ngoài. Tôi đã tham khảo lời khuyên trên Reddit về vấn đề tốc độ khung hình
Gần đây tôi đã làm một dự án tương tự bằng Rust và Steam Deck
Vấn đề lớn của FPV là độ trễ, và tôi tò mò độ trễ của dự án này là bao nhiêu
Tôi từng điều khiển một xe tăng RC chạy bằng ESP32 qua Bluetooth bằng tay cầm PlayStation 4
Trên AliExpress, một chiếc xe RC 2.5 inch tốt có giá 30 USD, còn camera analog 5.8 GHz độc lập là 25 USD
Tôi cũng đang cân nhắc một dự án tương tự và muốn biết trải nghiệm về độ trễ. Tôi muốn biết liệu có thể xem luồng video rồi điều khiển từ xa được không. Có vẻ độ trễ sẽ là vấn đề với việc tránh chướng ngại vật
Tôi từng muốn làm một món đồ chơi cho mèo có thể tự động tránh chướng ngại vật. Có vẻ dự án này có thể là nền tảng tốt hơn so với phương án tôi đã chọn trước đó