Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Utilizza Particle Photon Client per iscriverti agli aggiornamenti del canale

Questo esempio mostra come utilizzare una bacheca Particle Photon per iscriversi agli aggiornamenti del canale CheerLights. Il programma legge un colore dal canale e lo visualizza tramite il LED integrato nella scheda Photon. Puoi iscriverti al feed del canale o direttamente al campo colore sul canale CheerLights, come mostrato in questo esempio.

Impostare

1) Creare un dispositivo MQTT per il canale CheerLights.

a) Fare clic su Dispositivi > MQTT nella parte superiore della pagina ThingSpeak, quindi fare clic su Aggiungi un nuovo dispositivo.

b) Inserisci un nome e una descrizione per il tuo dispositivo.

c) In Autorizza canali ad accedere, fare clic su Select a Channel > Enter a channel ID below.

d) Inserisci il numero del canale CheerLights 1417 e fai clic su Aggiungi canale.

e) Il tuo elenco Canali autorizzati ora include CheerLights (1417). Fare clic su Aggiungi dispositivo.

f) Viene visualizzata la finestra di dialogo Nuovo dispositivo aggiunto. Fare clic su Scarica credenziali > Testo normale. Fare clic su Fine. Utilizzare le credenziali salvate nella sezione Codice qui sotto.

2) Includi la libreria MQTT/MQTT.h nel tuo Particle IDE.

3) Utilizzando il Web IDE, creare una nuova app Photon.

4) Aggiungere la libreria MQTT. L'aggiunta della libreria include la riga #include <MQTT.h> all'inizio del codice.

5) Incolla il codice mostrato qui. Modificare channelID, e username e password come appropriato.

Codice

1) Iniziare dichiarando le variabili per comunicare con ThingSpeak ™. Iscriviti al campo 1 di CheerLights, ovvero il canale 1417. Il programma include la libreria MQTT nello spazio in cima a queste righe.

// 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) I messaggi inoltrati dal broker MQTT richiamano la funzione callback per gestire il messaggio.

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) Utilizzare la funzione setup per abilitare il controllo LED e avviare la connessione e l'abbonamento MQTT.

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

4) Nella funzione loop, verifica la presenza di una connessione e, se la connessione viene persa, riconnettiti e iscriviti. Specificare che il dispositivo controlli l'ora. Per questo esempio, imposta il dispositivo in modalità sospensione tra le 23:00 e le 4:00.

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) Utilizzare la funzione subscribeMQTT per stabilire la connessione con il broker e quindi iscriversi al campo canale.

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");
        }
    }
}

Metti alla prova il tuo codice

Per testare il tuo codice, cambia il colore di CheerLights utilizzando il server Discord di Cheerlights all'indirizzo https://cheerlights.com/growing-the-community-new-cheerlights-discord-bot/.

Vedi anche

|

Argomenti