Main Content

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 dispositivo a particelle 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 in un feed di canale. In alternativa, se disponi di un solo sensore, puoi pubblicare un singolo valore in un campo canale.

Impostazione

1) Crea un nuovo canale, come mostrato in Collect Data in a New Channel. Assicurati di abilitare tutti i campi che intendi utilizzare.

2) Crea 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. Utilizza le credenziali salvate nella sezione Codice di seguito. Per i dettagli, vedere Crea un dispositivo MQTT ThingSpeak.

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

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) Tieni traccia dell'ora dell'ultima connessione e definisci l'intervallo di tempo di pubblicazione dei dati con variabili globali. Inizializza 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 nel feed del canale ThingSpeak utilizzando il metodo mqttpublish . Se stai pubblicando sul feed del canale, puoi pubblicare su più campi contemporaneamente. Se disponi di un solo sensore, puoi pubblicare direttamente in un singolo campo. Modificare la riga commentando nel codice seguente secondo necessità.

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 MQTT Particle Photon 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

|

Esempi correlati

Ulteriori informazioni