Ceci est une ancienne révision du document !
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.
Documentation en cours de rédaction
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) :
Ces capteurs sont compatible 3.3v, tension de fonctionnement de l'ESP8266.
J'ai ensuite sélectionné ma carte (Node MCU 1.0 -ESP-12E Module) dans le menu outil (cf. figure 1).
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.
Détailler l'installation de la bibliothèque : https://github.com/claws/BH1750
/* 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.
Détailler l'installation de la bibliothèque : https://github.com/adafruit/Adafruit_HTU21DF_Library
#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); }
Détailler l'installation de la bibliothèque : https://github.com/adafruit/Adafruit-BMP085-Library
#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); }