3 pontos por GN⁺ 2025-02-03 | 1 comentários | Compartilhar no WhatsApp
  • ESP32 RC Cars é um sistema de câmera para carro de controle remoto baseado em ESP32-CAM que implementa streaming de vídeo em tempo real e controle de motor e servo via WebSocket
  • Um aplicativo de servidor em Python gerencia a comunicação WebSocket e fornece uma interface web para ver e controlar o dispositivo ESP32 pelo navegador
  • Os principais recursos incluem streaming de vídeo ao vivo da ESP32-CAM, controle de motor e servo com comandos baseados em WebSocket, timeout automático que retorna ao estado padrão quando não há comandos de controle, e canvas de vídeo com múltiplos clientes
  • O hardware necessário inclui uma AI Thinker ou ESP32-CAM compatível, motor e servo conectados aos GPIOs, fonte de 5V estável e rede Wi-Fi; cartão SD é opcional
  • Os comandos de controle usam os formatos MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle>, e o servidor organiza os frames de vídeo de vários clientes ESP32 em uma grade para streaming na interface web

Visão geral do projeto

  • ESP32 RC Cars é um exemplo de sistema de câmera para controle remoto baseado em ESP32
  • A ESP32-CAM transmite vídeo em tempo real via WebSocket, e o motor e o servo são controlados por comandos WebSocket
  • Um aplicativo de servidor em Python gerencia a comunicação WebSocket e permite ver e controlar o dispositivo ESP32 por uma interface web
  • Vídeo de demonstração: https://youtu.be/OubYFXmvA1E

Principais recursos

  • Transmite streaming de vídeo ao vivo da ESP32-CAM para o servidor web
  • Permite controle remoto de motor e servo por comandos WebSocket
  • Se não houver comandos de controle por um determinado tempo, o motor e o servo retornam automaticamente ao estado padrão
  • O servidor posiciona dinamicamente os feeds de vídeo de vários clientes em um canvas

Hardware e materiais

  • Hardware necessário
    • ESP32-CAM, módulo AI Thinker ou placa compatível
    • Motor e servo conectados aos pinos GPIO apropriados
    • Fonte de 5V estável para a ESP32-CAM
    • Rede Wi-Fi para comunicação
    • Cartão SD opcional, caso seja necessário para outros recursos
  • Os materiais usados fazem parte de um kit comprado no AliExpress
    • Chassi do carro
    • Controlador eletrônico de velocidade
      • Foi usada a versão de 30A, e a saída BEC de 5V 3A pareceu fornecer corrente suficiente para acionar o ESC e o servo
    • Suporte de bateria
    • 2 células 18650 de 3.6V ou pack de bateria de 7.4V
      • Ambos foram usados, e as células podem ser mais flexíveis para uso em outros projetos
    • ESP32-CAM
      • O modelo com antena externa é muito importante, e foi usada uma câmera olho de peixe de 170 graus
    • Gamepad Bluetooth
      • Foi usado um controle de PS4

Esquema de ligação

  • O adaptador JST de 3 pinos do servo incluído no chassi do carro foi removido e transferido para um plugue JST de 4 pinos para possibilitar a conexão ao ESP32
  • Os fios positivo e negativo do servo foram emendados, e um plugue JST fêmea de 3 pinos foi adicionado com uma ferramenta de crimpagem
  • O fio de controle branco do ESC foi conectado ao plugue JST de 4 pinos e ao plugue fêmea de 3 pinos

Configuração de software

  • Bibliotecas usadas no código ESP32
    • WiFi.h: conexão Wi-Fi
    • ArduinoWebsockets.h: comunicação WebSocket
    • esp_camera.h: controle da câmera ESP32-CAM
    • ServoControl.h, Esc.h: controle de servo e motor
    • Arduino.h: funções padrão do Arduino
  • As dependências do servidor Python são instaladas com o seguinte comando
sudo apt install python3-aiohttp python3-opencv python3-numpy

