ESP32 publie les lectures des capteurs sur ThingSpeak (moyen le plus simple)

ESP32 publie les lectures des capteurs sur ThingSpeak (moyen le plus simple)

Dans ce guide, vous apprendrez comment envoyer les lectures des capteurs avec l’ESP32 à ThingSpeak. À des fins de démonstration, nous utiliserons un capteur BME280, mais vous pouvez facilement modifier les exemples pour utiliser n’importe quel autre capteur. La carte ESP32 sera programmée à l’aide du noyau Arduino.

ESP32 publie les lectures des capteurs sur ThingSpeak de la manière la plus simple Arduino

ThingSpeak vous permet de publier les lectures de vos capteurs sur leur site Web et de les tracer dans des graphiques avec des horodatages. Ensuite, vous pouvez accéder à vos lectures de n’importe où dans le monde.

Nous avons un tutoriel similaire pour la carte ESP8266 : ESP8266 NodeMCU Publish Sensor Readings to ThingSpeak (moyen le plus simple)

Aperçu du projet

Il existe de nombreuses façons d’envoyer les lectures des capteurs à ThingSpeak. Dans ce didacticiel, nous utiliserons l’une des méthodes les plus simples : en utilisant le bibliothèque Thingspeak-arduino. Cette bibliothèque fournit des méthodes pour publier facilement les lectures des capteurs dans des champs uniques ou dans plusieurs champs. Vous pouvez consulter les exemples de bibliothèque sur sa page GitHub.

Pour illustrer, nous utiliserons le capteur BME280, mais vous pouvez utiliser n’importe quel autre capteur (vous devez modifier le code).

Lecture recommandée : ESP32 avec capteur BME280 utilisant Arduino IDE (pression, température, humidité).

Nous verrons comment publier sur un champ unique et comment publier sur plusieurs champs.

Préparation de l’IDE Arduino

Pour ce tutoriel, nous allons programmer l’ESP32 en utilisant le noyau Arduino. Assurez-vous donc que le module complémentaire ESP32 est installé dans votre IDE Arduino :

Si vous souhaitez programmer l’ESP32 à l’aide de VS Code avec l’extension PlatformIO, suivez plutôt le tutoriel suivant :

Installation de la bibliothèque ThingSpeak

Pour envoyer les lectures des capteurs à ThingSpeak, nous utiliserons la bibliothèque Thingspeak-arduino. Vous pouvez installer cette bibliothèque via le gestionnaire de bibliothèque Arduino. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques… et recherchez « ChoseParle » dans le gestionnaire de bibliothèque. Installez la bibliothèque ThingSpeak de MathWorks.

Installer la bibliothèque ThingSpeak Arduino IDE

Installation des bibliothèques BME280

Comme mentionné précédemment, nous publierons les lectures de capteur d’un capteur BME280. Ainsi, vous devez également installer les bibliothèques pour s’interfacer avec le capteur BME280.

Vous pouvez installer les bibliothèques à l’aide du gestionnaire de bibliothèques Arduino. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et recherchez le nom de la bibliothèque.

Installation de bibliothèques (Code VS + PlatformIO)

Si vous utilisez VS Code avec l’extension PlatformIO, copiez ce qui suit dans le platformio.ini fichier pour inclure les bibliothèques.

lib_deps = mathworks/[email protected]^2.0.0
            adafruit/Adafruit Unified Sensor @ ^1.1.4
            adafruit/Adafruit BME280 Library @ ^2.1.2  

Construire le circuit

Pour illustrer comment envoyer des données à ThingSpeak, nous enverrons des lectures de capteur à partir d’un capteur BME280. Vous devez donc câbler un capteur BME280 à votre ESP32.

Pièces requises

Pour terminer ce tutoriel, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1641981612 577 ESP32 publie les lectures des capteurs sur ThingSpeak moyen le

Diagramme schématique

Nous allons utiliser la communication I2C avec le module capteur BME280. Pour cela, câblez le capteur à l’ESP32 SCL par défaut (GPIO 22) et SDA (GPIO 21) broches, comme indiqué dans le schéma suivant.

