Sonde d'humidité du sol

Qu'est-ce que DeltaLab ?

DeltaLab est une association ‘loi 1901’ d’intérêt général, dont l’objectif est la création d’un espace dédié à l’innovation, à la production numérique au prototypage et à l’«expression artistique».

Le principe fondateur de l’association est d’apprendre à faire soi-même, pour passer de l’idée à l’objet.

Deltalab se spécialise en Objets Connectés, et est en train de créer un vaste «écosystème numérique» entre Drôme et Vaucluse, pour répondre à des besoins non couverts, mettre à disposition ressources et équipements pour usage professionnels et instaurer des partenariats avec les autres structures et initiatives numériques existantes.

Deltalab est aussi un FabLab (Fabrication Laboratory / Laboratoire de Fabrication ), un tiers-lieu de type makerspace où se trouve un atelier qui dispose de machines de fabrication comme des Imprimantes 3D ou des découpeuses Laser.

Deltalab se veut ouvert à tous publics : étudiants, professionnels, associations, inventeurs, designers, artistes, etc.

Contexte de cette Documentation

Ce projet présente l'utilisation de sonde d'humidité du sol
A DeltaLab, un projet d'Aquaponie est en projet, et ces capteurs seront évidemment utilisés dès le début.

Introduction

Ce projet a pour but de présenter l'utilisation de sonde d'humidité du sol, dans le but de les intégrer dans un projet plus grand.
Le projet est composé de deux parties distinctes: la
sonde et la carte Wemos associée, et le serveur Node-RED.

Les fonctionnalités sont les suivantes :

  • Récupération des données des capteurs

  • Affichage dans Node-RED

  • Possible stockage dans une base de données

Logiciels

