3 điểm bởi GN⁺ 2025-02-03 | 1 bình luận | Chia sẻ qua WhatsApp

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.hEsc.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
  1. 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
  2. Đả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
  1. Đặt script máy chủ trong thư mục cùng với tệp index.html cho giao diện web
  2. Khởi động máy chủ: python3 server.py

Cách dùng

ESP32
  1. 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
  2. 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ủ
  1. Chạy script máy chủ Python
  2. Mở giao diện web trong trình duyệt để xem luồng video thời gian thực
  3. 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

 
GN⁺ 2025-02-03
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

    • Cảm ơn vì đã chia sẻ dự án, tôi muốn hồi sinh nó với thế hệ vi điều khiển tiếp theo
    • Cảm ơn phản hồi về dự án, tôi muốn tiếp tục làm và rất mong được xem PR
    • Nếu bạn thích dự án này, sẽ rất tuyệt nếu bạn giới thiệu nó cho ai đó đang tìm lập trình viên làm việc từ xa. Tôi là một lập trình viên Ruby-on-Rails nhưng cũng đang cân nhắc làm việc về robot học
  • 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

    • Phần mềm cơ bản bắt đầu từ khoảng 20 dòng mã C và dùng thư viện tay cầm Bluetooth
    • Có thể dùng hai cần analog để điều khiển hai bánh xích ở tốc độ thấp, nhưng ở tốc độ cao thì cần cách điều khiển khác
    • Tôi đã dùng các "trigger" của tay cầm DualShock để hiện thực điều khiển trực tiếp từng bánh xích với giới hạn rpm
    • Khi chạy tốc độ cao, cần trái dùng làm ga, cần phải dùng để lái, nên có thể lái như xe RC thông thường
    • Tôi chia sẻ video về mẫu in 3D đã sử dụng
  • 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

    • Đây là thông tin dành cho những ai quan tâm đến kết quả hơn là chỉ xem đây như một dự án vui
  • 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 đó