Schéma de câblage du circuit de câblage ESP32 au BME280

Lecture recommandée : référence de brochage ESP32 : quelles broches GPIO devriez-vous utiliser ?

ThingSpeak – Mise en route

Aller à ThingSpeak un clic sur le « Commencez gratuitement” pour créer un nouveau compte. Ce compte est lié à un compte Mathworks. Donc, si vous avez déjà un compte Mathworks, vous devez vous connecter avec ce compte.

Création d’une nouvelle chaîne

Une fois que votre compte est prêt, connectez-vous, ouvrez le « Canauxonglet  » et sélectionnez « Mes chaînes« .

ThingSpeak Mise en route onglet mes chaînes

Appuyez sur le bouton « Nouvelle chaîne » pour créer une nouvelle chaîne.

ESP32 ESP8266 NodeMCU ThingSpeak Créer un nouveau canal

Saisissez un nom pour votre chaîne et ajoutez une description. Dans cet exemple, nous publierons simplement la température. Si vous souhaitez publier plusieurs lectures (comme l’humidité et la pression), vous pouvez activer plus de champs comme vous le verrez plus loin dans ce didacticiel.

ThingSpeak Modifier Ajouter une nouvelle configuration des paramètres de canal

Clique le Enregistrer la chaîne bouton pour créer et enregistrer votre chaîne.

ESP32 ESP8266 NodeMCU ThingSpeak Enregistrer un nouveau canal

Personnalisation du graphique

Le graphique peut être personnalisé, accédez à votre Vue privée onglet et cliquez sur l’icône d’édition.

ThingSpeak Personnaliser le graphique Vue privée ThingSpeak

Vous pouvez donner un titre à votre graphique, personnaliser la couleur d’arrière-plan, les axes x et y, et bien plus encore.

Les options de graphique du champ 1 de ThingSpeak enregistrent les paramètres

Lorsque vous avez terminé, appuyez sur la touche « Sauvegarder » bouton.

clé API

Pour envoyer des valeurs de l’ESP32 à ThingSpeak, vous avez besoin de la clé d’API d’écriture. Ouvrez le « Clés API« 
onglet et copiez la clé d’API d’écriture dans un endroit sûr car vous en aurez besoin dans un instant.

Thingspeak Write API Key génère une nouvelle clé

ESP32 publie les lectures des capteurs sur ThingSpeak – Code

Copiez le code suivant sur votre IDE Arduino (ou sur le main.cpp fichier si vous utilisez PlatformIO).

/*
  Adapted from WriteSingleField Example from ThingSpeak Library (Mathworks)
  
  Rui Santos
  Complete project details at https://Raspberryme.com/esp32-thingspeak-publish-arduino/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
#include "ThingSpeak.h"
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";   // your network SSID (name) 
const char* password = "REPLACE_WITH_YOUR_PASSWORD";   // your network password

WiFiClient  client;

unsigned long myChannelNumber = X;
const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";

// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

// Variable to hold temperature readings
float temperatureC;
//uncomment if you want to get temperature in Fahrenheit
//float temperatureF;

// Create a sensor object
Adafruit_BME280 bme; //BME280 connect to ESP32 I2C (GPIO 21 = SDA, GPIO 22 = SCL)

void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

void setup() {
  Serial.begin(115200);  //Initialize serial
  initBME();
  
  WiFi.mode(WIFI_STA);   
  
  ThingSpeak.begin(client);  // Initialize ThingSpeak
}

void loop() {
  if ((millis() - lastTime) > timerDelay) {
    
    // Connect or reconnect to WiFi
    if(WiFi.status() != WL_CONNECTED){
      Serial.print("Attempting to connect");
      while(WiFi.status() != WL_CONNECTED){
        WiFi.begin(ssid, password); 
        delay(5000);     
      } 
      Serial.println("nConnected.");
    }

    // Get a new temperature reading
    temperatureC = bme.readTemperature();
    Serial.print("Temperature (ºC): ");
    Serial.println(temperatureC);
    
    //uncomment if you want to get temperature in Fahrenheit
    /*temperatureF = 1.8 * bme.readTemperature() + 32;
    Serial.print("Temperature (ºC): ");
    Serial.println(temperatureF);*/
    
    
    // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
    // pieces of information in a channel.  Here, we write to field 1.
    int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureC, myWriteAPIKey);
    //uncomment if you want to get temperature in Fahrenheit
    //int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureF, myWriteAPIKey);

    if(x == 200){
      Serial.println("Channel update successful.");
    }
    else{
      Serial.println("Problem updating channel. HTTP error code " + String(x));
    }
    lastTime = millis();
  }
}

