Tâche quotidienne ESP8266 – Publier les relevés de température sur ThingSpeak

Tâche quotidienne ESP8266 - Publier les relevés de température sur ThingSpeak

Dans ce projet, vous allez apprendre à construire un nœud de capteur avec un ESP8266 qui publie la température et l’humidité une fois par jour sur un service gratuit appelé Thing Speak.

Tache quotidienne ESP8266 Publier les releves de temperature sur

Regardez le didacticiel vidéo et la démonstration du projet

Ce guide est disponible en format vidéo (voir ci-dessous) et en format écrit (continuer la lecture).

YouTube video

Conditions préalables

Avant de poursuivre ce didacticiel, nous vous recommandons de consulter ces ressources :

Si vous aimez ESP8266 et que vous souhaitez en savoir plus. Je recommande de télécharger mon cours : Domotique avec ESP8266.

Pièces nécessaires

Pour ce projet, vous aurez besoin des composants suivants :

1644696008 71 Tache quotidienne ESP8266 Publier les releves de temperature sur

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

Tache quotidienne ESP8266 Publier les releves de temperature sur

Schémas

Le circuit est très facile à assembler et aucune soudure n’est nécessaire, suivez simplement le schéma suivant.

1644696008 527 Tache quotidienne ESP8266 Publier les releves de temperature sur

Préparation de l’IDE Arduino

Noter: vous devriez avoir installé le module complémentaire ESP8266 dans l’IDE Arduino.

Après avoir préparé le circuit, ouvrez votre IDE Arduino et installez deux bibliothèques Arduino. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques…

1644696009 702 Tache quotidienne ESP8266 Publier les releves de temperature sur

Rechercher DHT (ou télécharger ici). Appuyez sur la « Installer » bouton.

1644696009 350 Tache quotidienne ESP8266 Publier les releves de temperature sur

Noter: vous devrez peut-être également installer le Bibliothèque de capteurs Adafruit.

Ensuite, vous devrez également rechercher Tâche quotidienne ESP et installez cette bibliothèque (ou télécharger ici).

1644696009 86 Tache quotidienne ESP8266 Publier les releves de temperature sur

Chose Parle

Pour ce projet, nous utiliserons ThingSpeak.com. Thing Speak vous permet de publier vos lectures de capteurs sur leur site Web et de les afficher dans un graphique avec des horodatages. Ensuite, vous pouvez accéder à vos lectures de n’importe où dans le monde.

1644696009 827 Tache quotidienne ESP8266 Publier les releves de temperature sur

Il faut dire que ce projet peut être facilement modifié pour publier les valeurs sur votre hub domotique ou une autre application au lieu de Thing Speak.

Le concept principal que je veux vous montrer avec ce projet est de savoir comment vous pouvez mettre votre ESP8266 constamment en mode veille profonde, en publiant une valeur toutes les 24 heures.

Création d’une nouvelle chaîne

Si vous n’avez pas de compte sur Thing Speak, vous devrez en créer un. Une fois votre compte prêt, connectez-vous et ouvrez le « Canauxonglet « .

1644696009 57 Tache quotidienne ESP8266 Publier les releves de temperature sur

Appuyez sur la création « Nouvelle chaînebouton « l » :

1644696009 474 Tache quotidienne ESP8266 Publier les releves de temperature sur

Saisissez un nom pour votre chaîne, ajoutez une description et activez un deuxième champ. Le champ 1 recevra le Humidité lectures et Champ 2 les Température lectures. Une fois que vous avez rempli tous ces champs, enregistrez votre chaîne.

1644696010 212 Tache quotidienne ESP8266 Publier les releves de temperature sur

Personnalisation du graphique

Ces graphiques peuvent être personnalisés, accédez à votre onglet Vue privée et appuyez sur l’icône d’édition :

1644696010 739 Tache quotidienne ESP8266 Publier les releves de temperature sur

Vous pouvez donner un titre à chaque graphique, par exemple le premier graphique s’appellera Humidité % et mon deuxième graphique s’appellera Température ºC.

1644696010 608 Tache quotidienne ESP8266 Publier les releves de temperature sur

Vous pouvez également personnaliser la couleur d’arrière-plan, les axes x et y, et bien plus encore, comme vous pouvez le voir. Lorsque vous avez terminé, appuyez sur le « Sauvegarder » bouton.

