Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la versión original en inglés.

Publicar en un canal ThingSpeak utilizando un cliente de dispositivo de partículas a través de MQTT

Este ejemplo muestra cómo publicar valores medidos en un canal ThingSpeak a través de MQTT utilizando un dispositivo de partículas como Boro, Argón, Fotón o Electrón. Si tiene más de un valor para enviar a ThingSpeak, puede publicar varios valores en el feed de un canal. Alternativamente, si tiene un solo sensor, puede publicar un valor único en un campo de canal.

Configuración

1) Cree un nuevo canal, como se muestra en Collect Data in a New Channel. Asegúrese de habilitar todos los campos que planea utilizar.

2) Cree un dispositivo MQTT haciendo clic en Dispositivos > MQTT en la parte superior de la página de ThingSpeak, luego en Agregar dispositivo. Al configurar el dispositivo y agregar el nuevo canal a su lista autorizada, haga clic en Descargar Credenciales > Texto sin formato. Utilice las credenciales guardadas en la sección Código a continuación. Para obtener más información, consulte Crear un dispositivo ThingSpeak MQTT.

3) Incluya la biblioteca MQTT/MQTT.h en su IDE de Particle.

Código

1) Definir las variables utilizadas para comunicarse con ThingSpeak. Edite el código para sus propios ID y credenciales.

// 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) Realice un seguimiento de la última hora de conexión y defina el intervalo de tiempo de publicación de datos con variables globales. Inicialice el cliente 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) Defina una función de devolución de llamada para el cliente MQTT. En este caso, la función setup está deliberadamente vacía.

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

4) Establezca la conexión MQTT y publique datos en el canal a intervalos de tiempo regulares en la función principal 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) Publique los datos del sensor en el canal ThingSpeak utilizando el método mqttpublish . Si publica en el feed del canal, puede publicar en varios campos a la vez. Si solo tiene un sensor, puede publicar en un solo campo directamente. Modifique la línea que comenta en el siguiente código según sea necesario.

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) Genere una ID de cliente única y conecte el cliente Particle Photon MQTT al broker ThingSpeak MQTT con la función 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);
    } 
}

Consulte también

|

Ejemplos relacionados

Más acerca de