Afficher le code brut

Pour que le code fonctionne, vous devez insérer vos identifiants réseau dans les variables suivantes :

const char* ssid = "REPLACE_WITH_YOUR_SSID";   
const char* password = "REPLACE_WITH_YOUR_PASSWORD";  

Vous devez insérer le numéro de la chaîne sur laquelle vous publiez. Si vous n’avez créé qu’une seule chaîne dans ThingSpeak, le numéro de chaîne est 1. Sinon, vous pouvez voir le numéro de la chaîne sur le Vue privée languette.

unsigned long myChannelNumber = 1;

Enfin, vous devez insérer la clé Write API que vous avez obtenue lors des étapes précédentes :

const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";

Comment fonctionne le code

Tout d’abord, vous devez inclure les bibliothèques nécessaires.

#include <WiFi.h>
#include "ThingSpeak.h"
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

Insérez vos identifiants réseau dans les variables suivantes :

const char* ssid = "REPLACE_WITH_YOUR_SSID";   
const char* password = "REPLACE_WITH_YOUR_PASSWORD"; 

Créez un client Wi-Fi pour vous connecter à ThingSpeak.

WiFiClient  client;

Insérez votre numéro de chaîne ainsi que votre clé API d’écriture :

unsigned long myChannelNumber = 1;
const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";

Dans le temporisateur variable insérer la fréquence à laquelle vous souhaitez publier les lectures. Dans ce cas, nous publions des lectures toutes les 30 secondes (30 000 millisecondes). Vous pouvez modifier ce délai si vous le souhaitez.

unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

le températureC La variable contient la valeur de température en degrés Celsius.

float temperatureC;

Si vous souhaitez obtenir la température en degrés Fahrenheit, décommentez la ligne suivante.

//float temperatureF;

Créé un Adafruit_BME280 objet appelé bme sur les broches ESP32 par défaut.

Adafruit_BME280 bme; //BME280 connect to ESP32 I2C (GPIO 21 = SDA, GPIO 22 = SCL)

le initBME() La fonction initialise le capteur BME280.

void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

Dans le mettre en place(), initialisez le moniteur série :

Serial.begin(115200);  //Initialize serial

Initialisez le capteur BME280.

initBME();

Configurez l’ESP32 comme station Wi-Fi :

WiFi.mode(WIFI_STA);

Initialisez ThingSpeak :

ThingSpeak.begin(client);  // Initialize ThingSpeak

Dans le boucler(), connectez-vous ou reconnectez-vous au Wi-Fi en cas de perte de connexion :

// Connect or reconnect to WiFi
if(WiFi.status() != WL_CONNECTED){
  Serial.print("Attempting to connect");
  while(WiFi.status() != WL_CONNECTED){
    WiFi.begin(ssid, password); 
    delay(5000);     
  } 
  Serial.println("nConnected.");
}

Obtenez une nouvelle lecture de température et imprimez-la dans le moniteur série :

temperatureC = bme.readTemperature();

Décommentez les lignes suivantes si vous souhaitez obtenir la température en degrés Fahrenheit.

/*temperatureF = 1.8 * bme.readTemperature() + 32;
Serial.print("Temperature (ºC): ");
Serial.println(temperatureF);*/

Enfin, écrivez à ThingSpeak. Vous pouvez utiliser le écritureChamp() méthode qui accepte comme arguments :

  • le numéro de canal ;
  • le numéro de champ (dans notre cas, nous n’avons qu’un champ) ;
  • la valeur que vous souhaitez publier (températureC ou températureF);
  • votre clé d’API d’écriture.

