3 points par GN⁺ 2025-02-03 | 1 commentaires | Partager sur WhatsApp

ESP32 RC Cars

Vidéo de démonstration

  • Ce projet présente un système de caméra télécommandé basé sur ESP32
  • Il permet de transmettre un flux vidéo en temps réel via WebSockets et de contrôler le moteur et le servo
  • Une application serveur Python gère la communication WebSocket et fournit une interface web permettant de piloter l’appareil ESP32

Fonctionnalités

  • Streaming vidéo en temps réel depuis l’ESP32-CAM vers le serveur web
  • Contrôle à distance du moteur et du servo via des commandes WebSocket
  • Fonction de timeout automatique qui réinitialise le moteur et le servo à leur état par défaut
  • Mise à disposition côté serveur d’un canevas dynamique de flux vidéo multi-clients

Exigences matérielles

  • ESP32-CAM (module AI Thinker ou carte compatible)
  • Moteur et servo connectés aux broches GPIO appropriées
  • Alimentation 5V stable pour l’ESP32-CAM
  • Optionnel : carte SD pour des fonctionnalités supplémentaires
  • Réseau Wi‑Fi pour la communication

Matériel

  • Tous les kits peuvent être achetés sur aliexpress
  • Châssis de voiture, contrôleur électronique de vitesse, support de batterie, cellules 18650 ou pack batterie 7.4v, ESP32-CAM, manette de jeu Bluetooth (utilisation d’une manette PS4)

Exigences logicielles

Code ESP32
Bibliothèques
  • WiFi.h : connexion Wi‑Fi
  • ArduinoWebsockets.h : communication WebSocket
  • esp_camera.h : contrôle de la caméra ESP32-CAM
  • ServoControl.h et Esc.h : contrôle du servo et du moteur
  • Arduino.h : fonctions Arduino standard
Serveur Python
Dépendances
  • Installer les bibliothèques Python suivantes : aiohttp, opencv-python, numpy

Configuration

Firmware ESP32
  1. Modifier le fichier secrets.h pour inclure les identifiants Wi‑Fi et l’URL du serveur WebSocket
  2. Vérifier que les broches GPIO du module caméra, du moteur et du servo correspondent à la configuration matérielle
Serveur Python
  1. Placer le script serveur dans un répertoire avec le fichier index.html pour l’interface web
  2. Démarrer le serveur : python3 server.py

Utilisation

ESP32
  1. Téléverser le sketch fourni sur l’ESP32-CAM avec l’Arduino IDE ou une plateforme compatible
  2. Surveiller la sortie série pour vérifier la bonne connexion au Wi‑Fi et au serveur WebSocket
Serveur
  1. Exécuter le script serveur Python
  2. Ouvrir l’interface web dans le navigateur pour voir le flux vidéo en temps réel
  3. Envoyer des commandes de contrôle via la connexion WebSocket

Commandes WebSocket

  • MOTOR:<speed> : définit la vitesse du moteur (-255 à 255)
  • SERVO:<angle> : définit l’angle du servo (0 à 180)
  • CONTROL:<speed>:<angle> : contrôle simultanément la vitesse du moteur et l’angle du servo

Détails techniques

Initialisation de l’ESP32
  • Wi‑Fi : connexion au réseau Wi‑Fi spécifié
  • Caméra : configuration de l’ESP32-CAM avec les paramètres adaptés au streaming vidéo
  • WebSocket : établissement d’une connexion WebSocket avec le serveur
Gestion du timeout
  • Si aucune commande de contrôle n’est reçue pendant la période de timeout prédéfinie, la vitesse du moteur est réinitialisée à 0 et l’angle du servo à 90
Serveur Python
  • Gère la communication WebSocket avec plusieurs clients ESP32
  • Traite les images vidéo reçues et les organise dynamiquement en grille
  • Diffuse la grille des images vidéo vers l’interface web

Dépannage

Problèmes de connexion
  • Vérifier les identifiants Wi‑Fi dans secrets.h
  • Vérifier que le serveur WebSocket est en cours d’exécution et accessible
Problèmes de flux vidéo
  • Vérifier l’alimentation correcte de l’ESP32-CAM
  • Vérifier les paramètres d’initialisation de la caméra

Licence

  • Ce projet est proposé en open source sous licence MIT

Contribution

  • Les issues et pull requests pour améliorer l’application sont les bienvenues

1 commentaires

 
GN⁺ 2025-02-03
Commentaires Hacker News
  • Il y a 12 ans, à l’époque où Arduino existait mais pas encore l’ESP32, j’avais mené un projet utilisant un téléphone HTC Magic comme caméra et émetteur Wi‑Fi, relié à un Arduino pour piloter des servos et des LED RGB. La connexion n’était pas très stable, mais c’était amusant.

    • Merci d’avoir partagé le projet, j’aimerais le faire revivre avec des microcontrôleurs de nouvelle génération.
    • Merci pour les retours sur le projet, j’aimerais continuer et voir des PR.
    • Si vous aimez le projet, ce serait bien de me recommander à quelqu’un qui cherche un développeur à distance. Je suis développeur Ruby-on-Rails, mais j’envisage aussi de travailler en robotique.
  • Si l’automatisation des voitures RC vous intéresse, c’est une lecture amusante. Les informations datent de quelques années, mais il existe peut-être aujourd’hui des méthodes plus simples.

  • Avant d’acheter une ESP32 CAM, il vaut mieux envisager un modèle avec antenne externe. J’ai suivi des conseils sur Reddit concernant les problèmes de fréquence d’images.

  • J’ai récemment réalisé un projet similaire avec Rust et un Steam Deck.

  • Le gros problème du FPV, c’est la latence, et je me demande quelle est la latence de ce projet.

  • J’ai contrôlé un char RC propulsé par un ESP32 via Bluetooth avec une manette PlayStation 4.

    • Le logiciel de base commence avec environ 20 lignes de code C et utilise une bibliothèque de contrôleur Bluetooth.
    • Avec les deux sticks, on peut contrôler les deux chenilles à basse vitesse, mais à haute vitesse il faut une autre méthode de pilotage.
    • J’ai implémenté un contrôle direct des chenilles avec limitation du régime en utilisant les « gâchettes » de la manette DualShock.
    • À haute vitesse, le stick gauche sert à l’accélération et le stick droit à la direction, ce qui permet de conduire comme une voiture RC classique.
    • J’ai partagé une vidéo du modèle imprimé en 3D que j’ai utilisé.
  • Sur AliExpress, une bonne voiture RC de 2,5 pouces coûte 30 dollars, et une caméra analogique autonome en 5,8 GHz coûte 25 dollars.

    • C’est une information pour les personnes davantage intéressées par le résultat que par le fait qu’il s’agisse simplement d’un projet amusant.
  • J’envisage un projet similaire et je suis curieux d’avoir des retours sur la latence. J’aimerais savoir s’il est possible de piloter à distance en regardant le flux vidéo. J’ai l’impression que la latence poserait problème pour l’évitement d’obstacles.

  • Je voulais fabriquer un jouet pour chat qui évite automatiquement les obstacles. Ce projet pourrait constituer une meilleure base que celle que j’avais choisie auparavant.