Tutorial ESP32 30/55 - Controla el Servo a través de la web usando MQTT con el servicio Adafruit IO | Kit de aprendizaje IoT ESP32 de SunFounder
En este tutorial, aprenderemos cómo controlar la posición de un servomotor utilizando el microcontrolador ESP32 y el protocolo MQTT a través de la web. Aprovechando el servicio Adafruit IO, podrás posicionar el servomotor en varios ángulos como 0°, 90° o 180° de forma remota. Este proyecto demuestra las capacidades del ESP32, que incluye Wi-Fi y Bluetooth integrados, lo que lo convierte en una herramienta poderosa para aplicaciones de IoT.

En este proyecto, configuraremos un bróker MQTT utilizando Adafruit IO, crearemos un panel para controlar el servo y conectaremos el ESP32 a él. La posición del servo se ajustará mediante un deslizador en el panel, lo que permitirá un control en tiempo real desde cualquier dispositivo con acceso a Internet (en el video a las 5:30).
Hardware Explicado
Los componentes principales de este proyecto incluyen el microcontrolador ESP32 y el servomotor. El ESP32 es un microcontrolador versátil con capacidades integradas de Wi-Fi y Bluetooth, lo que lo hace ideal para aplicaciones de IoT. Se comunica con el servicio Adafruit IO utilizando el protocolo MQTT, que es liviano y eficiente para transmitir mensajes a través de internet.
El servo motor es un actuador rotativo que permite un control preciso de la posición angular. Funciona al recibir una señal de modulación por ancho de pulso (PWM) que dicta su posición. En este proyecto, conectaremos el servo a uno de los pines digitales del ESP32, lo que nos permitirá controlar su ángulo de forma remota.
Detalles de la hoja de datos
| Fabricante | Paralaje |
|---|---|
| Número de parte | SG90 |
| Voltaje de lógica/entradas y salidas | 3.3 V - 5 V |
| Voltaje de suministro | 4.8 V - 6.0 V |
| Corriente de salida (por canal) | 1 A máx |
| Orientación sobre la frecuencia PWM | 50 Hz |
| Umbrales de lógica de entrada | 0.3 V - 0.7 V |
| Caída de tensión / RDS(on)/ saturación | 0.2 V máx |
| Límites térmicos | Temperatura de funcionamiento: -10°C a 60°C |
| Paquete | Funda de plástico |
| Notas / variantes | Mini servo, rotación de 180° |
- Asegúrate de proporcionar el voltaje adecuado al servo (4.8 V - 6.0 V).
- Usa un terminal de tierra común entre el ESP32 y el servo.
- Monitorea la señal PWM para evitar exceder los límites del servo.
- Conecte de forma segura el servo para evitar desconexiones durante el funcionamiento.
- Actualiza la biblioteca Adafruit MQTT para garantizar la compatibilidad.
Diagramas MQTT
Instrucciones de cableado

Para conectar el servomotor al ESP32, comienza conectando el cable de tierra del servomotor al pin de tierra en el ESP32. Luego, conecta el cable de alimentación (generalmente rojo) del servomotor al pin de 5V en el ESP32. Finalmente, conecta el cable de señal (a menudo amarillo o blanco) al pin digital 25 en el ESP32. Asegúrate de que las conexiones estén seguras para evitar desconexiones durante la operación.
Si estás utilizando una batería para alimentar el ESP32, asegúrate de que el voltaje de la batería esté dentro del rango aceptable tanto para el ESP32 como para el servomotor. Además, verifica que el cableado coincida con las definiciones de los pines utilizadas en tu código para evitar problemas (en el video a las 12:45).
Ejemplos de código y guía paso a paso
En el código proporcionado, primero incluimos las bibliotecas necesarias para el ESP32 y MQTT. Definimos el objeto servo y especificamos el pin al que está conectado.const int servoPin = 25;. El ángulo predeterminado también se establece conconst int defaultServoAngle = 90;, que será la posición inicial cuando el ESP32 se inicie.
Servo myServo;
const int servoPin = 25;
const int defaultServoAngle = 90;
int servoAngle = defaultServoAngle;
Este fragmento inicializa el servo en el pin 25 y establece su ángulo predeterminado en 90°. La variableservoAnglese actualizará en función de los mensajes recibidos del bróker MQTT.
En elsetup()función, nos conectamos a Wi-Fi y configuramos el cliente MQTT. Las credenciales para Adafruit IO se definen aquí, incluyendo el nombre de usuario y la clave:
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_xmIW58uNNsjJCSOqzZ9QoHyq29wu"
Esta sección establece la conexión con el servicio Adafruit IO. Asegúrate de reemplazar estos valores con tus propias credenciales de Adafruit IO al implementar el código.
Finalmente, el bucle principal asegura que la conexión al servidor MQTT permanezca activa y procese los mensajes entrantes. La posición del servo se actualiza en función del ángulo recibido:
mqtt.processPackets(500);
int pulseWidth = map(servoAngle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
Este código mapea el ángulo del servo al ancho de pulso correspondiente y lo envía al motor del servo.processPackets()la función permite que el ESP32 maneje los mensajes MQTT entrantes, asegurando que el servo reaccione a los comandos enviados a través del panel de control de Adafruit IO.
Demostración / Qué Esperar
Una vez que todo esté configurado, deberías poder controlar el servo desde el panel de control de Adafruit IO usando el deslizador que creaste. A medida que mueves el deslizador, el servo ajustará su ángulo en tiempo real. Asegúrate de que tu ESP32 esté conectado a Wi-Fi y que la conexión MQTT sea estable. Si el servo no responde, verifica el cableado y la fuente de alimentación del servo (en el video a las 20:15).
Tenga en cuenta los límites de rango del servo; enviar un valor fuera de 0° a 180° puede hacer que se comporte de manera inesperada. El código incluye verificaciones para prevenir tales ocurrencias al restringir el ángulo dentro de este rango.
Tiempos del video
- 00:00 Comenzar
- 1:54 Introducción al proyecto
- 2:52 Introducción a MQTT
- Configuración de Adafruit IO a las 6:50
- 9:54 Cableado del servo
- 11:07 Código explicado
- 18:59 Seleccionando la placa ESP32 y el puerto COM
- 22:10 Demostración del proyecto
Common Course Links
Common Course Files
Cosas que podrías necesitar
-
AliExpressCompra el servo motor SG90 de 180 o 360 en AliExpress.s.click.aliexpress.com
Recursos y referencias
-
DocumentaciónTutorial ESP32 17/55 - Documentación del motor servo SunFunderdocs.sunfounder.com
-
ExternoServo SG90 en Amazon EE. UU.amzn.to
Archivos📁
Otros archivos
-
Folleto de datos del motor Seroo SG90
robojax-servo-SG90_datasheet.pdf0.12 MB