Veröffentlichen Sie mit einem Particle Device Client über MQTT in einem ThingSpeak-Kanal
Dieses Beispiel zeigt, wie Messwerte mithilfe eines Partikelgeräts wie Boron, Argon, Photon oder Electron über MQTT an einen ThingSpeak-Kanal veröffentlicht werden. Wenn Sie mehr als einen Wert an ThingSpeak senden möchten, können Sie mehrere Werte in einem Kanal-Feed veröffentlichen. Wenn Sie nur einen Sensor haben, können Sie alternativ einen einzelnen Wert in einem Kanalfeld veröffentlichen.
Aufstellen
1) Erstellen Sie einen neuen Kanal, wie unter Daten in einem neuen Kanal sammeln gezeigt. Stellen Sie sicher, dass Sie alle Felder aktivieren, die Sie verwenden möchten.
2) Erstellen Sie ein MQTT-Gerät, indem Sie oben auf der Seite ThingSpeak auf Geräte > MQTT und dann auf Gerät hinzufügen klicken. Klicken Sie beim Einrichten des Geräts und Hinzufügen des neuen Kanals zur autorisierten Liste auf Anmeldeinformationen herunterladen > Nur Text. Verwenden Sie die gespeicherten Anmeldeinformationen im Codeabschnitt unten. Einzelheiten finden Sie unter Erstellen Sie ein ThingSpeak MQTT-Gerät.
3) Integrieren Sie die Bibliothek MQTT/MQTT.h in Ihre Particle-IDE.
Code
1) Definieren Sie die Variablen, die zur Kommunikation mit ThingSpeak verwendet werden. Bearbeiten Sie den Code für Ihre eigenen IDs und Anmeldeinformationen.
// 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) Verfolgen Sie die letzte Verbindungszeit und definieren Sie das Zeitintervall für die Veröffentlichung der Daten mit globalen Variablen. Initialisieren Sie den MQTT-Client.
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) Definieren Sie eine Rückruffunktion für den MQTT-Client. In diesem Fall ist die Funktion setup absichtlich leer.
// Define a callback function to initialize the MQTT client.
void callback(char* topic, byte* payload, unsigned int length) {
}
void setup() {
}
4) Stellen Sie die MQTT-Verbindung her und veröffentlichen Sie in regelmäßigen Zeitabständen Daten im Kanal in der Hauptfunktion 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) Veröffentlichen Sie die Sensordaten mit der Methode mqttpublish im ThingSpeak-Kanal-Feed. Wenn Sie im Kanal-Feed veröffentlichen, können Sie in mehreren Feldern gleichzeitig veröffentlichen. Wenn Sie nur einen Sensor haben, können Sie direkt in einem einzelnen Feld veröffentlichen. Ändern Sie die Kommentarzeile im folgenden Code nach Bedarf.
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) Generieren Sie eine eindeutige Client-ID und verbinden Sie den Particle Photon MQTT-Client mit der Funktion reconnect mit dem ThingSpeak MQTT-Broker.
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);
}
}
Siehe auch
Publish to a Channel Field Feed | Publish to a Channel Feed