Matériels

  • Wemos D1 mini (vous pouvez l'achetez ici)

  • Shield OLED pour Wemos D1 mini (SSD1306 64x48 pixels) (vous pouvez l'achetez ici)

  • Câble USB-micro USB type B (vous pouvez en acheter ici)

  • 3 jumper wires mâle-femelle (vous pouvez en acheter ici)

  • Sonde d'humidité du sol

  • HD-38 sensor (carte lisant les données de la sonde)

Vous pouvez acheter les deux derniers en allant sur ce site.

Montage

Sonde et capteur

Vous recevrez un kit comme celui-ci si vous commander sur le site ci-dessus.
Il vous suffit de brancher la sonde
au récepteur.
Et souder les pins métalliques au récepteur.
Peu importe le sens, il faut pouvoir brancher le récepteur à la
Wemos.

Ensuite vous devez branchez le récepteur au Wemos.
A0 --> A0
- --> G
+ --> 5V

Wemos et écran OLED

Le circuit est extrêmement simple. Le Wemos D1, l'écran OLED sont fixés sur des shields qui s'emboitent les uns sur les autres.
Vous devez juste les emboitez dans le bon sens, les mêmes pins les unes sur les autres (3V avec 3V, RST avec RST, etc).
Des soudures sont à prévoir pour installer les bonnes pins pour l'emboitage

Arduino

Pour installer Arduino IDE, alors Google... Merci d'avoir suivi ce tuto.

Une fois installé, allez dans Fichier > Préférences et ajoutez ce lien dans URL de gestionnaire de cartes supplémentaires en cliquant sur le bouton à droite.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Ce fichier vous permettra de coder toutes les cartes équipées d'ESP8266.

Ensuite, allez dans Outils > type de carte > Gestionnaire de carte.
Et tapez
esp8266 dans la barre de recherche, puis installez cette carte à la dernière version.

Toujours dans Outils, sélectionnez la carte Lolin(WEMOS) D1 R2 & mini en allant dans Type de carte > ESP8266 Boards.

Une fois fait, vous devriez voir cela dans Outils. Veuillez donc mettre les paramètres comme indiqués sur l'image.

Branchez le Wemos au PC avec votre câble USB.
Remarque: pour que la Wemos puisse tourner en boucle il faut qu'elle soit constamment branchée sur le courant.

Code Arduino

Librairies

  • ESP8266WiFi ( intégré lors du téléchargement des cartes esp8266)

  • PubSubClient by Nick O'Leary (librairie à installer avec le gestionnaire de bibliothèque)

  • WiFiClient ( intégré lors du téléchargement des cartes esp8266)

  • Adafruit GFX Library by Adafruit (librairie à installer avec le gestionnaire de bibliothèque)

  • Adafruit SSD1306 Wemos Mini OLED by Adafruit (librairie à installer avec le gestionnaire de bibliothèque)

Code

Copiez-collez le code ci-dessous dans un nouveau fichier Arduino

//Bibliothèques pour la communication en WiFi
#include <SPI.h>
#include <Wire.h>
#include "PubSubClient.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>

//Bibliothèques pour l'écran OLED
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Variables pour la prise de données
#define SensorPin A0 //pin de récupération de donnée
int valeur = 0;

//Variables pour l'écran OLED
#define OLED_RESET 0 // GPIO1
Adafruit_SSD1306 display(OLED_RESET);

//Variables pour la communication en WiFi
WiFiClient cli;
PubSubClient mqttClient(cli);
const char* ssid =
le votre; // le nom de votre point wifi
const char* password =
le votre; // Mot de passe du point Wifi
const char* mqttServer =
le votre; // l'adresse IP du serveur MQTT
const int mqttPort = 1883;

//Constantes de temps
static const uint32_t DELAI_1_S = 1000;
static const uint32_t DELAI_1_M = 60 * DELAI_1_S;
static const uint32_t DELAI_1_H = 60 * DELAI_1_M;

// Initialisation du programme
void setup() {
Serial.begin(115200);
// Démarrage du moniteur série
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// adresse I2C pour l'écran (64x48) : 0x3C
display.display();
WiFi.hostname("HSOL_MQTT");
WiFi.begin(ssid,password);
//Démarrage de la connection WiFi
while(WiFi.status() != WL_CONNECTED){
//Délai d'attente si la connexion n'est pas bonne
delay(500);
}
mqttClient.setServer(mqttServer,mqttPort);
}

//boucle automatique
void loop() {
valeur=analogRead(SensorPin) ;
// lire la valeur du capteur
valeur=map(valeur, 0, 1023, 100, 0);

Serial.println(valeur); // Afficher la valeur sur le moniteur série
//Affichage des données sur l'écran

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Soil \nHumidity");
display.print(valeur);
display.print(" %");
display.display();

//Donneés pour MQTT
String contenu = "";
contenu += valeur;
char payload[11];
unsigned int len = contenu.length()+1;
contenu.toCharArray(payload,len);

//Envoi sur MQTT
if(mqttClient.connect("PH_METER_MQTT")){
Serial.println(payload);
mqttClient.publish("shum",payload);
mqttClient.loop();
}
delay(2 * DELAI_1_M);
}

Node-RED

Flow

Explications

  • Après que le Wemos ait reçu les données de la sonde, on cherche à les mettre sous forme de graphique.

  • Le Wemos envoie donc les données en WiFi vers un broker MQTT.

  • On utilise Node-RED pour récupérer les données envoyées au broker et ainsi nous pouvons jouer avec les données de la sonde.

  • Les données sont récupérées par les nodes de dashboard qui permettent de les afficher : des jauges pour la pression, l'humidité et la température, ainsi qu'un graphe pour l'évolution de ces deux dernières.

  • On peut y associer une node 'file' pour enregistrer les données dans un fichier sur le serveur, ou une node de base de données pour y enregistrer les données choisies.

  • Chaque fois que vous finissez de configurer un node, cliquez sur Done.

  • ATTENTION : pour enregistrer vos modifications, cliquez sur Deploy.

Pour le refaire

MQTT in

    • MQTT in

      • Serveur local : add new mqtt-broker, puis cliquez sur le crayon à droite

        • Server : localhost

        • Port : 1883

      • QoS : 2

      • Topic : shum

Function

Copiez-collez ceci dans la section Function:

var hum = parseFloat(msg.payload);
var newHumTemp = {payload:hum, topic:msg.topic};
return newHumTemp;

Gauge

Pour les jauges, prenez deux de ce node et connectez-les au mqtt-in et configurez-les de cette manière :

  • Group: créez un nouveau groupe

    • ui_tab : créez une nouvelle

    • width(largeur) : à votre guise

    • name : celui que vous voulez

  • Type: gauge

  • Label: humidité

  • Value format:

    • humidité: {{msg.payload}}

  • Echelle:

    • humidité: 0 à 100, unité : %

Chart

  • Group: le même que celui des gauges

  • Type: line chart

  • Label : Humidité du sol

  • axe Y: min = 0 , max = 100

  • Cochez la case enlarge points

  • Réglez le nombre de points max ou la durée représentée comme vous le souhaitez

Debug

N'hésitez pas à connectez des nodes de debug, cela permet de savoir si vos données arrive bien et au bon format.
Pour voir les données là où vous avez connecté des debug, cliquez sur le petit insecte en haut à droite de l'écran, puis all nodes puis current flow pour voir le flux du flow sur lequel vous travaillez.

Interface utilisateur

L'intérêt de tout ceci est pour la visualisation des données. Node-RED permet ceci avec une interface utilisateur.
Pour y accéder, avec le moteur de recherche que vous voulez, tapez l'ip du serveur Node-RED, puis deux points, puis le numéro port puis /ui (XXX.XXX.XXX.XXX:YYYY/ui).

Mise en forme

Pour mettre en forme l'interface utilisateur, retournez dans Node-RED
Cliquez sur les trois barres en haut à droite, allez dans
View puis cliquez sur Dashboard.
En mettant le curseur sur le
nom du groupe des jauges et du graphe, cliquez sur layout.
Sur la droite réglez la largeur de l'interface sur
Width. Ensuite cliquez sur Done, puis sur Deploy et revenez dans le layout pour faire la mise en forme.