Cette fonction renvoie le code 200 si elle a réussi à publier les lectures.

int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureC, myWriteAPIKey);
if(x == 200){
  Serial.println("Channel update successful.");
}
else{
  Serial.println("Problem updating channel. HTTP error code " + String(x));
}

Si vous souhaitez publier vos lectures en degrés Fahrenheit, décommentez la ligne suivante dans le code :

//int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureF, myWriteAPIKey);

Manifestation

Après avoir inséré vos informations d’identification réseau, votre numéro de canal et votre clé API, téléchargez le code sur votre carte.

Ouvrez le moniteur série à un débit en bauds de 115 200 et appuyez sur le bouton RST intégré. Après 30 secondes, il devrait se connecter au Wi-Fi et commencer à publier les lectures sur ThingSpeak.

Publier les relevés de température ThingSpeak ESP32 Serial Monitor

Accédez à votre compte ThingSpeak sur le canal que vous venez de créer et vous verrez les relevés de température publiés et tracés sur le graphique.

ThingSpeak Chart BME280 Lectures ESP32

Désormais, vous pouvez accéder à ces lectures de n’importe où dans le monde en accédant à votre compte ThingSpeak.

Envoi de plusieurs champs (température, humidité et pression)

Dans cette section, vous apprendrez à envoyer plusieurs champs (il s’agit d’envoyer plusieurs valeurs à la fois), nous enverrons des relevés de température, d’humidité et de pression.

Activer plusieurs champs – ThingSpeak

Tout d’abord, vous devez créer plus de champs dans votre compte ThingSpeak. C’est simple. Vous devez aller dans votre Paramètres de canal et ajoutez autant de champs que vous le souhaitez. Dans ce cas, nous avons ajouté deux champs supplémentaires, un pour l’humidité et un autre pour la pression.

Thingspeak ajoute de nouveaux champs les paramètres de canal changent

Enfin, enregistrez la chaîne—cliquez sur le bouton Enregistrer la chaîne bouton.

ESP32 ESP8266 NodeMCU ThingSpeak Enregistrer un nouveau canal

Maintenant, si vous allez au Vue privée onglet, vous devriez avoir trois graphiques. Modifiez les graphiques nouvellement créés avec un titre et des étiquettes d’axe.

ESP32 Écrire plusieurs champs dans ThingSpeak – Code

Le code suivant envoie plusieurs champs à ThingSpeak (température, humidité et pression du capteur BME280).

/*
  Adapted from Example from ThingSpeak Library (Mathworks)
  
  Rui Santos
  Complete project details at https://Raspberryme.com/esp32-thingspeak-publish-arduino/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <WiFi.h>
#include "ThingSpeak.h"
#include <Adafruit_BME280.h>
#include <Adafruit_Sensor.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";   // your network SSID (name) 
const char* password = "REPLACE_WITH_YOUR_PASSWORD";   // your network password

WiFiClient  client;

unsigned long myChannelNumber = X;
const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";

// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

// Variable to hold temperature readings
float temperatureC;
float humidity;
float pressure;
//uncomment if you want to get temperature in Fahrenheit
//float temperatureF;

// Create a sensor object
Adafruit_BME280 bme; //BME280 connect to ESP32 I2C (GPIO 21 = SDA, GPIO 22 = SCL)

void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

void setup() {
  Serial.begin(115200);  //Initialize serial
  initBME();
  
  WiFi.mode(WIFI_STA);   
  
  ThingSpeak.begin(client);  // Initialize ThingSpeak
}

void loop() {
  if ((millis() - lastTime) > timerDelay) {
    
    // Connect or reconnect to WiFi
    if(WiFi.status() != WL_CONNECTED){
      Serial.print("Attempting to connect");
      while(WiFi.status() != WL_CONNECTED){
        WiFi.begin(ssid, password); 
        delay(5000);     
      } 
      Serial.println("nConnected.");
    }

    // Get a new temperature reading
    temperatureC = bme.readTemperature();
    Serial.print("Temperature (ºC): ");
    Serial.println(temperatureC);
    humidity = bme.readHumidity();
    Serial.print("Humidity (%): ");
    Serial.println(humidity);
    pressure = bme.readPressure() / 100.0F;
    Serial.print("Pressure (hPa): ");
    Serial.println(pressure);
    
    //uncomment if you want to get temperature in Fahrenheit
    /*temperatureF = 1.8 * bme.readTemperature() + 32;
    Serial.print("Temperature (ºC): ");
    Serial.println(temperatureF);*/

    // set the fields with the values
    ThingSpeak.setField(1, temperatureC);
    //ThingSpeak.setField(1, temperatureF);
    ThingSpeak.setField(2, humidity);
    ThingSpeak.setField(3, pressure);
    
    // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
    // pieces of information in a channel.  Here, we write to field 1.
    int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

    if(x == 200){
      Serial.println("Channel update successful.");
    }
    else{
      Serial.println("Problem updating channel. HTTP error code " + String(x));
    }
    lastTime = millis();
  }
}

