Arduino UNO R4 WiFi Bluetooth Joystick - Contrôle Directionnel 2D via BLE Tutoriel

Aperçu

L'exemple Bluetooth Joystick fournit un contrôle joystick 2D interactif accessible via l'application DIYables Bluetooth STEM. Conçu pour Arduino UNO R4 WiFi utilisant BLE (Bluetooth Low Energy) pour recevoir les coordonnées X/Y en temps réel (-100 à +100) pour le contrôle directionnel. Parfait pour la navigation de robots, servos pan-tilt, contrôle de moteurs et contrôleurs de jeux.

Remarque : L'Arduino UNO R4 WiFi ne supporte que BLE (Bluetooth Low Energy). Il ne supporte pas le Bluetooth classique. L'application DIYables Bluetooth supporte à la fois BLE et Bluetooth classique sur Android, et BLE sur iOS. Puisque cette carte utilise BLE, l'application fonctionne sur Android et iOS.

Arduino UNO R4 WiFi Bluetooth Joystick - Contrôle Directionnel 2D via BLE Tutoriel

Fonctionnalités

  • Contrôle 2D : Axes X et Y avec plage -100 à +100
  • Sensibilité Configurable : Seuil de mouvement minimum pour déclencher les mises à jour
  • Option Auto-Retour : Le joystick peut se recentrer automatiquement quand relâché
  • Valeurs Temps Réel : Mises à jour continues de position pendant le glissement
  • Fonctionne sur Android & iOS : BLE est supporté sur les deux plateformes
  • Pas d'Appairage Requis : BLE se connecte automatiquement sans appairage manuel
  • Faible Consommation : BLE consomme moins d'énergie que le Bluetooth classique

Code Arduino UNO R4 WiFi

Étapes Rapides

Suivez ces instructions étape par étape :

  • Si c'est votre première fois avec l'Arduino UNO R4 WiFi, consultez le Arduino UNO R4 - Installation du logiciel..
  • Connectez la carte Arduino UNO R4 WiFi à votre ordinateur avec un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino UNO R4 WiFi et le port COM approprié.
  • Naviguez vers l'icône Libraries dans la barre de gauche de l'IDE Arduino.
  • Recherchez "DIYables Bluetooth", puis trouvez la bibliothèque DIYables Bluetooth par DIYables
  • Cliquez sur le bouton Install pour installer la bibliothèque.
Arduino UNO R4 bibliothèque DIYables Bluetooth
  • Il vous sera demandé d'installer d'autres dépendances de bibliothèque
  • Cliquez sur le bouton Install All pour installer toutes les dépendances de bibliothèque.
Arduino UNO R4 dépendance DIYables Bluetooth

Code BLE

  • Dans l'IDE Arduino, allez à File Examples DIYables Bluetooth ArduinoBLE_Joystick exemple, ou copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Arduino
