ESP32 - joystick - servomoteur

Ce guide montrera comment contrôler deux servomoteurs ou un kit pan-tilt en utilisant un ESP32 et un joystick avec MicroPython.

Un joystick contient deux composants de commande, appelés potentiomètres, disposés en motif croisé, désignés par les axes X et Y. Ces potentiomètres génèrent des signaux, les valeurs X et Y, qui proviennent des broches VRX et VRY du joystick. Ces signaux servent à piloter deux servomoteurs : la valeur X commande le servomoteur n°1, tandis que la valeur Y commande le servomoteur n°2. Lorsqu'ils sont utilisés avec un kit pan-tilt, les deux servomoteurs fonctionnent ensemble pour se déplacer dans les trois dimensions.

L'application peut être utilisée de deux façons :

ESP32 MicroPython Joystick Servomoteur

Préparation du matériel

1×Module de développement ESP32 ESP-WROOM-32
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Joystick
2×Servo-moteur
2×Optionnel: Kit pan-tilt avec servo-moteur
1×Fils de connexion
1×Recommandé: Carte d'extension à bornier à vis pour ESP32
1×Recommandé: Breakout Expansion Board for ESP32
1×Recommandé: Répartiteur d'alimentation pour ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Démarrage DIYables ESP32 (ESP32 inclus)
1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du joystick et du servomoteur

Si vous débutez avec le joystick, le servomoteur ou la programmation MicroPython pour l'ESP32, je vous recommande de consulter ces tutoriels :

Ces tutoriels vous donneront une compréhension complète des brochages du joystick et du moteur servo, de la manière de connecter ces composants à l'ESP32 et de la manière de contrôler efficacement leur comportement à l'aide du code MicroPython.

Diagramme de câblage

  • Comment connecter l'ESP32 avec un joystick et un servomoteur en utilisant breadboard
Schéma de câblage ESP32 MicroPython pour joystick et servomoteur

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Comment connecter l'ESP32 à un joystick et à un servomoteur

Code MicroPython ESP32

Code MicroPython ESP32 - Les servomoteurs tournent en fonction du mouvement du pouce du joystick.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32-micropython/esp32-micropython-joystick-servo-motor */ from DIYables_MicroPython_Joystick import Joystick from DIYables_MicroPython_Servo import Servo from machine import Pin, ADC import time JOYSTICK_X_PIN = 36 # The ESP32 pin GPIO36 (ADC0) connected to VRX pin of joystick JOYSTICK_Y_PIN = 39 # The ESP32 pin GPIO39 (ADC3) connected to VRY pin of joystick BUTTON_PIN = 23 # The ESP32 pin GPIO23 connected to SW pin of joystick SERVO_X_PIN = 13 # The ESP32 pin GPIO13 connected to Servo motor 1 SERVO_Y_PIN = 25 # The ESP32 pin GPIO25 connected to Servo motor 2 adc_vrx = ADC(Pin(JOYSTICK_X_PIN)) adc_vry = ADC(Pin(JOYSTICK_Y_PIN)) # Set the ADC width (resolution) to 12 bits adc_vrx.width(ADC.WIDTH_12BIT) adc_vry.width(ADC.WIDTH_12BIT) # Set the attenuation to 11 dB, allowing input range up to ~3.3V adc_vrx.atten(ADC.ATTN_11DB) adc_vry.atten(ADC.ATTN_11DB) joystick = Joystick(pin_x=JOYSTICK_X_PIN, pin_y=JOYSTICK_Y_PIN, pin_button=BUTTON_PIN) # Initialize the two servos xServo = Servo(SERVO_X_PIN) # Use the constant for the X servo pin yServo = Servo(SERVO_Y_PIN) # Use the constant for the Y servo pin # Function to map the joystick value to servo angle def map_value(value, in_min, in_max, out_min, out_max): return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min) # Main loop while True: joystick.loop() # Must be called frequently to process joystick data # Read the X and Y axis values (12-bit resolution from the library) x_value = joystick.read_x() y_value = joystick.read_y() # Map the 12-bit values (0 to 4095) to servo angles (0 to 180 degrees) x_angle = map_value(x_value, 0, 4095, 0, 180) y_angle = map_value(y_value, 0, 4095, 0, 180) # Move the servos to the mapped angles xServo.move_to_angle(x_angle) yServo.move_to_angle(y_angle) # Print the joystick's X and Y values and the corresponding servo angles print(f'Joystick X: {x_value}, Y: {y_value} => Servo X Angle: {x_angle}°, Y Angle: {y_angle}°') time.sleep(0.05) # Delay to reduce the output frequency

