3P by neo 26일전 | ★ favorite | 댓글 1개

ESP32 RC Cars

데모 비디오

  • 이 프로젝트는 ESP32 기반 원격 제어 카메라 시스템을 시연함
  • WebSockets를 통해 실시간 비디오 스트림을 전송하고 모터와 서보를 제어할 수 있음
  • Python 서버 애플리케이션이 WebSocket 통신을 관리하고 ESP32 장치를 제어할 수 있는 웹 인터페이스를 제공함

기능

  • ESP32-CAM에서 웹 서버로 실시간 비디오 스트리밍
  • WebSocket 명령을 통한 모터와 서보의 원격 제어
  • 모터와 서보를 기본 상태로 재설정하는 자동 타임아웃 기능
  • 서버에서 동적 다중 클라이언트 비디오 피드 캔버스 제공

하드웨어 요구 사항

  • ESP32-CAM (AI Thinker 모듈 또는 호환 보드)
  • 적절한 GPIO 핀에 연결된 모터와 서보
  • ESP32-CAM을 위한 안정적인 5V 전원 공급
  • 선택 사항: 추가 기능을 위한 SD 카드
  • 통신을 위한 Wi-Fi 네트워크

재료

  • 모든 키트는 aliexpress에서 구매 가능
  • 자동차 섀시, 전자 속도 제어기, 배터리 홀더, 18650 셀 또는 7.4v 배터리 팩, ESP32-CAM, 블루투스 게임패드(PS4 컨트롤러 사용)

소프트웨어 요구 사항

ESP32 코드
라이브러리
  • WiFi.h: Wi-Fi 연결
  • ArduinoWebsockets.h: WebSocket 통신
  • esp_camera.h: ESP32-CAM 카메라 제어
  • ServoControl.hEsc.h: 서보와 모터 제어
  • Arduino.h: 표준 Arduino 함수
Python 서버
종속성
  • 다음 Python 라이브러리 설치: aiohttp, opencv-python, numpy

설정

ESP32 펌웨어
  1. secrets.h 파일을 수정하여 Wi-Fi 자격 증명 및 WebSocket 서버 URL 포함
  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 서버
  • 여러 ESP32 클라이언트와의 WebSocket 통신 처리
  • 수신된 비디오 프레임을 처리하고 동적으로 그리드에 배열
  • 비디오 프레임 그리드를 웹 인터페이스로 스트리밍

문제 해결

연결 문제
  • secrets.h에서 Wi-Fi 자격 증명 확인
  • WebSocket 서버가 실행 중이고 접근 가능한지 확인
비디오 스트림 문제
  • ESP32-CAM에 적절한 전원 공급 확인
  • 카메라 초기화 설정 확인

라이선스

  • 이 프로젝트는 MIT 라이선스 하에 오픈 소스로 제공됨

기여

  • 애플리케이션 개선을 위한 이슈 제출이나 풀 리퀘스트 환영
Hacker News 의견
  • 12년 전, Arduino는 있었지만 ESP32는 없던 시절에 HTC Magic 폰을 사용해 카메라와 WiFi 송신기로 활용하고, Arduino와 연결하여 서보와 RGB LED를 제어하는 프로젝트를 진행했음. 연결이 안정적이지 않았지만 재미있었음

    • 프로젝트를 공유해줘서 고맙고, 차세대 마이크로컨트롤러로 프로젝트를 부활시키고 싶음
    • 프로젝트에 대한 피드백에 감사하며, 계속 진행하고 싶고 PR을 보고 싶음
    • 프로젝트를 좋아한다면, 원격 개발자를 찾는 사람에게 소개해주면 좋겠음. Ruby-on-Rails 개발자이지만 로봇 공학 작업도 고려 중임
  • RC 자동차 자동화에 관심이 있다면 재미있는 읽을거리임. 몇 년 전 자료이지만 오늘날에는 더 쉬운 방법이 있을 수 있음

  • ESP32 CAM을 구매하기 전에 외부 안테나가 있는 것을 고려하는 것이 좋음. Reddit에서 프레임 속도 문제에 대한 조언을 참고했음

  • 최근 Rust와 Steam Deck을 사용하여 비슷한 프로젝트를 진행했음

  • FPV의 큰 문제는 지연 시간이며, 이 프로젝트의 지연 시간이 궁금함

  • ESP32로 구동되는 RC 탱크를 PlayStation 4 컨트롤러로 Bluetooth를 통해 제어했음

    • 기본 소프트웨어는 약 20줄의 C 코드로 시작하며, Bluetooth 컨트롤러 라이브러리를 사용함
    • 두 개의 스틱으로 두 트랙을 저속으로 제어할 수 있지만, 고속에서는 다른 제어 방법이 필요함
    • 듀얼 쇼크 컨트롤러의 "트리거"를 사용하여 rpm 제한 직접 트랙 제어를 구현했음
    • 고속 운전 시 왼쪽 스틱은 스로틀, 오른쪽 스틱은 조향으로 사용하여 일반 RC 자동차처럼 운전할 수 있음
    • 사용한 3D 프린트 모델의 동영상을 공유함
  • AliExpress에서 좋은 2.5인치 RC 자동차는 30달러, 독립형 5.8 GHz 아날로그 카메라는 25달러임

    • 단순히 재미있는 프로젝트가 아닌 결과에 더 관심이 있는 사람들을 위한 정보임
  • 비슷한 프로젝트를 고려 중이며, 지연 시간에 대한 경험이 궁금함. 비디오 피드를 보고 원격으로 제어할 수 있는지 알고 싶음. 장애물 회피에 지연 시간이 문제일 것 같음

  • 자동으로 장애물을 피하는 고양이 장난감을 만들고 싶었음. 이 프로젝트가 기존에 선택한 것보다 더 나은 기반이 될 수 있을 것 같음