ESP32 RC Cars
Vídeo de demonstração
- Este projeto demonstra um sistema de câmera com controle remoto baseado em ESP32
- Transmite stream de vídeo em tempo real via WebSockets e permite controlar o motor e o servo
- Um aplicativo de servidor em Python gerencia a comunicação por WebSocket e fornece uma interface web para controlar o dispositivo ESP32
Recursos
- Streaming de vídeo em tempo real do ESP32-CAM para o servidor web
- Controle remoto do motor e do servo por comandos WebSocket
- Função de timeout automático para redefinir motor e servo ao estado padrão
- Canvas dinâmico no servidor para feed de vídeo de múltiplos clientes
Requisitos de hardware
- ESP32-CAM (módulo AI Thinker ou placa compatível)
- Motor e servo conectados aos pinos GPIO apropriados
- Fonte de alimentação estável de 5V para o ESP32-CAM
- Opcional: cartão SD para recursos adicionais
- Rede Wi-Fi para comunicação
Materiais
- Todos os kits podem ser comprados no aliexpress
- Chassi do carro, controlador eletrônico de velocidade, suporte de bateria, células 18650 ou pack de bateria 7.4v, ESP32-CAM, gamepad Bluetooth (usando controle de PS4)
Requisitos de software
Código ESP32
Bibliotecas
WiFi.h: conexão Wi-Fi
ArduinoWebsockets.h: comunicação WebSocket
esp_camera.h: controle da câmera do ESP32-CAM
ServoControl.h e Esc.h: controle do servo e do motor
Arduino.h: funções padrão do Arduino
Servidor Python
Dependências
- Instale as seguintes bibliotecas Python:
aiohttp, opencv-python, numpy
Configuração
Firmware do ESP32
- Edite o arquivo
secrets.h para incluir as credenciais de Wi-Fi e a URL do servidor WebSocket
- Verifique se os pinos GPIO do módulo de câmera, do motor e do servo correspondem à configuração do hardware
Servidor Python
- Coloque o script do servidor no diretório junto com o arquivo
index.html para a interface web
- Inicie o servidor:
python3 server.py
Como usar
ESP32
- Use a Arduino IDE ou uma plataforma compatível para enviar o sketch fornecido ao ESP32-CAM
- Monitore a saída serial para confirmar que a conexão com o Wi-Fi e com o servidor WebSocket foi estabelecida com sucesso
Servidor
- Execute o script do servidor Python
- Abra a interface web no navegador para ver o stream de vídeo em tempo real
- Envie comandos de controle pela conexão WebSocket
Comandos WebSocket
MOTOR:<speed>: define a velocidade do motor (-255 a 255)
SERVO:<angle>: define o ângulo do servo (0 a 180)
CONTROL:<speed>:<angle>: controla ao mesmo tempo a velocidade do motor e o ângulo do servo
Detalhes técnicos
Inicialização do ESP32
- Wi-Fi: conecta à rede Wi-Fi especificada
- Câmera: configura o ESP32-CAM com os ajustes adequados para streaming de vídeo
- WebSocket: estabelece a conexão WebSocket com o servidor
Tratamento de timeout
- Se nenhum comando de controle for recebido dentro do período de timeout predefinido, a velocidade do motor é redefinida para
0 e o ângulo do servo para 90
Servidor Python
- Processa a comunicação WebSocket com vários clientes ESP32
- Processa os frames de vídeo recebidos e os organiza dinamicamente em uma grade
- Faz o streaming da grade de frames de vídeo para a interface web
Solução de problemas
Problemas de conexão
- Verifique as credenciais de Wi-Fi em
secrets.h
- Confirme que o servidor WebSocket está em execução e acessível
Problemas com o stream de vídeo
- Verifique se o ESP32-CAM está recebendo alimentação adequada
- Confira as configurações de inicialização da câmera
Licença
- Este projeto é oferecido como open source sob a licença MIT
Contribuição
- Issues e pull requests para melhorar o aplicativo são bem-vindos
1 comentários
Comentários do Hacker News
Há 12 anos, numa época em que existia Arduino mas não ESP32, usei um celular HTC Magic como câmera e transmissor Wi‑Fi, conectando-o ao Arduino para controlar servos e LEDs RGB. A conexão não era estável, mas foi divertido.
Se você tem interesse em automatização de carros RC, é uma leitura divertida. O material é de alguns anos atrás, mas hoje em dia pode haver maneiras mais fáceis.
Antes de comprar um ESP32 CAM, vale considerar um com antena externa. Vi conselhos no Reddit sobre problemas de taxa de quadros.
Recentemente fiz um projeto parecido usando Rust e um Steam Deck.
O grande problema do FPV é a latência, e fiquei curioso sobre a latência deste projeto.
Controlei um tanque RC movido por ESP32 com um controle de PlayStation 4 via Bluetooth.
No AliExpress, um bom carro RC de 2,5 polegadas custa US$ 30, e uma câmera analógica 5.8 GHz independente custa US$ 25.
Estou pensando em um projeto parecido e queria saber como foi a experiência com a latência. Quero saber se dá para controlar remotamente olhando o feed de vídeo. Parece que a latência seria um problema para desviar de obstáculos.
Queria fazer um brinquedo para gato que evitasse obstáculos automaticamente. Este projeto talvez seja uma base melhor do que a que eu havia escolhido antes.