Main Content

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Veröffentlichen Sie auf einem ThingSpeak Kanal mit einem Particle Device Client über MQTT

Dieses Beispiel zeigt, wie Messwerte mithilfe eines Partikelgeräts wie Bor, Argon, Photon oder Electron über MQTT in einem 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 in Collect Data in a New Channel 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 ThingSpeak Seite 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 Abschnitt „Code“ unten. Einzelheiten finden Sie unter Erstellen Sie ein ThingSpeak MQTT-Gerät.

3) Binden Sie die Bibliothek MQTT/MQTT.h in Ihre Particle-IDE ein.

Code

1) Definieren Sie die Variablen, die für die 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 Callback-Funktion 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 Zeitintervallen Daten auf dem 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 den Zeilenkommentar 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

|

Verwandte Beispiele

Mehr über