Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

Publier sur un canal ThingSpeak à l'aide d'un client de périphérique de particules via MQTT

Cet exemple montre comment publier des valeurs mesurées sur un canal ThingSpeak via MQTT à l'aide d'un appareil à particules tel que le bore, l'argon, le photon ou l'électron. Si vous avez plusieurs valeurs à envoyer à ThingSpeak, vous pouvez publier plusieurs valeurs dans un flux du canal. Alternativement, si vous n'avez qu'un seul capteur, vous pouvez publier une seule valeur dans un champ de canal .

Installation

1) Créez un nouveau canal, comme indiqué dans Collect Data in a New Channel. Assurez-vous d'activer tous les champs que vous prévoyez d'utiliser.

2) Créez un MQTT device en cliquant sur Appareils > MQTT en haut de la page ThingSpeak , puis Ajouter un appareil . Lors de la configuration de l' appareil et de l'ajout de la nouvelle canal à sa liste autorisée, cliquez sur Télécharger les informations d'identification > Texte brut . Utilisez les informations d'identification enregistrées dans la section Code ci-dessous. Pour plus de détails, voir Créer un appareil ThingSpeak MQTT.

3) Incluez la bibliothèque MQTT/MQTT.h dans votre IDE Particle.

Code

1) Définissez les variables utilisées pour communiquer avec ThingSpeak. Modifiez le code pour vos propres identifiants et informations d'identification.

// 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) Suivez l'heure de la dernière connexion et définissez l'intervalle de temps de publication des données avec des variables globales. Initialisez le 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) Définissez une fonction de rappel pour le client MQTT. Dans ce cas, la fonction setup est volontairement vide.

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

4) Établissez la connexion MQTT et publiez les données sur le canal à intervalles de temps réguliers dans la fonction 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) Publiez les données du capteur sur le flux du canal ThingSpeak à l'aide de la méthode mqttpublish. Si vous publiez dans le flux du canal, vous pouvez publier dans plusieurs champs à la fois. Si vous n'avez qu'un seul capteur, vous pouvez publier directement dans un seul champ. Modifiez la ligne de commentaire dans le code suivant si nécessaire.

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) Générez un identifiant client unique et connectez le client Particle Photon MQTT au MQTT broker ThingSpeak MQTT avec la fonction 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);
    } 
}

Voir aussi

|

Exemples associés

En savoir plus