esp8266 : Surveiller ses plantes

3 minute(s) de lecture

Vouloir fleurir son chez soi c’est sympa, mais parfois, on a pas spécialement le temps d’aller voir si les pauvres petites on soif ou pas. Du coup, pourquoi ne pas mettre en place un système de surveillance ?

C’est que l’on va faire!

Et comment ? Tout simplement avec un esp8266 et une petite sonde d’humidité.

Pour faire cela on va avoir besoin d’un peut de matériel :

  • un eps8266 pour le wifi

esp8266

  • une sonde pour mesurer l’humidité du sol (attention ce genre de sonde on tendance a s’user rapidement, pensez a en prendre plusieurs)

moisture sensor

  • et un dht11 pour mesurer l’humidité dans l’air ainsi que la température ambiante

dht11

Où stocker mes données ?

Personnellement, j’ai choisi de tout mettre chez  thingspeak.com . Pourquoi ? Car leur api est simple et le petit plus, c’est que c’est gratuit.

Pour pouvoir utiliser thingspeak il va falloir commencé par s’inscrire, jusque la c’est assez simple, ensuite il vas falloir créer ce qu’il appelle un « channels », dans notre cas on aura besoin de trois voies comme sur l’exemple ci-dessous :

example channels thingspeak

Ensuite, il va nous falloir recuperer l’id de notre channels ainsi que son api key:

thingspeak api key

 

Maintenant que la réception des données est prêtes, on va pouvoir s’attaquer à l’esp8266.

Programme pour l’esp8266 :

#include <stdlib.h>
#include "DHT.h"
#include <ESP8266WiFi.h>



const char* SSID = "Votre Wifi";
const char* password = "Mot de passe wifi";

const char* host = "api.thingspeak.com";
const char* writeKey = "Votre cles API";
const int httpPort = 80;
#define DHTPIN 2    // Connect to ESP8266 GPIO2 pin
#define DHTTYPE DHT11   // Define DHT type

#define DELAY_TIME 1000 *60 //ten minutes interval between updating data

#define BAUD_RATE 115200

DHT dht(DHTPIN, DHTTYPE);

//set up module like main founction
void setup()
{
  Serial.begin(BAUD_RATE);

  bool initiated = initWIFI();

  // invoke only WIFI module has been setted up 
  if(initiated){
    Serial.println("WIFI Module initiated!");
    //initalize DHT sensor
    dht.begin();
  };
 
}

//this runs over and over
void loop(){
  float h2 = dht.readHumidity();
  // if Read temperature as Fahrenheit then set a parameter (isFahrenheit = true)
  float c = dht.readTemperature();
  float h = analogRead(A0);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(c)) {
    Serial.println("read temperature or humidity data error!");
    return;
  }
  
  Serial.print("read temperature:");
  Serial.println(c);
  Serial.print("read humidity sol:");
  Serial.println(h);
  Serial.print("read humidity Air:");
  Serial.println(h2);

  Serial.println("begin to upload data to ThingSpeak.");

  //update ThingSpeak channel with new values
  bool isUploaded = uploadDataToThingSpeak(String(c), String(h),String(h2));
 
  if (isUploaded) {
     Serial.println(" data uploaded!");
  } else {
     Serial.println(" data upload failed!");
  }
  //wait for delay time before attempting to post again
  delay(DELAY_TIME);
}

bool initWIFI() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID,password);

  Serial.print("Connecting");

  // waitting for wifi connected.
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());

  return true;
}

bool uploadDataToThingSpeak(String temperatureC, String humiditySol, String humidityAir) {
WiFiClient client;

  if (!client.connect(host, httpPort)) {
    return false;
  }

  // compose ThindSpeak update data url
  String url = "/update?key=";
  url = url + writeKey;
  url = url + "&field1=";
  url = url + String(temperatureC);
  url = url + "&field2=";
  url = url + String(humiditySol);
  url = url + "&field3=";
  url = url + String(humidityAir);
  url = url + "\r\n";
  
  // This will send the request to the ThingSpeak
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");

  return true;
}

Maintenant, c’est à vous de modifiez pour mettre vos clés api ainsi que votre configuration wifi 🙂

Ce que cela donne ?
Thingspeak view

Après pour la visualisation soit on utilise leur page web, soit on peut trouver des applications sur le playstore d’Android ( il doit exister la même chose sur ios)
Soit on peut se servir de l’api de lecture pour ce faire sa propre application.

Catégories :

Mis à jour :