Contenuto principale

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

Pubblica su un canale ThingSpeak utilizzando un client Particle Device tramite MQTT

Questo esempio mostra come pubblicare i valori misurati su un canale ThingSpeak tramite MQTT utilizzando un dispositivo Particle come Boron, Argon, Photon o Electron. Se hai più di un valore da inviare a ThingSpeak, puoi pubblicare più valori su un feed del canale. In alternativa, se si dispone di un solo sensore, è possibile pubblicare un singolo valore in un campo canale.

Impostare

1) Crea un nuovo canale, come mostrato in Raccogli dati in un nuovo canale. Assicurati di abilitare tutti i campi che intendi utilizzare.

2) Creare un dispositivo MQTT facendo clic su Dispositivi > MQTT nella parte superiore della pagina ThingSpeak, quindi su Aggiungi dispositivo. Durante la configurazione del dispositivo e l'aggiunta del nuovo canale all'elenco autorizzato, fare clic su Scarica credenziali > Testo normale. Utilizzare le credenziali salvate nella sezione Codice qui sotto. Per i dettagli, vedere Crea un dispositivo MQTT ThingSpeak.

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

Codice

1) Definire le variabili utilizzate per comunicare con ThingSpeak. Modifica il codice per i tuoi ID e credenziali.

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

const long channelId = YOUR_THINGSPEAK_CHANNEL_NUMBER; // Change this to your ThingSpeak channel number.
String clientId = "MQTT_CLIENDID_FROM_THINGSPEAK";
String username = "MQTT_USERNAME_FROM_THINGSPEAK";
String password = "MQTT_PASSWORD_FROM_THINGSPEAK";
char server[] = "mqtt3.thingspeak.com";

2) Tracciare l'orario dell'ultima connessione e definire l'intervallo di tempo per la pubblicazione dei dati con variabili globali. Inizializzare il client MQTT.

unsigned long lastConnectionTime = 0;
const unsigned long postingInterval = 20L * 1000L; // Post data every 20 seconds. 

int strength = WiFi.RSSI();
int power = 10^(strength/10);

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

3) Definire una funzione di callback per il client MQTT. In questo caso, la funzione setup è volutamente vuota.

// Define a callback function to initialize the MQTT client.
void callback(char* topic, byte* payload, unsigned int length) {
}
void setup() {
}

4) Stabilire la connessione MQTT e pubblicare i dati sul canale a intervalli di tempo regolari nella funzione principale loop.

void loop() {
    // If MQTT client is not connected then reconnect.
    if (!client.isConnected()) {
      reconnect();
    }
    
    // Call the loop continuously to establish connection to the server.
    client.loop();  
    
    if (millis() - lastConnectionTime > postingInterval) {
        mqttpublish();
    }
}

5) Pubblicare i dati del sensore sul feed del canale ThingSpeak utilizzando il metodo mqttpublish. Se pubblichi sul feed del canale, puoi pubblicare su più campi contemporaneamente. Se hai un solo sensore, puoi pubblicare direttamente su un singolo campo. Modificare la riga di commento nel codice seguente secondo le proprie esigenze.

void mqttpublish() {
    
    //Get SSID signal strength
    strength = WiFi.RSSI();
    
    //Power in milliwatts
    power = 10^(strength/10);
    
    // Create a data string to send data to ThingSpeak.
    // Use these lines to publish to a channel feed, which allows multiple fields to be updated simultaneously.
    // String data = String("field1=" + String(strength) + "&field2=" + String(power) );
    // String topic = String("channels/"+String(channelId)+ "/publish");
    
    // Use the next two to publish to a single channel field directly.
    String data = String(strength);
    String topic = String("channels/"+String(channelId)+ "/publish/fields/field1");
    
    client.publish(topic,data);
    
    lastConnectionTime = millis();
}

6) Generare un ID client univoco e connettere il client Particle Photon MQTT al broker MQTT ThingSpeak con la funzione reconnect.

void reconnect(){
    
    Particle.publish("Attempting MQTT connection");
        
    // Connect to the ThingSpeak MQTT broker.
    if (client.connect(clientId,username,password))  {
        // Track the connection with particle console.
        Particle.publish("Conn:"+ String(server) + " cl: " + String(clientId)+ " Uname:" + String(username));
    } else {
        Particle.publish("Failed to connect. Trying to reconnect in 2 seconds");
        delay(2000);
    } 
}

Vedi anche

|

Argomenti