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

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.

ESP32-30_MQTT_diagrama-0

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

ESP32-30_MQTT_diagrama-2
ESP32-30_diagrama_MQTT
ESP32-28_sensor de temperatura DHT-principal

Instrucciones de cableado

ESP32-17-Sevo_motor-wiring

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

Imágenes

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32-28_dht_temperature-sensor-main
ESP32-28_dht_temperature-sensor-main
ESP32-30_MQTT_diagram
ESP32-30_MQTT_diagram
ESP32-30_MQTT_diagram-0
ESP32-30_MQTT_diagram-0
ESP32-30_MQTT_diagram-2
ESP32-30_MQTT_diagram-2
831-ESP32 Tutorial 30/55- ESP32 to control Servo motor using MQTT service of Adafruit
Idioma: C++
¡Copiado!

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Otros archivos