Projet

Général

Profil

2023-2024 S2 Groupe 2

Manette de jeu vidéo ESP 32

Cheminement du projet

Jour 1 :

  • Recherche des librairies nécessaire pour crée une manette à l'aide d'un ESP32
  • Recherche de projet déjà existant utilisant la librairie BLE Gamepad
  • Création d'un projet sous VS Code en utilisant l'extension Platform IO pour pouvoir programmer l'ESP32
    • Installation du driver CP210x Windows pour permettre de communiquer avec l'ESP32 à partir d'un ordinateur
    • Intégration des librairies BLE Gamepad et Nimble dans PlatformIO

Jour 2 :

  • Apprentissage et compréhension de la librairie BLE Gamepad à l'aide de cette exemple
    Réalisation d'un circuit électronique avec l'ESP32 pour permettre de simuler l'appuie du bouton RT avec un bouton poussoir avec le code suivant :
    • Réalisation du schéma électrique suivant : Voir les détails...
      if (digitalRead(RT) == 1) { //Permet de vérifier si le bouton est pressé
            Serial.println(F("Right Trigger")); // Affiche dans la console que le bouton "Right Trigger" est pressé
            bleGamepad.press(BUTTON_8); // Renvoie que le bouton 8 de la manette est pressé, c'est à dire le bouton RT. 
            bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
            bleGamepad.release(BUTTON_8); // Renvoie que le bouton 8 de la manette n'est pas pressé 
            bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
        }
      

Nous avons pu vérifier si le programme fonctionnait à l'aide du site hardwaretester.com qui permet de visualiser les différentes actions réalisées par la manette.

Jour 3 :

  • Recherche pour faire briller une LED lorsque la manette est connecté en Bluetooth et de changer l'intensité lumineuse de celle-ci par rapport au pourcentage de batterie restant.
    • Malheureusement, le changement de l'intensité lumineuse n'a pas abouti car on s'est rendu compte que nous n'allons pas intégrée de batteries dans la manette de jeu. La manette va donc seulement être alimenté lorsque nous la brancherons en USB.
    • Réalisation du schéma électrique suivant : Voir les détails...
  • Pour pouvoir faire briller la LED lorsque la manette est connecté en Bluetooth, nous avons réalisés le programme suivant :
    if (bleGamepad.isConnected()) { // Vérifie si la manette est connectée
        digitalWrite(LED,1); // Allume la LED 
      }else{ 
        digitalWrite(LED,0); // Eteint la LED
      }
    

    Nous avons put vérifier que ce programme fonctionne correctement.
  • Recherche comment faire marcher le bouton Start et le bouton Home de la manette en appuyant sur des boutons poussoirs
    • Réalisation du schéma électrique suivant : Voir les détails...
    • Réalisation du programme suivant pour envoyé l'information que le bouton Home et bouton Start est pressé :
      if (digitalRead(Start) == 1) // Vérifie si le bouton "Start" est pressé
        {
        Serial.println(F("Start press")); // Affiche dans la console que le bouton "Start" est pressé  
        bleGamepad.pressStart(); // Renvoie que le bouton "Start" de la manette est pressé
        bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
        bleGamepad.releaseStart(); // Renvoie que le bouton "Start" de la manette n'est pas pressé
        bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
        }
        if (digitalRead(Home) == 1) // Vérifie si le bouton "Home" est pressé
        {
        Serial.println(F("Home pressed")); // Affiche dans la console que le bouton "Home" est pressé  
        bleGamepad.pressHome(); // Renvoie que le bouton "Home" de la manette est pressé
        bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
        bleGamepad.releaseHome(); // Renvoie que le bouton "Home" de la manette n'est pas pressé
        bleGamepad.sendReport(); // Envoie l'information des nouveaux états des composants 
        }
      

Jour 4 :

  • Nous avons décider de réaliser un embout de joysticks
    • Après des recherche nous avons trouver un embout qui nous convenait.

Jour 5 :

  • Nous avons chercher a tester deux joysticks acheter sur Aliexpress.
    • Pour ce faire nous avons du souder des fils mâle - femelle au joystick car il n’était pas compatible a une breadboard Voir les détails ...
    • Nous avons réaliser le programme suivant afin de tester une première fois les joysticks seul
      int value1 = map(analogRead(RH), 0, 4095, 32737, -32737);//Affecte la valeur du potentiomètre horizontale la variable value1
      int value2 = map(analogRead(RV), 0, 4095, 32737, -32737);//Affecte la valeur du potentiomètre verticale la variable value2
      bleGamepad.setLeftThumb(value1, value2);//Convertit les deux potentiomètre en un valeur
      bleGamepad.sendReport();//Envoie l'information des nouveaux états des composants
      