Configuração e execução

  • Configuração do firmware ESP32
    • Defina em secrets.h as credenciais de Wi-Fi e a URL do servidor WebSocket
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
  • Os pinos GPIO da câmera já estão pré-configurados para a placa AI Thinker ESP32-CAM
  • Se necessário, ajuste os pinos do motor e do servo de acordo com a sua configuração de hardware
  • Configuração do servidor Python
    • Coloque o script do servidor no mesmo diretório do arquivo index.html da interface web
    • Execute o servidor com o seguinte comando
python3 app.py

Uso e comandos WebSocket

  • Procedimento de uso da ESP32
    • Faça upload do sketch fornecido para a ESP32-CAM usando a Arduino IDE ou uma plataforma compatível
    • Verifique a saída serial para confirmar se a conexão com o Wi-Fi e com o servidor WebSocket foi bem-sucedida
  • Procedimento de uso do servidor
    • Execute o script do servidor Python
    • Abra a interface web no navegador para ver o streaming de vídeo ao vivo
    • Envie comandos de controle pela conexão WebSocket
  • Comandos suportados
    • MOTOR:<speed>: define a velocidade do motor, no intervalo de -255 a 255
    • SERVO:<angle>: define o ângulo do servo, no intervalo de 0 a 180
    • CONTROL:<speed>:<angle>: controla simultaneamente a velocidade do motor e o ângulo do servo

Detalhes de funcionamento e solução de problemas

  • Etapas de inicialização da ESP32
    • Conecta-se à rede Wi-Fi especificada
    • Configura a ESP32-CAM para streaming de vídeo
    • Estabelece a conexão WebSocket com o servidor
  • O tratamento de timeout redefine a velocidade do motor para 0 e o ângulo do servo para 90 quando não há comandos de controle por um período definido
  • O servidor Python se comunica com vários clientes ESP32 via WebSocket
  • O servidor processa os frames de vídeo recebidos, organiza-os dinamicamente em formato de grade e os transmite para a interface web
  • Se houver problemas de conexão, verifique as credenciais de Wi-Fi em secrets.h e confirme que o servidor WebSocket está em execução e acessível
  • Se houver problemas com o stream de vídeo, verifique se a alimentação da ESP32-CAM está adequada e revise as configurações de inicialização da câmera
  • O projeto é disponibilizado sob a Licença MIT

