Outils d'utilisateurs

Outils du Site


projets:station_meteo_esp8266

Station méteo à base d'esp8266 - Partie 1

Réalisation d'une petite station DIY. Cette première partie décrira l'utilisation des module capteur de température, humidité, luminosité et pression avec un ESP8266.

:NOTE: Documentation en cours de rédaction

Conception

L'idée est ici de débuter la conception d'un petit module installé à l'extérieur et captant la température, humidité, luminosité et pression a intervalles réguliers et envoyant ces information à une base (que je ne détaillerai pas ici, mais cela sera sûrement un Raspberry pi) en Wifi. Pour cela je vais utiliser un micro-contrôleur ESP8266, et pour me simplifier la vie j’utiliserai la carte Node-MCU ESP12E, pourvue de toute ce qu'il faut pour être programmée sans avoir à utiliser de composants supplémentaires.

Pour programmer mon micro-contrôleur j'utiliserai l'environnement Arduino.

J'utiliserai 3 capteurs communiquant en I2C (liaison série adressée) :

  • Capteur de luminosité : BH1750
  • Capteur d'humidité et de température : HTU21
  • Capteur de pression (baromètre) et de température : BMP085

Ces capteurs sont compatible 3.3v, tension de fonctionnement de l'ESP8266.

Réalisation

Environnement arduino

Selectionner le type de carte Node MCU 1.0 Fig. 1: Selectionner le type de carte Node MCU 1.0 Avant de débuter il faut installer l'envionnement arduino, et y ajouter le support de l'ESP8266 comme indiqué dans cet article.

J'ai ensuite sélectionné ma carte (Node MCU 1.0 -ESP-12E Module) dans le menu outil (cf. figure 1).

Utilisation du capteur de luminosité BH1750

Connexions

Connexion du BH1750 Fig. 2: Connexion du BH1750

La connexion (bh1750) au node-MCU est assez simple. L'alimentation (3.3v & Masse) les deux broches i2c : nous utiliseront la broche `D5` pour SDA et `D6` pour SCL (ces broches sont configurables dans le programme). La broche ADD est mise à la masse pouer utiliser l'adresse par défaut du module.

Bibliothèque arduino pour piloter le capteur

:TODO: Détailler l'installation de la bibliothèque : https://github.com/claws/BH1750

Programmation

bh1750.ino
/*
  Connexion:
 
    VCC -> 3V3
    GND -> GND
    SCL -> D6
    ADD -> (not connected) or GND
 
  La broche ADD est utilisée pour configurer l'adresse I2C du capteur. 
  À l'état haut (connectée à VCC) l'adresse sera 0x5C.
  À l'état bas (connectée à la masse)l'adresse sera 0x23 (valeur par défaut).
 
*/
 
#include <Wire.h>
#include <BH1750.h>
 
BH1750 lightMeter;
 
 
void setup(){
 
  // Initalisation de la liaison series a 9600Bauds pour envoyer les inforamtions lues
  Serial.begin(9600);
 
  // Initalisation du bus I2C sur les broches D5 et D6.
  Wire.begin(D5,D6);
 
  //Initailisation du module de capteur de lumière
  lightMeter.begin();
 
}
 
 
void loop() {
 
  // Lecture de la luminosite
  uint16_t lux = lightMeter.readLightLevel();
 
  //Envoi de la valeur lue sur la connection serie.
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
 
}

Compiler et téléverser le programme sur le node-MCU, puis ouvrir le moniteur série (il doit être configuré a 9600bps) pour voir les valeurs relevées par le capteur.

Utilisation du capteur d'humidité & température HTU21

Connexions

  • VCC : 3.3v
  • GND : GND
  • SDA : D5
  • SCL : D6

Bibliothèque arduino pour piloter le capteur

:TODO: Détailler l'installation de la bibliothèque : https://github.com/adafruit/Adafruit_HTU21DF_Library

Programmation

HTU21.ino
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
 
/*
  Connexion:
 
    VCC -> 3V3
    GND -> GND
    SCL -> D6
 
*/
 
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
 
void setup() {
 
  Serial.begin(9600);
  Serial.println("HTU21D-F test");
  Wire.begin(D5,D6);
 
  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}
 
 
void loop() {
  Serial.print("Temp: "); Serial.print(htu.readTemperature());
  Serial.print("\t\tHum: "); Serial.println(htu.readHumidity());
  delay(500);
}

Utilisation du capteur de pression(baromètre) & température BMP085

Connexions

  • VCC : 3.3v
  • GND : GND
  • SDA : D5
  • SCL : D6

Bibliothèque arduino pour piloter le capteur

:TODO: Détailler l'installation de la bibliothèque : https://github.com/adafruit/Adafruit-BMP085-Library

Programmation

BMP085.ino
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
 
/*
  Connexion:
 
    VCC -> 3V3
    GND -> GND
    SCL -> D6
 
*/
 
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
 
 
/**************************************************************************/
/*
    Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void) 
{
  Serial.begin(9600);
 
 
  /* Initialisation du capteur */
  Wire.begin(D5,D6);
  if(!bmp.begin())
  {
    Serial.print("Erreur : aucun capteur BMP085 detecte");
    while(1);
  }
 
 
}
 
 
void loop(void) 
{
  /* Récupère les données (événement) du capteur */ 
  sensors_event_t event;
  bmp.getEvent(&event);
 
  /* Affichage des resultats  */
  if (event.pressure)
  {
    /* Display atmospheric pressue in hPa */
    Serial.print("Pressure:    ");
    Serial.print(event.pressure);
    Serial.println(" hPa");
 
 
    /* Affichage de la temperature */
    float temperature;
    bmp.getTemperature(&temperature);
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" C");
 
 
    /* Calculating altitude with reasonable accuracy requires pressure    *
     * sea level pressure for your position at the moment the data is     *
     * converted, as well as the ambient temperature in degress           *
     * celcius.  If you don't have these values, a 'generic' value of     *
     * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA   *
     * in sensors.h), but this isn't ideal and will give variable         *
     * results from one day to the next.                                  *
     *                                                                    *
     * You can usually find the current SLP value by looking at weather   *
     * websites or from environmental information centers near any major  *
     * airport.                                                           *
     *                                                                    *
     * For example, for Paris, France you can check the current mean      *
     * pressure and sea level at: http://bit.ly/16Au8ol                   */
 
    /* Calcul de l'altitude en fonction de la pression et de la temperature */
 
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("Altitude:    "); 
    Serial.print(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure)); 
    Serial.println(" m");
    Serial.println("");
  }
  else
  {
    Serial.println("Sensor error");
  }
  delay(1000);
}
projets/station_meteo_esp8266.txt · Dernière modification: 2018/04/21 18:21 par bumblebee