1644696010 866 Tache quotidienne ESP8266 Publier les releves de temperature sur

Écrire la clé API

Pour publier des valeurs avec l’ESP8266, vous avez besoin du Écrire la clé API. Ouvrez le « Clés API » et copiez la clé d’API d’écriture dans un endroit sûr car vous en aurez besoin dans un instant.

1644696010 690 Tache quotidienne ESP8266 Publier les releves de temperature sur

Télécharger le code

Revenez à votre IDE Arduino et copiez le code ci-dessous :

/*
 * ESP8266 Daily Task
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 */
 
#include <ESP8266WiFi.h>
#include <ESPDailyTask.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Replace with your SSID and Password
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Replace with your unique Thing Speak WRITE API KEY
const char* apiKey = "REPLACE_WITH_YOUR_ThingSpeak_WRITE_API_KEY";

const char* resource = "/update?api_key=";

// Thing Speak API server 
const char* server = "api.thingspeak.com";

// Set this for what time your daily code should run 
ESPDailyTask dailyTask(11*60 + 15); // 11:15am

// DHT Sensor
const int DHTPin = 5;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Temporary variables
static char temperatureTemp[7];
static char humidityTemp[7];

void setup() {
  // Initializing serial port for debugging purposes
  Serial.begin(115200);
  delay(10);
  
  dailyTask.sleep1Day();
  
  // put your daily code here...
  dht.begin();
  
  initWifi();
  makeHTTPRequest();

  // and back to sleep once daily code is done  
  dailyTask.backToSleep();
}

void loop() {
  // sleeping so wont get here
}

