- ESP32 RC Cars는 ESP32-CAM 기반 원격 조종 카메라 시스템으로, WebSocket을 통해 실시간 영상 스트리밍과 모터·서보 제어를 함께 구현함
- Python 서버 애플리케이션이 WebSocket 통신을 관리하고, 브라우저에서 ESP32 장치의 영상을 보고 제어할 수 있는 웹 인터페이스를 제공함
- 주요 기능은 ESP32-CAM의 라이브 비디오 스트리밍, WebSocket 명령 기반 모터·서보 제어, 제어 명령 미수신 시 기본 상태로 되돌리는 자동 타임아웃, 다중 클라이언트 영상 캔버스임
- 하드웨어는 AI Thinker 또는 호환 ESP32-CAM, GPIO에 연결된 모터·서보, 안정적인 5V 전원, Wi-Fi 네트워크가 필요하며 SD 카드는 선택 사항임
- 제어 명령은
MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle> 형식이며, 서버는 여러 ESP32 클라이언트의 영상 프레임을 격자로 배치해 웹 인터페이스로 스트리밍함
프로젝트 개요
- ESP32 RC Cars는 ESP32 기반 원격 조종 카메라 시스템 예제임
- ESP32-CAM이 실시간 영상을 WebSocket으로 전송하고, 모터와 서보는 WebSocket 명령으로 제어됨
- Python 서버 애플리케이션은 WebSocket 통신을 관리하고, 웹 인터페이스에서 ESP32 장치를 보고 제어할 수 있게 함
- 데모 영상: https://youtu.be/OubYFXmvA1E
주요 기능
- ESP32-CAM에서 웹 서버로 라이브 비디오 스트리밍을 전송함
- WebSocket 명령으로 모터와 서보를 원격 제어함
- 일정 시간 동안 제어 명령이 없으면 모터와 서보가 기본 상태로 자동 복귀함
- 서버는 여러 클라이언트의 영상 피드를 동적으로 캔버스에 배치함
하드웨어와 재료
- 필요한 하드웨어
- ESP32-CAM, AI Thinker 모듈 또는 호환 보드
- 적절한 GPIO 핀에 연결된 모터와 서보
- ESP32-CAM용 안정적인 5V 전원
- 통신용 Wi-Fi 네트워크
- 다른 기능에 필요한 경우 선택적으로 SD 카드
- 사용 재료는 AliExpress에서 구매한 키트 구성품임
- 차체 섀시
- 전자 속도 제어기
- 30A 버전을 사용했으며, BEC 출력이 5V 3A라 ESC와 서보를 구동하기에 충분한 전류로 보였음
- 배터리 홀더
- 2개의 18650 3.6V 셀 또는 7.4V 배터리 팩
- 둘 다 사용했으며, 셀은 다른 프로젝트에 더 유연하게 쓸 수 있음
- ESP32-CAM
- 외부 안테나가 있는 모델이 매우 중요하며, 170도 어안 카메라를 사용함
- Bluetooth Gamepad
배선 방식
- 차체 섀시에 포함된 서보의 3핀 JST 어댑터를 제거하고, ESP32에 연결할 수 있도록 4핀 JST 플러그로 옮김
- 서보의 양극·음극 리드를 이어 붙이고, 크림핑 도구로 3핀 암 JST 플러그를 추가함
- ESC의 흰색 제어선을 4핀 JST 플러그와 3핀 암 플러그에 연결함
소프트웨어 구성
- ESP32 코드에서 사용하는 라이브러리
WiFi.h: Wi-Fi 연결
ArduinoWebsockets.h: WebSocket 통신
esp_camera.h: ESP32-CAM 카메라 제어
ServoControl.h, Esc.h: 서보와 모터 제어
Arduino.h: 표준 Arduino 함수
- Python 서버 의존성은 다음 명령으로 설치함
sudo apt install python3-aiohttp python3-opencv python3-numpy
설정과 실행
- ESP32 펌웨어 설정
secrets.h에 Wi-Fi 자격 증명과 WebSocket 서버 URL을 설정함
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
- 카메라 GPIO 핀은 AI Thinker ESP32-CAM 보드용으로 미리 설정되어 있음
- 필요하면 모터와 서보 핀을 하드웨어 구성에 맞게 수정함
- Python 서버 설정
- 서버 스크립트를 웹 인터페이스용
index.html 파일과 같은 디렉터리에 둠
- 다음 명령으로 서버를 실행함
python3 app.py
사용법과 WebSocket 명령
- ESP32 사용 절차
- Arduino IDE 또는 호환 플랫폼으로 제공된 스케치를 ESP32-CAM에 업로드함
- 직렬 출력을 확인해 Wi-Fi와 WebSocket 서버 연결이 성공했는지 확인함
- 서버 사용 절차
- Python 서버 스크립트를 실행함
- 브라우저에서 웹 인터페이스를 열어 라이브 영상 스트림을 봄
- WebSocket 연결을 통해 제어 명령을 보냄
- 지원 명령
MOTOR:<speed>: 모터 속도 설정, 범위는 -255부터 255
SERVO:<angle>: 서보 각도 설정, 범위는 0부터 180
CONTROL:<speed>:<angle>: 모터 속도와 서보 각도를 동시에 제어함
동작 세부사항과 문제 해결
- ESP32 초기화 단계
- 지정된 Wi-Fi 네트워크에 연결함
- 영상 스트리밍에 맞게 ESP32-CAM을 설정함
- 서버와 WebSocket 연결을 수립함
- 타임아웃 처리는 일정 시간 동안 제어 명령이 없을 때 모터 속도를
0, 서보 각도를 90으로 되돌림
- Python 서버는 여러 ESP32 클라이언트와 WebSocket으로 통신함
- 서버는 들어오는 영상 프레임을 처리하고, 격자 형태로 동적으로 배치한 뒤 웹 인터페이스로 스트리밍함
- 연결 문제가 있으면
secrets.h의 Wi-Fi 자격 증명을 확인하고, WebSocket 서버가 실행 중이며 접근 가능한지 확인함
- 영상 스트림 문제가 있으면 ESP32-CAM 전원이 적절한지와 카메라 초기화 설정을 확인함
- 프로젝트는 MIT License로 공개됨