Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirte?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas previas exclusivas: Accede a nuevos anuncios de productos y avances antes que nadie.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Estás listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!

Lección 47: Comunicación IoT con MQTT

Este proyecto se centra en el uso de MQTT, un protocolo de comunicación popular en el dominio de Internet de las Cosas (IoT). MQTT permite que los dispositivos IoT intercambien datos utilizando un modelo de publicar/suscribir, donde los dispositivos se comunican a través de temas.

En este proyecto, exploramos la implementación de MQTT mediante la construcción de un circuito que incluye un LED, un botón y un termistor. Se utiliza el microcontrolador ESP32-WROOM-32E para establecer una conexión a Wi-Fi y comunicarse con un servidor MQTT. El código permite que el microcontrolador se suscriba a temas específicos, reciba mensajes y controle el LED en función de la información recibida. Además, el proyecto demuestra cómo publicar datos de temperatura del termistor en un tema designado cuando se presiona el botón.

Componentes Requeridos

En este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí tienes el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Universal Maker Sensor Kit

94

BUY

También puedes comprarlos por separado desde los enlaces a continuación.

INTRODUCCIÓN AL COMPONENTE

ENLACE DE COMPRA

ESP32 & Development Board (Placa ESP32)

Comprar

Módulo de Botón

-

Placa de Pruebas

Comprar

Módulo LED RGB

-

Subida del Código

  1. Construye el circuito.

    Nota

    Al establecer una conexión a Wi-Fi, solo se pueden usar los pines 36, 39, 34, 35, 32, 33 para lectura analógica. Asegúrate de conectar el termistor a estos pines designados.

    ../_images/Lesson_01_Button_Module_esp32_bb.png
  2. Luego, conecta el ESP32-WROOM-32E al ordenador mediante el cable USB.

  3. Abre el código.

    • Abre el archivo Lesson_47_MQTT.ino ubicado en el directorio universal-maker-sensor-kit\esp32\Lesson_47_MQTT, o copia el código en el IDE de Arduino.

    • Después de seleccionar la placa (ESP32 Dev Module) y el puerto adecuado, haz clic en el botón Subir.

    • ¿Siempre muestra «Unknown COMxx»?

    • Se utiliza la biblioteca PubSubClient, que puedes instalar desde el Administrador de Bibliotecas.

      ../_images/mqtt_lib.png
  4. Localiza las siguientes líneas y modifícalas con tu <SSID> y <PASSWORD>.

    // Reemplaza las siguientes variables con tu combinación de SSID/Contraseña
    const char* ssid = "<SSID>";
    const char* password = "<PASSWORD>";
    
  5. Localiza la siguiente línea y modifica tu unique_identifier. Asegúrate de que tu unique_identifier sea realmente único, ya que cualquier ID idéntico que intente conectarse al mismo servidor MQTT puede resultar en un fallo de inicio de sesión.

    // Agrega la dirección de tu servidor MQTT, ejemplo:
    const char* mqtt_server = "broker.hivemq.com";
    const char* unique_identifier = "sunfounder-client-sdgvsda";
    

Suscripción al Tema

  1. Para evitar interferencias de mensajes enviados por otros participantes, puedes establecerlo como una cadena oscura o poco común. Simplemente reemplaza el tema actual SF/LED por el nombre de tema que desees.

    Nota

    Tienes la libertad de establecer el tema como cualquier carácter que desees. Cualquier dispositivo MQTT que se haya suscrito al mismo tema podrá recibir el mismo mensaje. También puedes suscribirte simultáneamente a varios temas.

    void reconnect() {
        // Bucle hasta que estemos reconectados
        while (!client.connected()) {
            Serial.print("Attempting MQTT connection...");
            // Intentar conectar
            if (client.connect(unique_identifier)) {
                Serial.println("connected");
                // Suscribirse
                client.subscribe("SF/LED");
            } else {
                Serial.print("failed, rc=");
                Serial.print(client.state());
                Serial.println(" try again in 5 seconds");
                // Esperar 5 segundos antes de reintentar
                delay(5000);
            }
        }
    }
    
  2. Modifica la funcionalidad para responder al tema suscrito. En el código proporcionado, si se recibe un mensaje en el tema SF/LED, se verifica si el mensaje es on o off. Dependiendo del mensaje recibido, cambia el estado de salida para controlar si el LED está encendido o apagado.

    Nota

    Puedes modificarlo para cualquier tema al que estés suscrito, y puedes escribir varias declaraciones if para responder a múltiples temas.

    void callback(char* topic, byte* message, unsigned int length) {
        Serial.print("Message arrived on topic: ");
        Serial.print(topic);
        Serial.print(". Message: ");
        String messageTemp;
    
        for (int i = 0; i < length; i++) {
            Serial.print((char)message[i]);
            messageTemp += (char)message[i];
        }
        Serial.println();
    
        // Si se recibe un mensaje en el tema "SF/LED", verifica si el mensaje es "on" o "off".
        // Cambia el estado de salida de acuerdo con el mensaje
        if (String(topic) == "SF/LED") {
            Serial.print("Changing state to ");
            if (messageTemp == "on") {
                Serial.println("on");
                digitalWrite(ledPin, HIGH);
            } else if (messageTemp == "off") {
                Serial.println("off");
                digitalWrite(ledPin, LOW);
            }
        }
    }
    
  3. Después de seleccionar la placa correcta (ESP32 Dev Module) y el puerto, haz clic en el botón Subir.

  4. Abre el monitor serial y si la siguiente información se imprime, significa que la conexión con el servidor MQTT fue exitosa.

    WiFi connected
    IP address:
    192.168.18.77
    Attempting MQTT connection...connected
    

Publicación de Mensajes a través de HiveMQ

HiveMQ es una plataforma de mensajería que funciona como un servidor MQTT, facilitando la transferencia de datos rápida, eficiente y confiable a dispositivos IoT.

Nuestro código utiliza específicamente el servidor MQTT proporcionado por HiveMQ. Hemos incluido la dirección del servidor MQTT de HiveMQ en el código de la siguiente manera:

// Agrega la dirección de tu servidor MQTT, ejemplo:
const char* mqtt_server = "broker.hivemq.com";
  1. Ahora, abre HiveMQ Web Client en tu navegador web.

  2. Conecta el cliente al proxy público predeterminado.

    ../_images/sp230512_092258.png
  3. Publica un mensaje en el tema al que te has suscrito. En este proyecto, puedes publicar on o off para controlar tu LED.

    ../_images/sp230512_140234.png

Publicación de Mensajes a MQTT

También podemos utilizar el código para publicar información en el tema. En esta demostración, hemos programado una función que envía un mensaje simple al tema cuando presionas el botón.

  1. Haz clic en Agregar nueva suscripción al tema.

    ../_images/sp230512_092341.png
  2. Rellena los temas que deseas seguir y haz clic en Suscribirse. En el código, enviamos el mensaje al tema SF/TEMP.

    void loop() {
        if (!client.connected()) {
            reconnect();
        }
        client.loop();
    
        // Si se presiona el botón, publica la temperatura en el tema "SF/TEMP"
        if (digitalRead(buttonPin)) {
                long now = millis();
                if (now - lastMsg > 5000) {
                lastMsg = now;
                char tempString[8];
                strcpy(tempString,"hello");
                client.publish("SF/TEMP", tempString);
            }
        }
    }
    
  3. Por lo tanto, podemos monitorear este tema en HiveMQ, lo que nos permite ver la información que has publicado.

    ../_images/sp230512_154342.png