// Establish a Wi-Fi connection with your router
void initWifi() {
  Serial.print("Connecting to: "); 
  Serial.print(ssid);
  WiFi.begin(ssid, password);  

  int timeout = 10 * 4; // 10 seconds
  while(WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if(WiFi.status() != WL_CONNECTED) {
     Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: "); 
  Serial.print(millis());
  Serial.print(", IP address: "); 
  Serial.println(WiFi.localIP());
}

// Make an HTTP request to Thing Speak
void makeHTTPRequest() {
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan
    Serial.println("Failed to read from DHT sensor!");
    strcpy(temperatureTemp,"Failed");
    strcpy(humidityTemp, "Failed");
    return;    
  }
  else {
    // Computes temperature values in Celsius + Fahrenheit and Humidity
    float hic = dht.computeHeatIndex(t, h, false); 
    // Comment the next line, if you prefer to use Fahrenheit      
    dtostrf(hic, 6, 2, temperatureTemp);
                 
    float hif = dht.computeHeatIndex(f, h);
    // Uncomment the next line, if you want to use Fahrenheit
    //dtostrf(hif, 6, 2, temperatureTemp);   
          
    dtostrf(h, 6, 2, humidityTemp);
    // You can delete the following Serial.print's, it's just for debugging purposes
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t Temperature: ");
    Serial.print
    Serial.print(" *C ");
    Serial.print(f);
    Serial.print(" *F\t Heat index: ");
    Serial.print(hic);
    Serial.print(" *C ");
    Serial.print(hif);
    Serial.print(" *F");
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t Temperature: ");
    Serial.print
    Serial.print(" *C ");
    Serial.print(f);
    Serial.print(" *F\t Heat index: ");
    Serial.print(hic);
    Serial.print(" *C ");
    Serial.print(hif);
    Serial.println(" *F");
  }
  
  Serial.print("Connecting to "); 
  Serial.print(server);
  
  WiFiClient client;
  int retries = 5;
  while(!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if(!!!client.connected()) {
     Serial.println("Failed to connect, going back to sleep");
  }
  
  Serial.print("Request resource: "); 
  Serial.println(resource);
  client.print(String("GET ") + resource + apiKey + "&field1=" + humidityTemp + "&field2=" + temperatureTemp +
                  " HTTP/1.1\r\n" +
                  "Host: " + server + "\r\n" + 
                  "Connection: close\r\n\r\n");
                  
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
     Serial.println("No response, going back to sleep");
  }
  while(client.available()){
    Serial.write(client.read());
  }
  
  Serial.println("\nclosing connection");
  client.stop();
}

Afficher le code brut

Préparation de votre code

Il y a 3 variables que vous devez changer. Ajoutez votre SSID et votre mot de passe pour que votre ESP puisse établir une communication avec votre routeur :

// Replace with your SSID and Password
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Saisissez votre clé d’API Thing Speak Write dans cette variable :

// Replace with your unique Thing Speak WRITE API KEY
const char* apiKey = "REPLACE_WITH_YOUR_ThingSpeak_WRITE_API_KEY";

Comprendre le code

Nous pouvons maintenant examiner de plus près le code. La fonction setup() commence par initialiser le port série.

void setup() {
 // Initializing serial port for debugging purposes
 Serial.begin(115200);
 delay(10);

Ensuite, il appelle la fonction de tâche quotidienne ESP pour déterminer si 24 heures se sont écoulées ou non depuis la dernière lecture. Sinon, l’ESP repasse en mode veille profonde.

 dailyTask.sleep1Day();

Cependant, si 24 heures se sont écoulées depuis la dernière lecture, le code continuera. Ainsi, il va initialiser le capteur DHT, se connecter au routeur Wi-Fi et faire une requête HTTP GET à Thing Speak afin de publier les lectures.

 // put your daily code here...
 dht.begin();

 initWifi();
 makeHTTPRequest();

Une fois les lectures publiées, l’ESP repasse en mode veille profonde.

 // and back to sleep once daily code is done
 dailyTask.backToSleep();
}

Il n’y a rien dans la fonction loop(), car votre ESP est constamment en mode veille profonde et se réveille.

void loop() {
 // sleeping so wont get here
}

Autres changements – capteur et degrés Fahrenheit différents

Notez que si vous utilisez un capteur différent du DHT11, vous pouvez commenter et décommenter la bonne ligne DEFINE pour utiliser votre capteur.

// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

Il y a aussi une autre chose importante que vous pouvez changer. Par défaut, ce code publie la température en degrés Celsius, mais si vous commentez la variable surlignée en rouge et décommentez la variable surlignée en vert, il publiera la température en degrés Fahrenheit .

// Computes temperature values in Celsius + Fahrenheit and Humidity
float hic = dht.computeHeatIndex(t, h, false);
// Comment the next line, if you prefer to use Fahrenheit
dtostrf(hic, 6, 2, temperatureTemp);

float hif = dht.computeHeatIndex(f, h);
// Uncomment the next line, if you want to use Fahrenheit
//dtostrf(hif, 6, 2, temperatureTemp);

Une fois que vous avez effectué toutes les modifications, vous pouvez télécharger le code sur votre carte ESP.

Tester le projet

Enfin, ouvrez le moniteur série Arduino IDE à un débit en bauds de 115200. Vous pouvez tester votre projet et simuler chaque heure qui passe. Retirez simplement le fil qui relie la broche RESET à D0 (GPIO 16), puis vous n’aurez plus qu’à appuyer sur le bouton RESET pour simuler chaque heure qui passe.

1644696010 802 Tache quotidienne ESP8266 Publier les releves de temperature sur

Ainsi, vous devez appuyer 24 fois pour publier une lecture. La variable du compteur augmente chaque fois que vous appuyez sur le bouton de réinitialisation. Une fois que vous avez réinitialisé l’ESP8266 24 fois, il publiera les lectures sur Thing Speak.

1644696011 245 Tache quotidienne ESP8266 Publier les releves de temperature sur

Comme vous pouvez le voir, l’humidité et la température ont été publiées avec succès et tracées dans le graphique en temps réel.

1644696011 306 Tache quotidienne ESP8266 Publier les releves de temperature sur

1644696011 489 Tache quotidienne ESP8266 Publier les releves de temperature sur

Après avoir testé le circuit, vous devez reconnecter le fil de RESET à D0. L’ESP se réveillera toutes les heures, mais il ne publiera une valeur que toutes les 24 heures.

Conclusion

J’espère que ce projet a été utile. Maintenant, vous savez comment appliquer le concept de tâche quotidienne à n’importe quel projet.

Ceci est un extrait de ma domotique à l’aide de l’eBook ESP8266. Si vous aimez ESP8266 et que vous souhaitez en savoir plus. Je recommande de télécharger mon cours : Domotique avec ESP8266.

J’espère que ce guide a été utile. Merci d’avoir lu!