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 Collecter des données dans un nouveau canal. Assurez-vous d'activer tous les champs que vous prévoyez d'utiliser.
2) Créez un périphérique MQTT en cliquant sur Devices > MQTT en haut de la page ThingSpeak, puis sur Add Device. Lors de la configuration de l'appareil et de l'ajout du nouveau canal à sa liste autorisée, cliquez sur Download Credentials > Plain Text. Utilisez les informations d'identification enregistrées dans la section Code ci-dessous. Pour plus de détails, voir Créer un périphérique MQTT ThingSpeak.
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 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 ID client unique et connectez le client Particle Photon MQTT au courtier MQTT ThingSpeak 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
Publish to a Channel Field Feed | Publish to a Channel Feed