Skip to content

MrEarl/esp32_rc_cars

 
 

Repository files navigation

ESP32 RC Cars

Demo video

https://youtu.be/OubYFXmvA1E

This project demonstrates an ESP32-based remote-controlled camera system capable of transmitting live video streams over WebSockets and controlling motors and servos. A Python server application manages WebSocket communication and provides a web interface to view and control the ESP32 devices.

Features

  • Live video streaming from an ESP32-CAM to a web server.
  • Remote control of a motor and a servo via WebSocket commands.
  • Automatic timeout to reset motor and servo to default states.
  • Dynamic multi-client video feed canvas on the server.

Hardware Requirements

  • ESP32-CAM (AI Thinker module or compatible board).
  • Motor and servo connected to appropriate GPIO pins.
  • Stable 5V power supply for the ESP32-CAM.
  • Optional SD card (if required for other functionalities).
  • Wi-Fi network for communication.

Materials

I bought everything for this kit from aliexpress:


Wiring

I took the 3-pin jst adapter off the servo that came with the car chassis and moved them into a 4-pin jst plug to plug into the esp32. I then spliced the postive and negative leads on the servo and added a 3-pin female jst plug using a crimping tool. Finally, i connected the (white) esc control wire to the 4-pin jst plug and 3-pin female plug. It looks like this:


Software Requirements

ESP32 Code

Libraries

  • WiFi.h for Wi-Fi connectivity.
  • ArduinoWebsockets.h for WebSocket communication.
  • esp_camera.h for ESP32-CAM camera control.
  • ServoControl.h and Esc.h for controlling the servo and motor.
  • Arduino.h for standard Arduino functions.

Python Server

Dependencies

Install the following Python libraries:

pip3 install aiohttp opencv-python numpy

Configuration

ESP32 Firmware

  1. Modify the secrets.h file to include your Wi-Fi credentials and WebSocket server URL:
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
  1. Ensure the GPIO pins for the camera module, motor, and servo match your hardware setup:
  • Camera GPIO pins are pre-configured for the AI Thinker ESP32-CAM board.
  • Update motor and servo pins if necessary.

Python Server

  1. Place the server script in a directory with an index.html file for the web interface.
  2. Start the server:
python3 server.py

The server will be accessible on http://localhost:8080/.


Usage

ESP32

  1. Upload the provided sketch to your ESP32-CAM using the Arduino IDE or a compatible platform.
  2. Monitor the serial output to ensure successful connection to Wi-Fi and the WebSocket server.

Server

  1. Run the Python server script.
  2. Open the web interface in a browser to view the live video streams.
  3. Send control commands via the WebSocket connection.

WebSocket Commands

  • MOTOR:<speed>: Set motor speed (-255 to 255).
  • SERVO:<angle>: Set servo angle (0 to 180).
  • CONTROL:<speed>:<angle>: Control both motor speed and servo angle simultaneously.

Technical Details

ESP32 Initialization

  • Wi-Fi: Connects to the specified Wi-Fi network.
  • Camera: Configures the ESP32-CAM with the appropriate settings for video streaming.
  • WebSocket: Establishes a WebSocket connection with the server.

Timeout Handling

If no control commands are received within a predefined timeout period, the motor speed resets to 0, and the servo angle resets to 90.

Python Server

  • Handles WebSocket communication with multiple ESP32 clients.
  • Processes incoming video frames and dynamically arranges them in a grid.
  • Streams the grid of video frames to the web interface.

Troubleshooting

  • Connection Issues:

    • Verify Wi-Fi credentials in secrets.h.
    • Check that the WebSocket server is running and accessible.
  • Video Stream Issues:

    • Ensure proper power supply to the ESP32-CAM.
    • Verify camera initialization settings.

License

This project is open-source and available under the MIT License.


Contribution

Feel free to submit issues or pull requests to improve the application!

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 31.0%
  • Python 30.2%
  • C 17.9%
  • JavaScript 14.5%
  • HTML 4.2%
  • CSS 2.2%