Jour 6 :

  • Nous avons commencé la conception du schéma électronique sur KiCad
    • Nous avons commencé par chercher le modèle et le symbole de l' ESP 32
  • Nous avons aussi commencer la rédaction du wiki

Jour 7 :

  • Avancement du schéma électrique sous KiCad
  • Réalisation du programme complet
  • Recherche de la datasheet de l'ESP32 et de son modèle sous KiCad
  • Impression du top joystick
    • Nombres de plastiques utilisés : 1.46m

Jour 8 :

  • Réalisation d'un prototypage avec une breadboard, un ESP32 et un bouton comme ci-dessous pour vérifier si le programme fonctionne.
  • Changement du programme des boucles if :
    if (digitalRead(Btn_A) == 1) {
          Serial.println("Bouton B presse");
          bleGamepad.press(BUTTON_1);
          bleGamepad.sendReport();
          delay(button_delay);
          bleGamepad.release(BUTTON_1);
          bleGamepad.sendReport();
    

    Modifier en :
    if (digitalRead(Btn_A) == 0)
      {
        Serial.println("Bouton A presse");
        bleGamepad.press(BUTTON_1);
        bleGamepad.sendReport();
      }else{
        bleGamepad.release(BUTTON_1);
        bleGamepad.sendReport();
      }
    
  • Grâce au site onlinemictest.com, nous avons constaté que certaines broches de l'ESP32 ne fonctionnaient pas avec le bouton, malgré la vérification du schéma électrique et que la structure du programme est identique pour chaque broche

Jour 9 :

  • Décider de changé d'ESP32 pour trouver l'origine du problème
  • Lors du téléversement du programme, nous avons reçu l'erreur suivante :
    A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode.
    

    Pour régler cet erreur, il fallait pressé le bouton "BOOT" lors du téléversement
  • Après avoir changé d'ESP, il a fallu changé les INPUT en INPUT_PULLUP dans le programme pour chaque bouton.
  • Mettre en logique négative pour la programmation des boutons comme ci-dessous :
    if (digitalRead(Btn_X) == 0)
      {
        Serial.println("Bouton X presse");
        bleGamepad.press(BUTTON_3);
        bleGamepad.sendReport();
      }else{
        bleGamepad.release(BUTTON_3);
        bleGamepad.sendReport();
      }
    
  • Réalisation du tableau suivant montrant quelle bouton sur la librairie signifie quelle bouton sur la manette
    Bouton librairie Gamepad Bouton Manette Xbox
    1 A
    2 B
    3 X
    4 Y
    5 ?
    6 RB
    7 LT
    8 RT
    9 Select
    10 Start
    11 Bouton Joystick gauche
    12 Bouton Joystick droit

Réalisation du programme complet "ESP32_Manette" commenté sous PlatformIO pour le fonctionnement de la manette. Capacité de l'installer à partir de ce lien (incapacité de mettre tout le dossier sur le wiki)

Rédaction du journal de bord et recherche pour l'intégration de fichier et image de façon esthétique

Suite du projet à réaliser

Démarche restante

Malheureusement, nous n'avons pas eu le temps de terminer le projet. Cependant, il ne reste plus beaucoup de tâches à accomplir :

  • Concevoir le modèle 3D de la manette
  • Fabriquer (ou commander) la carte électronique
  • Souder les composants
  • Assembler l'ensemble
  • Effectuer les vérifications

Ajouts possibles

  • Activer une macro à partir d'un bouton poussoir

Bibliographie

ESP32 BLE Gamepad (Librairie principal)

Github : https://github.com/lemmingDev/ESP32-BLE-Gamepad
Librairie : https://github.com/lemmingDev/ESP32-BLE-Gamepad/releases
Licence : https://github.com/lemmingDev/ESP32-BLE-Gamepad/blob/master/license.txt
Nimble : https://github.com/h2zero/NimBLE-Arduino

BLE Game Controller (Exemple)

Github : https://github.com/palsayantan/BLE-Game-Controller

ESP 32

Github : https://github.com/espressif/arduino-esp32#installation-instructions

PCB

pcbway : https://www.pcbway.com/project/shareproject/ESP32_BLE_GamePad.html

Site testeur de la manette

hardwaretester : https://hardwaretester.com/gamepad
onlinemictest : https://www.onlinemictest.com/fr/controller-tester/

Datasheet ESP 32 DEVKITV1

circuitstate : https://www.circuitstate.com/pinouts/doit-esp32-devkit-v1-wifi-development-board-pinout-diagram-and-reference/

Modèle 3D ESP32 DEVKIT V1

Github : https://github.com/davidkleymann/doit-esp32-devkit-kicad