Afficher le code brut

Ce code est très similaire au précédent, mais envoie plusieurs champs. Jetons un coup d’œil aux parties pertinentes pour cet exemple.

Tout d’abord, créez des variables pour conserver les lectures du capteur :

float temperatureC;
float humidity;
float pressure;

Dans le boucler(), obtenez de nouvelles lectures de température, d’humidité et de pression :

// Get a new temperature reading
temperatureC = bme.readTemperature();
Serial.print("Temperature (ºC): ");
Serial.println(temperatureC);
humidity = bme.readHumidity();
Serial.print("Humidity (%): ");
Serial.println(humidity);
pressure = bme.readPressure() / 100.0F;
Serial.print("Pressure (hPa): ");
Serial.println(pressure);

Vous devez attribuer une valeur à chaque champ. Si vous avez créé les champs comme nous l’avons fait, le premier champ correspond à la température, le deuxième à l’humidité et le troisième à la pression. Les lignes suivantes attribuent les valeurs correspondantes à chaque champ à l’aide de la setField() méthode — elle accepte comme arguments le numéro de champ et la valeur :

// set the fields with the values
ThingSpeak.setField(1, temperatureC);
//ThingSpeak.setField(1, temperatureC);
ThingSpeak.setField(2, humidity);
ThingSpeak.setField(3, pressure);

Enfin, utilisez le écrireChamps() méthode et définissez comme arguments le numéro de canal et la clé API d’écriture :

int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

Manifestation

Téléchargez le code précédent sur votre tableau – n’oubliez pas d’insérer vos informations d’identification réseau, Write API Key et le numéro de canal. Après le téléchargement, il devrait se connecter avec succès et envoyer les résignations :

ESP32 écrire plusieurs champs ThingSpeak Serial Monitor

Si vous accédez à votre compte ThingSpeak, sous Vue privée, vous pouvez voir trois graphiques avec les lectures des capteurs.

ESP32 Publier Envoyer les lectures des capteurs à la démonstration ThingSpeak de la manière la plus simple

Conclusion

Dans ce didacticiel, vous avez appris à publier les lectures d’un capteur BME280 vers ThingSpeak à l’aide de l’ESP32 et de la bibliothèque Thingspeak-arduino. Vous pouvez modifier les exemples pour envoyer des lectures de tout autre capteur ou des données de toute autre source. Nous avons des tutoriels pour les capteurs les plus populaires :

Vous pouvez visualiser les lectures des capteurs de n’importe où en vous connectant à votre compte ThingSpeak.

La bibliothèque utilisée tout au long de ce didacticiel fournit plusieurs exemples qui peuvent être utiles :consultez les exemples ici ou dans votre IDE Arduino allez à Déposer > Exemples > ChoseParle, et vous aurez plusieurs exemples.

Nous espérons que vous avez trouvé ce tutoriel utile. En savoir plus sur l’ESP32 avec nos ressources :