1 comentários

 
GN⁺ 2025-02-03
Comentários no Hacker News
  • Há 12 anos, quando já existia Arduino, mas ainda não havia ESP32, fiz algo parecido: https://newton-net-pl.translate.goog/2012/01/robot/?_x_tr_sl...
    Usei um celular HTC Magic antigo como câmera + transmissor Wi‑Fi, conectado a um Arduino pela porta serial e por um level shifter para controlar servos e LEDs RGB.
    A conexão não era superestável, mas foi bem divertido; talvez agora seja hora de ressuscitar o projeto com a próxima geração de microcontroladores.
  • Obrigado pelo feedback sobre o projeto; quero continuar tocando isso e adoraria receber PRs.
    Se você gostou do projeto, a maior ajuda seria me indicar a alguém que esteja procurando desenvolvedores remotos.
    Minha ocupação principal é como desenvolvedor Ruby on Rails, mas eu também consideraria trabalhos com robótica.
  • Antes de comprar uma ESP32 CAM, vale considerar um modelo com antena externa.
    Vale ler este post: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
    A taxa de quadros era bem ruim até eu aplicar algumas dicas.
    • Pela página de administração do roteador, assim que refiz a solda do resistor e conectei a antena, passou imediatamente de instáveis 1 Mbps para estáveis 20 Mbps.
      Ressoldar o resistor de 0 Ω foi quase uma aventura, mas de qualquer forma acertei o pino correto, e o resultado ficou assim: https://imgur.com/a/LJflZ80
    • Pela minha experiência com este projeto, uma antena externa foi praticamente indispensável.
      Adicionei ao README o link da antena que usei.
    • Você pode recomendar o modelo exato?
  • Legal. Construí um tanque RC de esteiras movido por ESP32 e o controlei via Bluetooth conectado a um controle de PlayStation 4.
    O software básico é fácil de começar, com umas 20 linhas de código C usando uma biblioteca de controle Bluetooth.
    Depois acrescentei funções para facilitar a pilotagem: controlar duas esteiras com dois sticks funciona bem em baixa velocidade, mas como usei dois motores de drone e ele chegava a quase 20 km/h, precisei de outro esquema de controle.
    No fim, fiz controle direto das esteiras, com limite de rotação, pelos gatilhos do DualShock; em alta velocidade, usei o stick esquerdo para cima/baixo como acelerador e o stick direito para esquerda/direita como direção, para dirigir como um carro RC comum.
    Este é um vídeo do mesmo modelo 3D impresso que usei como base; a velocidade aparece bem a partir de 00:50: https://www.youtube.com/watch?v=3Mv_tDY89Zw
    • Realmente impressionante.
      Não entendo muito de construção de RC; como normalmente se controla isso? O controle de PS4 se conecta diretamente ao ESP?
  • O grande problema do FPV, e o motivo de ele ter ficado preso por tanto tempo em tecnologia analógica, é a latência.
    Fico curioso para saber qual é a latência deste projeto.
    • Hoje em dia, FPV geralmente usa ExpressLRS[0], um protocolo aberto para o link de controle de quadricópteros FPV, e normalmente também usa ESP32.
      Já o vídeo de quadricópteros FPV é uma área separada. Alguns usam analógico porque, quando o sinal cai, ele degrada gradualmente em vez de cortar completamente e reconectar; outros usam comunicação baseada em 802.11, que na prática é bem competitiva.
      Por exemplo, os Walksnail Goggles usam 802.11 no link de vídeo e, embora não sejam muito abertos nem bem documentados, há pessoas fuçando por dentro, como nos trabalhos do Chris Rosser.
      A latência desse tipo de configuração parece ser baixa o bastante até para corridas rápidas e competitivas de quadricópteros.
      [0] https://www.expresslrs.org
    • Projetos relacionados: https://github.com/wooky/esp32-analog-video-over-wifi
      E também: https://github.com/gyrex/CrystalVideo
    • Não tenho um ponto de comparação, como experiência com drones FPV, mas na rede Wi‑Fi de casa a latência não foi um problema, mesmo com todos os outros dispositivos domésticos conectados.
      A taxa de quadros parece ser limitada principalmente pela velocidade com que o ESP32 consegue capturar imagens.
      Quando medi o FPS em um script Python, recebi cerca de 50 fps dos ESP32; recentemente comprei um roteador de viagem para testar fora de casa.
  • Estou pensando em fazer um projeto parecido, então tenho curiosidade sobre sua experiência com latência.
    Dá para pilotar remotamente olhando o feed de vídeo? Minha maior preocupação é que pareça lento demais para desviar de obstáculos na maior parte das velocidades.
  • Comprei o mesmo kit no ano passado e recentemente comprei também um controle de jogos ESP32 com uma telinha: https://github.com/01studio-lab/pyController
    Quando tiver tempo, quero juntar os dois para controlar o carro e ver o feed da câmera na tela.
  • Se o resultado final for mais importante do que a diversão de construir, hoje dá para comprar no AliExpress um carro RC de 2,5 polegadas decente por US$ 30 e uma câmera analógica 5,8 GHz autônoma por US$ 25.
    • Se por autônoma você quer dizer uma câmera tudo-em-um, as câmeras com VTX embutido em geral são ainda piores do que o analógico comum e ainda exigem óculos analógicos.
      Para quem não precisa de óculos de grau, ou usa lentes de contato, a combinação DJI O4 “lite” com os óculos N3 é uma escolha bem melhor.
  • Se você quer automatizar um carro RC, esta é uma leitura interessante.
    O artigo é de alguns anos atrás, então talvez hoje seja possível obter resultados parecidos de forma mais fácil ou melhor: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
  • Todo mundo conhece os quadricópteros FPV usados no campo de batalha, mas também há um interesse crescente em veículos terrestres.
    Eles são bem diferentes daquela mistura cinematográfica de cão-robô da Boston Dynamics com Terminator, mas são muito úteis em tarefas “chatas” e menos chamativas, como instalar minas, detonar minas ou levar pequenas quantidades de suprimentos a soldados escondidos em algum ponto da linha de frente.