/* * DIYables Bluetooth Library - Bluetooth Joystick Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Joystick feature: * - Interactive joystick control via Bluetooth * - Real-time X/Y coordinate values (-100 to +100) * - Control pins based on joystick position * * Compatible Boards: * - Arduino UNO R4 WiFi * - Arduino Nano 33 BLE / BLE Sense * - Arduino Nano 33 IoT * - Arduino MKR WiFi 1010 * - Arduino Nano RP2040 Connect * - Any board supporting the ArduinoBLE library * * Setup: * 1. Upload the sketch to your Arduino * 2. Open Serial Monitor to see connection status * 3. Use DIYables Bluetooth App to connect and control the joystick * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothJoystick.h> #include <platforms/DIYables_ArduinoBLE.h> // BLE Configuration const char* DEVICE_NAME = "Arduino_Joystick"; const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214"; const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214"; const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214"; // Create Bluetooth instances DIYables_ArduinoBLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Joystick app instance // Configure with autoReturn=false and sensitivity=5 (minimum 5% change to trigger updates) DIYables_BluetoothJoystick bluetoothJoystick(false, 5); // Variables to store current joystick values int currentJoystickX = 0; int currentJoystickY = 0; void setup() { Serial.begin(9600); while (!Serial); Serial.println("DIYables Bluetooth - Joystick Example"); // TODO: initialize your hardware pins here // Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin(); // Add joystick app to server bluetoothServer.addApp(&bluetoothJoystick); // Set up connection event callbacks bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); // Set up joystick callback for position changes bluetoothJoystick.onJoystickValue([](int x, int y) { // Store the received values currentJoystickX = x; currentJoystickY = y; // Print joystick position values (-100 to +100) Serial.print("Joystick - X: "); Serial.print(x); Serial.print(", Y: "); Serial.println(y); // TODO: Add your control logic here based on joystick position // Examples: // - Control motors: if (x > 50) { /* move right */ } // - Control servos: servo.write(map(y, -100, 100, 0, 180)); // - Control LEDs: analogWrite(LED_PIN, map(abs(x), 0, 100, 0, 255)); // - Send commands to other devices via Serial, I2C, SPI, etc. }); // Optional: Handle requests for current joystick values (when app loads) bluetoothJoystick.onGetConfig([]() { // Send the stored joystick values back to the app bluetoothJoystick.send(currentJoystickX, currentJoystickY); Serial.print("App requested values - Sent: X="); Serial.print(currentJoystickX); Serial.print(", Y="); Serial.println(currentJoystickY); }); // You can change configuration at runtime: // bluetoothJoystick.setAutoReturn(false); // Disable auto-return // bluetoothJoystick.setSensitivity(10.0); // Only send updates when joystick moves >10% (less sensitive) Serial.println("Waiting for Bluetooth connection..."); } void loop() { // Handle Bluetooth server communications bluetoothServer.loop(); // TODO: Add your main application code here delay(10); }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code vers Arduino UNO R4 WiFi
  • Ouvrez le Moniteur Série
  • Vérifiez le résultat sur le Moniteur Série. Cela ressemble à ceci :
COM6
Send
DIYables Bluetooth - Joystick Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Application Mobile

  • Installez l'application DIYables Bluetooth sur votre smartphone : Android | iOS

Remarque : L'application DIYables Bluetooth supporte à la fois BLE et Bluetooth classique sur Android, et BLE sur iOS. Puisque l'Arduino UNO R4 WiFi utilise BLE, l'application fonctionne sur Android et iOS. Aucun appairage manuel n'est nécessaire pour BLE — scannez et connectez simplement.

  • Ouvrez l'application DIYables Bluetooth
  • Lors de la première ouverture de l'application, elle demandera des permissions. Veuillez accorder les suivantes :
    • Permission Appareils à Proximité (Android 12+) / Permission Bluetooth (iOS) - requise pour scanner et se connecter aux appareils Bluetooth
    • Permission Localisation (Android 11 et antérieur seulement) - requise par les anciennes versions Android pour scanner les appareils BLE
  • Assurez-vous que le Bluetooth est activé sur votre téléphone
  • Sur l'écran d'accueil, appuyez sur le bouton Connect. L'application scannera les appareils BLE.
DIYables Bluetooth App - Écran d'Accueil avec Bouton Scan
  • Trouvez et appuyez sur "Arduino_Joystick" dans les résultats du scan pour vous connecter.
  • Une fois connecté, l'application retourne automatiquement à l'écran d'accueil. Sélectionnez l'application Joystick dans le menu des applications.
DIYables Bluetooth App - Écran d'Accueil avec Application Joystick

Remarque : Vous pouvez appuyer sur l'icône de paramètres sur l'écran d'accueil pour cacher/afficher les applications sur l'écran d'accueil. Pour plus de détails, consultez le Manuel Utilisateur de l'Application DIYables Bluetooth.

  • Faites glisser le joystick dans n'importe quelle direction
DIYables Bluetooth App - Écran Joystick

Maintenant regardez le Moniteur Série dans l'IDE Arduino. Vous verrez :

COM6
Send
Bluetooth connected! Joystick - X: 50, Y: 0 Joystick - X: 100, Y: 50 Joystick - X: 0, Y: -75 Joystick - X: 0, Y: 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Personnalisation Créative - Adaptez le Code à Votre Projet

Gérer les Valeurs du Joystick

