ESP32 RC Cars
Video de demostración
- Este proyecto demuestra un sistema de cámara de control remoto basado en ESP32
- Puede transmitir video en tiempo real por medio de WebSockets y controlar el motor y el servo
- Una aplicación de servidor en Python gestiona la comunicación por WebSocket y proporciona una interfaz web para controlar el dispositivo ESP32
Funciones
- Transmisión de video en tiempo real desde el ESP32-CAM hacia un servidor web
- Control remoto del motor y el servo mediante comandos WebSocket
- Función de tiempo de espera automática que restablece el motor y el servo a su estado predeterminado
- El servidor proporciona un lienzo dinámico de video feed para múltiples clientes
Requisitos de hardware
- ESP32-CAM (módulo AI Thinker o placa compatible)
- Motor y servo conectados a los pines GPIO adecuados
- Fuente de alimentación estable de 5V para el ESP32-CAM
- Opcional: tarjeta SD para funciones adicionales
- Red Wi-Fi para la comunicación
Materiales
- Todos los kits se pueden comprar en aliexpress
- Chasis del auto, controlador electrónico de velocidad, portabaterías, celdas 18650 o paquete de baterías de 7.4v, ESP32-CAM, gamepad Bluetooth (se usa un control de PS4)
Requisitos de software
Código ESP32
Bibliotecas
WiFi.h: conexión Wi-Fi
ArduinoWebsockets.h: comunicación WebSocket
esp_camera.h: control de la cámara ESP32-CAM
ServoControl.h y Esc.h: control del servo y del motor
Arduino.h: funciones estándar de Arduino
Servidor Python
Dependencias
- Instalar las siguientes bibliotecas de Python:
aiohttp, opencv-python, numpy
Configuración
Firmware del ESP32
- Modificar el archivo
secrets.h para incluir las credenciales de Wi-Fi y la URL del servidor WebSocket
- Verificar que los pines GPIO del módulo de cámara, el motor y el servo coincidan con la configuración de hardware
Servidor Python
- Colocar el script del servidor en un directorio junto con el archivo
index.html para la interfaz web
- Iniciar el servidor:
python3 server.py
Uso
ESP32
- Usar Arduino IDE o una plataforma compatible para cargar el sketch proporcionado en el ESP32-CAM
- Monitorear la salida serial para comprobar que se haya conectado correctamente al Wi-Fi y al servidor WebSocket
Servidor
- Ejecutar el script del servidor Python
- Abrir la interfaz web en el navegador para ver el stream de video en tiempo real
- Enviar comandos de control por medio de la conexión WebSocket
Comandos WebSocket
MOTOR:<speed>: establece la velocidad del motor (-255 a 255)
SERVO:<angle>: establece el ángulo del servo (0 a 180)
CONTROL:<speed>:<angle>: controla al mismo tiempo la velocidad del motor y el ángulo del servo
Detalles técnicos
Inicialización del ESP32
- Wi-Fi: conexión a la red Wi-Fi especificada
- Cámara: configuración del ESP32-CAM con los ajustes adecuados para transmisión de video
- WebSocket: establecimiento de una conexión WebSocket con el servidor
Manejo de timeout
- Si no se recibe un comando de control dentro del período de timeout predefinido, la velocidad del motor se restablece a
0 y el ángulo del servo a 90
Servidor Python
- Maneja la comunicación WebSocket con múltiples clientes ESP32
- Procesa los frames de video recibidos y los organiza dinámicamente en una cuadrícula
- Transmite la cuadrícula de frames de video a la interfaz web
Solución de problemas
Problemas de conexión
- Verificar las credenciales de Wi-Fi en
secrets.h
- Confirmar que el servidor WebSocket esté en ejecución y sea accesible
Problemas con el stream de video
- Verificar que el ESP32-CAM tenga una alimentación adecuada
- Revisar la configuración de inicialización de la cámara
Licencia
- Este proyecto se ofrece como código abierto bajo la licencia MIT
Contribuciones
- Se agradecen issues o pull requests para mejorar la aplicación
1 comentarios
Comentarios en Hacker News
Hace 12 años, en una época en la que existía Arduino pero no ESP32, hice un proyecto usando un teléfono HTC Magic como cámara y transmisor WiFi, conectándolo a Arduino para controlar un servo y un LED RGB. La conexión no era estable, pero fue divertido.
Si te interesa la automatización de autos RC, es una lectura entretenida. El material es de hace algunos años, pero hoy en día podría haber formas más fáciles.
Antes de comprar un ESP32 CAM, conviene considerar uno con antena externa. Tomé como referencia consejos de Reddit sobre problemas de frame rate.
Hace poco hice un proyecto parecido usando Rust y una Steam Deck.
El gran problema del FPV es la latencia, y me da curiosidad cuál es la latencia de este proyecto.
Controlé un tanque RC impulsado por ESP32 con un control de PlayStation 4 vía Bluetooth.
En AliExpress, un buen auto RC de 2.5 pulgadas cuesta 30 dólares, y una cámara analógica independiente de 5.8 GHz cuesta 25 dólares.
Estoy considerando un proyecto parecido y me interesa conocer experiencias sobre la latencia. Quiero saber si se puede controlar de forma remota mirando el video feed. Parece que la latencia sería un problema para evitar obstáculos.
Quería hacer un juguete para gato que evitara obstáculos automáticamente. Este proyecto podría ser una mejor base que la opción que había elegido antes.