Comment contrôler un servomoteur avec ESP32 à l'aide de Python : un guide complet_BLDC_Industry Insights_Kpower
Maison > Aperçu de l'industrie >BLDC
ASSISTANCE TECHNIQUE

Comment contrôler un servomoteur avec ESP32 à l'aide de Python : un guide complet

Publié 2026-04-05

Ce guide fournit une méthode étape par étape pour contrôler un standardservomoteurmoteur avec une carte ESP32 utilisant Python. Que vous construisiez un bras robotique, un support de caméra panoramique ou un simple accessoire mobile, vous apprendrez le câblage exact, le code Python et les étapes d'étalonnage pour réaliser votreservomoteurbouger avec précision. Tous les exemples sont basés sur des situations courantes du monde réel afin que vous puissiez les appliquer immédiatement à vos propres projets.

01Ce dont vous avez besoin

Une carte de développement ESP32 (toute variante courante)

Un standard 5Vservomoteurmoteur (par exemple, type SG90 ou MG995)

Alimentation externe 5 V (si vous utilisez un servo à couple élevé)

Fils de liaison (femelle à femelle)

Un ordinateur avec le firmware MicroPython installé sur l'ESP32

> Important: N’alimentez jamais un servo directement à partir de la broche 3,3 V de l’ESP32. La plupart des servos nécessitent 5 V et peuvent consommer plus de courant que ce que la carte peut fournir en toute sécurité. Utilisez une source d'alimentation 5 V séparée pour le servo et connectez uniquement le fil de signal à l'ESP32.

02Connexion matérielle – Un cas réel

Imaginez que vous construisez une simple griffe robotique qui s'ouvre et se ferme. Vous disposez d'un servo MG995 commun. Connectez-le comme suit :

Fil de servo Couleur (typique) Connectez-vous à
Pouvoir Rouge Borne positive externe 5 V
Sol Marron ou Noir Masse externe 5 VetESP32 GND
Signal Orange ou Jaune ESP32 GPIO broche 15 (n'importe quelle broche PWM)

Point critique: La masse de l'alimentation externedoitêtre connecté à l'ESP32 GND. Sans ce terrain d’entente, le signal sera instable et le servo tremblera ou ne bougera pas.

03Code Python – étape par étape

L'ESP32 contrôle un servo en générant un signal PWM de 50 Hz (période = 20 ms). La position du servo est déterminée par la largeur d'impulsion : 0,5 ms pour 0°, 1,5 ms pour 90° et 2,5 ms pour 180°.

Vous trouverez ci-dessous un script MicroPython complet et testé. Enregistrez-le sousmain.pysur votre ESP32.

à partir de la broche d'importation de la machine, temps d'importation PWM # Utilisez GPIO15 – vous pouvez passer à n'importe quelle broche prenant en charge PWM SERVO_PIN = 15 # Fréquence du servo standard : 50 Hz PWM_FREQ = 50 # Valeurs du cycle de service pour 0°, 90°, 180° (calculées pour 50 Hz) # Pour une résolution PWM de 16 bits (0–65535) : # Duty = (pulse_width_ms / 20 ms)65535 # 0,5 ms -> 1638 (0°) # 1,5 ms -> 4915 (90°) # 2,5 ms -> 8192 (180°) DUTY_0 = 1638 DUTY_90 = 4915 DUTY_180 = 8192 # Initialiser PWM sur la broche du servo servo = PWM(Pin(SERVO_PIN), freq=PWM_FREQ, duty_u16=DUTY_90) # démarrer à 90° def set_angle(angle): """ Régler l'angle du servo (0° à 180°). Mappe linéairement l'angle au cycle de service. """ # Serrer l'angle à l'angle de plage valide = max(0, min(180, angle)) # Cartographie linéaire : duty = DUTY_0 + (angle/180)(DUTY_180 - DUTY_0) duty = int(DUTY_0 + (angle / 180) * (DUTY_180 - DUTY_0)) servo.duty_u16(duty) # Exemple : balayage d'avant en arrière pendant que True : pour l'angle dans la plage (0, 181, 10) : set_angle(angle) time.sleep_ms(50) pour l'angle dans la plage (180, -1, -10) : set_angle(angle) time.sleep_ms(50)

04Comment utiliser le code

1. Flashez le firmware MicroPython sur votre ESP32 (si ce n'est déjà fait).

2. Connectez le servo comme décrit.

3. Copiez le script sur le tableau à l'aide d'un outil tel quetélécommandeou Thonny.

4. Exécutez le script. Le servo balayera de 0° à 180° et inversement à plusieurs reprises.

05Calibrage – Pourquoi votre servo peut avoir besoin de valeurs différentes

Différents modèles de servos ont des plages de largeur d'impulsion légèrement différentes. Par exemple, un SG90 bon marché peut fonctionner entre 0,5 ms et 2,4 ms, tandis qu'un MG996R à couple élevé utilise entre 0,6 ms et 2,4 ms. La plage courante de 0,5 à 2,5 ms fonctionne pour la plupart, mais vous devez toujours calibrer.

Méthode d'étalonnage(un cas réel issu d'un projet de bras robotique) :

Réglez le rapport cyclique sur 1638 et notez l'angle réel.

Si le servo n'atteint pas 0°, augmentez légèrement le service (par exemple 1700) jusqu'à ce qu'il s'arrête de bouger.

Faites de même pour 180° en diminuant à partir de 8192.

Utilisez vos DUTY_MIN et DUTY_MAX mesurés dans leset_angle()fonction.

06Problèmes courants et solutions

Problème Cause la plus probable Réparer
Le servo ne bouge pas du tout Point commun manquant entre l'ESP32 et la puissance du servo Connectez le GND de l'alimentation externe à l'ESP32 GND
Tremblements ou secousses du servo La fréquence PWM n'est pas de 50 Hz ; ou puissance instable Ensemblefréquence=50; utilisez une alimentation 5 V séparée avec un courant adéquat
Le servo se déplace uniquement sur une petite plage Les valeurs de service ne sont pas correctes pour votre servo Calibrez comme décrit ci-dessus ; ajuster DUTY_0 et DUTY_180
L'ESP32 se réinitialise lorsque le servo bouge Le servo consomme trop de courant de la broche 5V de la carte N’alimentez jamais le servo de l’ESP32 ; utiliser une alimentation externe 5V

07Principe fondamental à retenir

Un servo est contrôlé par la largeur d'impulsion et non par le pourcentage du rapport cyclique.La fréquence doit être exactement de 50 Hz (période 20 ms). Changer la largeur d'impulsion entre 0,5 ms et 2,5 ms fait pivoter le servo de 0° à 180°. Chez MicroPythondevoir_u16()méthode, le mappage de la largeur d'impulsion à la valeur de service dépend de la résolution PWM (toujours 16 bits sur ESP32). Utilisez les formules fournies ou la fonction de cartographie linéaire.

08Recommandations concrètes

1. Commencez toujours par un simple test de balayage– il confirme le câblage et le fonctionnement de base du PWM.

2. Utiliser un analyseur logique ou un oscilloscopepour vérifier la largeur d'impulsion si le servo se comporte bizarrement.

3. Pour les projets alimentés par batterie, ajoutez un grand condensateur (470 µF ou plus) aux bornes d'alimentation du servo pour absorber les chutes de tension.

4. Lorsque votre projet nécessite plusieurs servos, contrôlez chacun sur une broche GPIO distincte, mais assurez-vous que le courant total ne dépasse pas la valeur nominale de votre alimentation.

09Résumé final

Contrôler un servo avec ESP32 et Python est simple : connectez le fil de signal à n'importe quel GPIO compatible PWM, fournissez une alimentation séparée de 5 V avec une masse commune, générez un signal PWM de 50 Hz et ajustez le rapport cyclique pour régler la largeur d'impulsion entre 0,5 ms et 2,5 ms. Le code fourni fonctionne immédiatement pour la plupart des servos standard. Si la plage de mouvement est incorrecte, calibrez les valeurs de service minimale et maximale pour votre servo spécifique. Vous êtes désormais prêt à intégrer un mouvement précis dans vos propres projets basés sur ESP32.

Heure de mise à jour:2026-04-05

Alimenter l’avenir

Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.

Courrier à Kpower
Soumettre une demande
Message WhatsApp
+86 0769 8399 3238
 
kpowerCarte