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 }
- Réalisation du schéma électrique suivant :
Voir les détails...
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
- 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.
- Réalisation du schéma électrique suivant : Voir les détails...
- 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
- Fin du schéma électrique sous le logiciel KiCADVoir les détails ...
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