Cómo controlar un servomotor con ESP32 usando Python: una guía completa_BLDC_Industry Insights_Kpower
Hogar > Perspectivas de la industria >BLDC
APOYO TÉCNICO

Soporte de producto

Cómo controlar un servomotor con ESP32 usando Python: una guía completa

Publicado 2026-04-05

Esta guía proporciona un método paso a paso para controlar un estándarservoMotor con una placa ESP32 usando Python. Ya sea que esté construyendo un brazo robótico, un soporte de cámara con giro e inclinación o un simple accesorio móvil, aprenderá el cableado exacto, el código Python y los pasos de calibración para hacer suservomoverse con precisión. Todos los ejemplos se basan en situaciones comunes del mundo real para que pueda aplicarlos inmediatamente a sus propios proyectos.

01Lo que necesitas

Una placa de desarrollo ESP32 (cualquier variante común)

Un estándar de 5Vservomotor (por ejemplo, tipo SG90 o MG995)

Fuente de alimentación externa de 5 V (si se utiliza un servo de alto par)

Cables de puente (hembra a hembra)

Una computadora con firmware MicroPython instalado en el ESP32

> Importante: Nunca alimente un servo directamente desde el pin de 3.3V del ESP32. La mayoría de los servos requieren 5 V y pueden consumir más corriente de la que la placa puede proporcionar de forma segura. Utilice una fuente de alimentación separada de 5 V para el servo y conecte solo el cable de señal al ESP32.

02Conexión de hardware: un caso real

Imagina que estás construyendo una garra robótica sencilla que se abre y se cierra. Tienes un servo MG995 común. Conéctelo de la siguiente manera:

Cable servo Color (típico) Conéctate a
Fuerza Rojo Terminal positivo externo de 5V
Suelo Marrón o negro Tierra externa de 5VyESP32 TIERRA
Señal naranja o amarillo ESP32 GPIO pin 15 (cualquier pin PWM)

Punto crítico: La tierra de la fuente de alimentación externadebeconectarse al ESP32 GND. Sin esta base común, la señal será inestable y el servo vibrará o no se moverá.

03Código Python: paso a paso

El ESP32 controla un servo generando una señal PWM de 50 Hz (período = 20 ms). La posición del servo está determinada por el ancho del pulso: 0,5 ms para 0°, 1,5 ms para 90° y 2,5 ms para 180°.

A continuación se muestra un script MicroPython completo y probado. Guárdalo comoprincipal.pyen tu ESP32.

desde el pin de importación de la máquina, tiempo de importación de PWM # Use GPIO15: puede cambiar a cualquier pin que admita PWM SERVO_PIN = 15 # Frecuencia de servo estándar: 50 Hz PWM_FREQ = 50 # Valores del ciclo de trabajo para 0°, 90°, 180° (calculado para 50 Hz) # Para una resolución 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 # Inicializa PWM en el pin del servo = PWM(Pin(SERVO_PIN), freq=PWM_FREQ, duty_u16=DUTY_90) # comienza en 90° def set_angle(angle): """ Establece el ángulo del servo (0° a 180°). Asigna linealmente el ángulo al ciclo de trabajo. """ # Sujeta el ángulo al rango válido ángulo = max(0, min(180, ángulo)) # Mapeo lineal: duty = DUTY_0 + (ángulo/180)(DUTY_180 - DUTY_0) duty = int(DUTY_0 + (angle / 180) * (DUTY_180 - DUTY_0)) servo.duty_u16(duty) # Ejemplo: barrido hacia adelante y hacia atrás mientras es Verdadero: para ángulo en rango(0, 181, 10): set_angle(angle) time.sleep_ms(50) para ángulo en rango(180, -1, -10): set_angle(ángulo) tiempo.sleep_ms(50)

04Cómo utilizar el código

1. Actualice el firmware MicroPython a su ESP32 (si aún no lo ha hecho).

2. Conecte el servo como se describe.

3. Copie el guión en el tablero usando una herramienta comoremotoo Thonny.

4. Ejecute el script. El servo barrerá de 0° a 180° y retrocederá repetidamente.

05Calibración: por qué su servo puede necesitar valores diferentes

Los diferentes modelos de servo tienen rangos de ancho de pulso ligeramente diferentes. Por ejemplo, un SG90 económico podría funcionar entre 0,5 ms y 2,4 ms, mientras que un MG996R de alto par utiliza entre 0,6 ms y 2,4 ms. El rango común de 0,5 a 2,5 ms funciona para la mayoría, pero siempre debes calibrarlo.

Método de calibración(un caso del mundo real de un proyecto de brazo robótico):

Establezca el ciclo de trabajo en 1638 y observe el ángulo real.

Si el servo no llega a 0°, aumente ligeramente el trabajo (por ejemplo, 1700) hasta que deje de moverse.

Haga lo mismo para 180° disminuyendo desde 8192.

Utilice su DUTY_MIN y DUTY_MAX medidos en elestablecer_ángulo()función.

06Problemas comunes y soluciones

Problema Causa más probable Arreglar
El servo no se mueve en absoluto. Falta un punto común entre ESP32 y la potencia del servo Conecte GND del suministro externo a ESP32 GND
Nervios o contracciones del servo La frecuencia PWM no es de 50 Hz; o poder inestable Colocarfrecuencia=50; use un suministro separado de 5 V con corriente adecuada
El servo se mueve sólo en un rango pequeño Los valores de servicio no son correctos para su servo. Calibre como se describe arriba; ajustar DUTY_0 y DUTY_180
ESP32 se reinicia cuando el servo se mueve El servo consume demasiada corriente del pin de 5V de la placa Nunca alimente el servo desde ESP32; utilizar fuente externa de 5V

07Principio básico para recordar

Un servo se controla por el ancho del pulso, no por el porcentaje del ciclo de trabajo.La frecuencia debe ser exactamente de 50 Hz (período de 20 ms). Cambiar el ancho del pulso entre 0,5 ms y 2,5 ms gira el servo de 0° a 180°. En MicroPythondeber_u16()Método, el mapeo del ancho del pulso al valor de trabajo depende de la resolución PWM (siempre 16 bits en ESP32). Utilice las fórmulas proporcionadas o la función de mapeo lineal.

08Recomendaciones prácticas

1. Comience siempre con una simple prueba de barrido– confirma el cableado y el funcionamiento básico de PWM.

2. Utilice un analizador lógico o un osciloscopio.para verificar el ancho del pulso si el servo se comporta de manera extraña.

3. Para proyectos que funcionan con baterías, agregue un capacitor grande (470 µF o más) a través de los terminales de alimentación del servo para absorber las caídas de voltaje.

4. Cuando su proyecto requiere múltiples servos, controle cada uno en un pin GPIO separado, pero asegúrese de que la corriente total no exceda la clasificación de su fuente de alimentación.

09Resumen final

Controlar un servo con ESP32 y Python es sencillo: conecte el cable de señal a cualquier GPIO compatible con PWM, proporcione alimentación separada de 5 V con una tierra común, genere una señal PWM de 50 Hz y ajuste el ciclo de trabajo para establecer el ancho del pulso entre 0,5 ms y 2,5 ms. El código proporcionado funciona de inmediato para la mayoría de los servos estándar. Si el rango de movimiento es incorrecto, calibre los valores de servicio mínimo y máximo para su servo específico. Ahora está listo para integrar movimiento preciso en sus propios proyectos basados ​​en ESP32.

Hora de actualización: 2026-04-05

Impulsando el futuro

Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.

Correo a Kpower
Enviar consulta
Mensaje de WhatsApp
+86 0769 8399 3238