bluetoothJoystick.onJoystickValue([](int x, int y) { currentJoystickX = x; currentJoystickY = y; Serial.print("Joystick - X: "); Serial.print(x); Serial.print(", Y: "); Serial.println(y); // TODO: Ajoutez votre logique de contrôle ici });

Configurer les Paramètres du Joystick

// Constructeur: DIYables_BluetoothJoystick(autoReturn, sensitivity) DIYables_BluetoothJoystick bluetoothJoystick(false, 5); // Changer les paramètres en cours d'exécution bluetoothJoystick.setAutoReturn(true); // Auto-centrage quand relâché bluetoothJoystick.setSensitivity(10.0); // Mise à jour seulement si mouvement >10%

Gérer la Demande de Configuration

bluetoothJoystick.onGetConfig([]() { bluetoothJoystick.send(currentJoystickX, currentJoystickY); });

Exemples de Programmation

Robot à Conduite Différentielle

const int LEFT_MOTOR_PIN = 9; const int RIGHT_MOTOR_PIN = 10; const int LEFT_DIR_PIN = 7; const int RIGHT_DIR_PIN = 8; bluetoothJoystick.onJoystickValue([](int x, int y) { // Conduite différentielle: mélanger X et Y int leftSpeed = constrain(y + x, -100, 100); int rightSpeed = constrain(y - x, -100, 100); // Définir la direction digitalWrite(LEFT_DIR_PIN, leftSpeed >= 0 ? HIGH : LOW); digitalWrite(RIGHT_DIR_PIN, rightSpeed >= 0 ? HIGH : LOW); // Définir la vitesse (PWM) analogWrite(LEFT_MOTOR_PIN, map(abs(leftSpeed), 0, 100, 0, 255)); analogWrite(RIGHT_MOTOR_PIN, map(abs(rightSpeed), 0, 100, 0, 255)); });

Servo Pan-Tilt

#include <Servo.h> Servo panServo, tiltServo; void setup() { panServo.attach(9); tiltServo.attach(10); bluetoothJoystick.onJoystickValue([](int x, int y) { int panAngle = map(x, -100, 100, 0, 180); int tiltAngle = map(y, -100, 100, 0, 180); panServo.write(panAngle); tiltServo.write(tiltAngle); }); }

Direction avec Zone Morte

const int DEAD_ZONE = 15; bluetoothJoystick.onJoystickValue([](int x, int y) { if (abs(x) < DEAD_ZONE && abs(y) < DEAD_ZONE) { Serial.println("ARRÊTÉ"); return; } if (abs(y) > abs(x)) { Serial.println(y > 0 ? "AVANT" : "ARRIÈRE"); } else { Serial.println(x > 0 ? "DROITE" : "GAUCHE"); } });

Dépannage

Problèmes Courants

1. Impossible de trouver l'appareil dans l'application

  • Assurez-vous que l'Arduino UNO R4 WiFi est alimenté et le sketch téléversé
  • Vérifiez que le Bluetooth de votre téléphone est activé
  • Sur Android 11 et antérieur, activez aussi les services de localisation

2. Le joystick ne répond pas

  • Vérifiez le statut de connexion Bluetooth dans l'application
  • Vérifiez que le callback onJoystickValue est configuré correctement
  • Vérifiez le Moniteur Série pour les messages de connexion

3. Le mouvement semble lent

  • Réduisez la valeur de sensibilité pour des mises à jour plus fréquentes
  • Assurez-vous que bluetoothServer.loop() est appelé sans longs délais

4. Les valeurs sautent ou sont incohérentes

  • Ajoutez un filtre de zone morte pour les petits mouvements
  • Vérifiez le paramètre de sensibilité

5. La connexion se coupe fréquemment

  • Rapprochez-vous de l'Arduino (réduire la distance)
  • Assurez-vous d'une alimentation USB stable

6. Le téléversement échoue ou la carte n'est pas reconnue

  • Installez la dernière version du package de carte Arduino UNO R4 via le Gestionnaire de Cartes
  • Essayez un autre câble USB ou port

Idées de Projets

  • Contrôleur de robot sans fil
  • Support pan-tilt pour caméra
  • Contrôle 2-axes de bras robotique
  • Contrôleur de position pour matrice LED
  • Contrôleur de jeu pour jeux Arduino

Prochaines Étapes

Après avoir maîtrisé l'exemple Bluetooth Joystick, essayez :

  1. Bluetooth Slider - Pour le contrôle de valeur linéaire
  2. Bluetooth Rotator - Pour le contrôle angulaire
  3. Bluetooth Monitor - Pour le retour de statut
  4. Applications Bluetooth Multiples - Combiner joystick avec d'autres contrôles

Support

Pour une aide supplémentaire :

  • Consultez la documentation de référence API
  • Forums de la communauté Arduino

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !