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.
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.
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 :
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.
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)
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.
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.
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.
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.
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
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.