Étapes rapides

Voici les instructions sur la façon de configurer et d’exécuter votre code MicroPython sur l’ESP32 en utilisant l’IDE Thonny :

  • Assurez-vous que Thonny IDE est installé sur votre ordinateur.
  • Assurez-vous que le firmware MicroPython est chargé sur votre carte ESP32.
  • Si c'est la première fois que vous utilisez un ESP32 avec MicroPython, consultez le guide ESP32 - Premiers pas. pour des instructions étape par étape.
  • Reliez la carte ESP32 au joystick et au servomoteur selon le schéma fourni.
  • Connectez la carte ESP32 à votre ordinateur avec un câble USB.
  • Ouvrez Thonny IDE sur votre ordinateur.
  • Dans Thonny IDE, allez dans Outils Options.
  • Sous l'onglet Interpreter, sélectionnez MicroPython (ESP32) dans le menu déroulant.
  • Assurez-vous que le bon port est sélectionné. Thonny IDE le détecte généralement automatiquement, mais vous devrez peut-être le choisir manuellement (comme COM12 sur Windows ou /dev/ttyACM0 sur Linux).
  • Accédez à Outils Gérer les paquets dans Thonny IDE.
  • Recherchez “DIYables-MicroPython-Servo”, puis trouvez la bibliothèque Servo-moteur créée par DIYables.
  • Cliquez sur DIYables-MicroPython-Servo, puis cliquez sur le bouton Install pour installer la bibliothèque Servo-moteur.
Bibliothèque MicroPython ESP32 pour servomoteurs
  • Recherchez “DIYables-MicroPython-Joystick”, puis trouvez la bibliothèque Joystick créée par DIYables.
  • Cliquez sur DIYables-MicroPython-Joystick, puis cliquez sur le bouton Install pour installer la bibliothèque Joystick.
Bibliothèque MicroPython ESP32 pour joystick
  • Copiez le code MicroPython fourni et collez-le dans l'éditeur de Thonny.
  • Enregistrez le code sur votre ESP32 en procédant comme suit :
    • Cliquez sur le bouton Enregistrer ou en appuyant sur Ctrl+S.
    • Dans la boîte de dialogue d'enregistrement, choisissez périphérique MicroPython.
    • Nommez le fichier main.py.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
  • Poussez le joystick dans n'importe quelle direction.
  • Observez le servomoteur tourner.
  • Consultez le message dans le Shell en bas de Thonny.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

※ Note:

Ce tutoriel montre comment utiliser la fonction adc.read() pour lire les valeurs d'un ADC (convertisseur analogique-numérique) connecté à un joystick. L'ADC de l'ESP32 convient pour des projets qui n'exigent pas une grande précision. Cependant, si votre projet nécessite des mesures précises, gardez à l'esprit les points suivants :

  • L'ADC de l'ESP32 n'est pas parfaitement précis et peut nécessiter une calibration pour des résultats précis. Chaque carte ESP32 peut présenter de légères variations, il est donc nécessaire de calibrer chaque carte individuellement.
  • La calibration peut être difficile, surtout pour les débutants, et pourrait ne pas toujours donner les résultats exacts que vous souhaitez.

Pour les projets nécessitant une grande précision, envisagez d'utiliser un ADC externe (par exemple ADS1115) avec l'ESP32 ou optez pour un Arduino, qui possède un ADC plus fiable. Si vous souhaitez encore calibrer l'ADC de l'ESP32, consultez le Pilote de calibration de l'ADC ESP32.

Code MicroPython pour ESP32 - Utiliser le joystick pour commander des servomoteurs

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32-micropython/esp32-micropython-joystick-servo-motor */ from DIYables_MicroPython_Joystick import Joystick from DIYables_MicroPython_Servo import Servo from machine import Pin, ADC import time JOYSTICK_X_PIN = 36 # The ESP32 pin GPIO36 (ADC0) connected to VRX pin of joystick JOYSTICK_Y_PIN = 39 # The ESP32 pin GPIO39 (ADC3) connected to VRY pin of joystick BUTTON_PIN = 23 # The ESP32 pin GPIO23 connected to SW pin of joystick SERVO_X_PIN = 13 # The ESP32 pin GPIO13 connected to Servo motor 1 SERVO_Y_PIN = 25 # The ESP32 pin GPIO25 connected to Servo motor 2 adc_vrx = ADC(Pin(JOYSTICK_X_PIN)) adc_vry = ADC(Pin(JOYSTICK_Y_PIN)) # Set the ADC width (resolution) to 12 bits adc_vrx.width(ADC.WIDTH_12BIT) adc_vry.width(ADC.WIDTH_12BIT) # Set the attenuation to 11 dB, allowing input range up to ~3.3V adc_vrx.atten(ADC.ATTN_11DB) adc_vry.atten(ADC.ATTN_11DB) joystick = Joystick(pin_x=JOYSTICK_X_PIN, pin_y=JOYSTICK_Y_PIN, pin_button=BUTTON_PIN) # Initialize the two servos xServo = Servo(SERVO_X_PIN) # Use the constant for the X servo pin yServo = Servo(SERVO_Y_PIN) # Use the constant for the Y servo pin # Define commands COMMAND_NO = 0x00 COMMAND_LEFT = 0x01 COMMAND_RIGHT = 0x02 COMMAND_UP = 0x04 COMMAND_DOWN = 0x08 # Define thresholds and intervals LEFT_THRESHOLD = 1000 RIGHT_THRESHOLD = 3000 UP_THRESHOLD = 1000 DOWN_THRESHOLD = 3000 UPDATE_INTERVAL = 100 # 100ms # Initialize variables xAngle = 90 # The center position of servo #1 yAngle = 90 # The center position of servo #2 command = COMMAND_NO last_update_time = time.ticks_ms() # Function to ensure the angle stays within the 0 to 180 degree range def limit_angle(angle): if angle < 0: return 0 elif angle > 180: return 180 return angle while True: joystick.loop() # Process joystick data current_time = time.ticks_ms() if time.ticks_diff(current_time, last_update_time) > UPDATE_INTERVAL: last_update_time = current_time # Read X and Y analog values x_value = joystick.read_x() y_value = joystick.read_y() # Reset command command = COMMAND_NO # Check left/right commands if x_value < LEFT_THRESHOLD: command |= COMMAND_LEFT elif x_value > RIGHT_THRESHOLD: command |= COMMAND_RIGHT # Check up/down commands if y_value < UP_THRESHOLD: command |= COMMAND_UP elif y_value > DOWN_THRESHOLD: command |= COMMAND_DOWN # Print and process commands if command & COMMAND_LEFT: print("COMMAND LEFT") xAngle -= 1 if command & COMMAND_RIGHT: print("COMMAND RIGHT") xAngle += 1 if command & COMMAND_UP: print("COMMAND UP") yAngle -= 1 if command & COMMAND_DOWN: print("COMMAND DOWN") yAngle += 1 # Limit the angles to the range of 0 to 180 degrees xAngle = limit_angle(xAngle) yAngle = limit_angle(yAngle) # Handle button press if joystick.is_pressed(): print("The button is pressed") xAngle = 90 # Reset to center position yAngle = 90 # Move servos to the calculated angles xServo.move_to_angle(xAngle) yServo.move_to_angle(yAngle) # Print servo angles to console print(f"Servo Motor's Angle: {xAngle}°, {yAngle}°")

Étapes rapides

  • Copiez le code ci-dessus et collez-le dans l’éditeur de l’IDE Thonny.
  • Enregistrez le script sur votre carte ESP32.
  • Cliquez sur le bouton vert Lancer (ou appuyez sur F5) pour exécuter le script.
  • Déplacez le joystick dans n'importe quelle direction.
  • Observez le servomoteur en rotation.
  • Consultez le message dans le Shell en bas de Thonny.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

Explication du code

Consultez les explications dans les commentaires du code source.

Vidéo

Tutoriels connexes

※ 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 !