Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Utilice Particle Photon Client para suscribirse a las actualizaciones del canal

Este ejemplo muestra cómo utilizar un tablero de Particle Photon para suscribirse a las actualizaciones del canal CheerLights. El programa lee un color del canal y lo muestra usando el LED incorporado en la placa Photon. Puede suscribirse al feed del canal o directamente al campo de color en el canal CheerLights como se muestra en este ejemplo.

Configuración

1) Cree un dispositivo MQTT para el canal CheerLights.

a) Haga clic en Dispositivos > MQTT en la parte superior de la página de ThingSpeak, luego haga clic en Agregar un nuevo dispositivo.

b) Ingrese un nombre y una descripción para su dispositivo.

c) En Autorizar acceso a canales, haga clic en Select a Channel > Enter a channel ID below.

d) Ingrese el número del canal CheerLights 1417 y haga clic en Agregar canal.

e) Su lista de Canales autorizados ahora incluye CheerLights (1417). Haga clic en Agregar dispositivo.

f) Aparece el cuadro de diálogo Nuevo dispositivo agregado. Haga clic en Descargar credenciales > Texto sin formato. Haga clic en Listo. Utilice las credenciales guardadas en la sección Código a continuación.

2) Incluya la biblioteca MQTT/MQTT.h en su IDE de Particle.

3) Usando Web IDE, cree una nueva aplicación Photon.

4) Agregue la biblioteca MQTT. Agregar la biblioteca incluye la línea #include <MQTT.h> en la parte superior de su código.

5) Pegue el código que se muestra aquí. Modifique channelID, y username y password según corresponda.

Código

1) Comience declarando las variables para comunicarse con ThingSpeak™. Suscríbete al campo 1 de CheerLights, que es el canal 1417. El programa incluye la biblioteca MQTT en el espacio superior de estas líneas.

// This #include statement is automatically added by the Particle IDE.
#include <MQTT.h>

const long channelID = 1417;
String subscribeTopic = "channels/" + String( channelID ) + "/subscribe/fields/field1";

char clientId[] = "MQTT_CLIENDID_FROM_THINGSPEAK";   //clientID returned when adding this device on ThingSpeak
char username[] = "MQTT_USERNAME_FROM_THINGSPEAK";   //username returned when adding this device on ThingSpeak
char password[] = "MQTT_PASSWORD_FROM_THINGSPEAK";   //password returned when adding this device on ThingSpeak
char server[] = "mqtt3.thingspeak.com";  

MQTT client(server, 1883, callback);       // Initialize the MQTT client

2) Los mensajes transmitidos desde el corredor MQTT invocan la función callback para manejar el mensaje.

void callback(char* topic, byte* payload, unsigned int length) {
    char p[length + 1]; // Leave an extra space to null terminate the string.
    memcpy(p, payload, length);
    p[length] = NULL;  // Terminate the string.
    
    Particle.publish(p);

    if (!strncmp(p, "red", 3)) {
        RGB.color(255, 0,  0);
    }
    
    else if (!strncmp(p, "green", 5)) {
        RGB.color(0, 255, 0);
    }
    
    else if (!strncmp(p, "blue", 4)) {
        RGB.color(0, 0, 255);
    }
    
    else if(!strncmp(p, "yellow", 6)) {
        RGB.color(255, 255, 0);
    }
    
    else if(!strncmp(p, "orange", 5)) {
        RGB.color(255, 165, 0);
    }
    
    else if(!strncmp(p, "magenta", 5)) {
        RGB.color(255, 0, 255);
    }
     
    else if(!strncmp(p, "cyan", 5)) {
        RGB.color(0, 255, 255);
    }
    
    else if(!strncmp(p, "white", 5)) {
        RGB.color(255, 255, 255);
    }
    
    else if(!strncmp(p, "oldlace", 5)) {
        RGB.color(253, 245, 230);
    }
    
    else if(!strncmp(p, "purple", 5)) {
        RGB.color(128, 0, 128);
    }
    
    else if(!strncmp(p, "pink", 5)) {
        RGB.color(255, 192, 203);
    }
    
    else {
        RGB.color(255, 255, 255);
    }
}

3) Utilice la función setup para habilitar el control de LED e iniciar la conexión y suscripción MQTT.

void setup() {
    // Set up the onboard LED.
    RGB.control(true);
   
    // Connect to the server.
    subscribeMQTT();
}

4) En la función loop , verifique si hay una conexión y vuelva a conectarse y suscríbase si se pierde la conexión. Especifique que el dispositivo compruebe la hora. Para este ejemplo, configure el dispositivo en modo de suspensión entre las 11 p.m. y las 4 a.m.

void loop() {
    int timeHour = Time.hour();
    
    if (client.isConnected()) {
        client.loop();
    } else {
        subscribeMQTT();
    }
    
    if ((timeHour > 23) or (timeHour < 4)) {
        Particle.publish("Sleep");
        System.sleep(SLEEP_MODE_DEEP, 7200);
    }
        
    delay(1);
}

5) Utilice la función subscribeMQTT para establecer la conexión con el corredor y luego suscríbase al campo del canal.

void subscribeMQTT() {
    
   if (!client.isConnected()) {
       Particle.publish("Connecting");
        client.connect(clientId, username, password, NULL, MQTT::QOS0, 0, NULL, true);
        delay(2000);
        
        if (client.isConnected()) {
            client.subscribe(subscribeTopic);
            Particle.publish("Subscribed");
        } else {
            Particle.publish("Not connected");
        }
    }
}

Pruebe su código

Para probar su código, cambie el color de CheerLights con un Tweet como "@cheerlights My favorite CheerLights color is green".

Consulte también

|

Ejemplos relacionados

Más acerca de