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.
Ce projet présente l'utilisation d'un capteur de température de liquide. Ces capteurs sont utilisés dans beaucoup de machines (lave-linges , lave-vaisselle,...) et dans de nombreux projets autour de l'Eau (monitoring d'une rivière, d'un chateau d'eau,...).
A DeltaLab, un projet d'Aquaponie est en projet, et ces capteurs seront évidemment utilisés dès le début.
Ce projet a pour but de présenter l'utilisation d'un capteur de température aquatique, dans le but de l' intégrer à un système plus grand.
Le projet se décompose en 2 parties distinctes : le capteur et la carte Wemos associée, et le serveur Node-RED.
Les fonctionnalités proposées par ce projet sont les suivantes :
Récupération des données des capteurs et affichage dans Node-RED, en passant par MQTT.
Possible stockage dans une BDD.
Arduino IDE : téléchargeable à www.arduino.cc/en/main/software
Node-RED : on assume que vous en avez un, sinon installez-le avec ceci.
Wemos : Fichier > Préférences > URL du gestionnaire de cartes. Entrez l’URL
http://arduino.esp8266.com/staging/package_esp8266com_index.json
Puis Outils > Type de Carte > Gestionnaire de cartes, rechercher ESP8266 et installer. Choisissez ensuite Wemos_D1_mini_pro comme Type de Carte.
Librairies
Librairie ESP8266WiFi : à télécharger à github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
Puis à ajouter à Arduino (dézipper, puis dans Arduino : Croquis > Inclure une Bibliothèque > Ajouter une Bibliothèque .zip, récupérez la librairie dans le dossier librairies).
OneWire & DallasTemperature : dans l'IDE Arduino , allez dans Croquis > Inclure une Bibliothèque > Gérer les Bibliothèques, et entrez le nom des 2 bibliothèques et installez-les.
Le capteur de Température DS18B20 est entièrement Water-Proof. Il en existe de différentes longueurs, les plus longs mesurant plusieurs mètres. La longueur n'est pas problématique pour la qualité des données grâce au support et au protocole utilisé. Il utilise la librairie OneWire, qui permet d'avoir plusieurs capteurs identiques sur une seule Pin et de pouvoir récupérer leurs données individuellement. Il renvoie une température en degré Celsius et fonctionne entre -50 et 80°C.
Le capteur à besoin d'une résistance de 4,7 kΩ entre l'alimentation positive et le câble de données.
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 )
OneWire by Paul Stroffregen (librairie à installer avec le gestionnaire de bibliothèque)
DallasTemperature by Miles Burton (librairie à installer avec le gestionnaire de bibliothèque)
Copiez-collez le code ci-dessous dans un nouveau fichier Arduino.
/*Librairies*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include "PubSubClient.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
/*Constantes*/
#define pin_tmp RX
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"; //serveur MQTT
const int mqttPort = 1883;
/*Variables*/
double tmp;
OneWire Wir(pin_tmp);
DallasTemperature sensor(&Wir);
WiFiClient cli;
PubSubClient mqttClient(cli);
// Reconnexion au serveur mqtt si déconnecté
boolean reconnect() {
if (mqttClient.connect("DHT_MQTT")) {
mqttClient.loop();
}
return mqttClient.connected();
}
// Récupération des donneés des capteurs
void getData(){
sensor.requestTemperatures(); // requête à la sonde pour la température
tmp = sensor.getTempCByIndex(0); // récupère la donnée température
Serial.println(sensor.getTempCByIndex(0)); // affiche la donnée
}
//Initialisation du programme
void setup() {
Serial.begin(115200); // démarrage du moniteur série
Serial.println(F("Starting"));
pinMode(pin_tmp , INPUT_PULLUP); // active la résistance
sensor.begin(); // activation de la sonde
WiFi.hostname("TMP_Probe");
WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
}
mqttClient.setServer(mqttServer,mqttPort);
}
//Boucle automatique
void loop() {
getData();
//Donneés pour MQTT
String contenu = "";
contenu += tmp;
char payload[11];
unsigned int len = contenu.length()+1;
contenu.toCharArray(payload,len);
//Envoi sur MQTT
if(mqttClient.connect("DHT_MQTT")){
Serial.println(payload);
mqttClient.publish("TT",payload);
mqttClient.loop();
}
delay(10000);
}
Dans arduino, pour choisir la bonne carte , allez dans Outils > Type de carte. On utilise ici une Wemos D1 mini. Vérifiez le Port et la vitesse d’écriture (il doit être à 115200).
Pour téléverser le code sur la carte, allez dans croquis > Téléverser, ou cliquez sur la flèche.
Le capteur envoie ses données en MQTT les récupère. Node-RED les lit ensuite grâce à la node MQTT in
Les données sont ensuite récupérées par les nodes de dashboard qui permettent de les afficher : une jauge ainsi qu'un graphe.
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.
Mqtt in
Dans le menu de sélection Server, prenez le localhost si vous avez déjà un broker MQTT.
Sinon prenez Add new mqtt-broker et cliquez sur le bouton à côté.
Dans la partie Connection, mettez localhost dans Server, et 1883 dans Port.
Et dans Protocol, sélectionnez MQTT V3.1.1.
Le Topic sera TMP
Sélectionnez le QoS que vous voulez (privilégiez le 2).
Et dans Output, prenez auto-detect (string or buffer).
Gauges
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: température, humidité, pression
Value format:
température: {{msg.payload.tmp.toFixed(2)}}
Echelle:
température: -5 à 45, unité : °C
Change
Pour la température, cliquez sur add en bas à gauche de Rules.
Mettez la première règle sur Set. Entrez topic, puis tmp ou Température en-dessous.
Ajoutez une deuxième règle et mettez-la sur Move, entrez payload.tmp dans le premier champ et payload dans le deuxième.
Chart
Group: le même que celui des gauges
Type: line chart
axe Y: min = -5 , max = 45 (ou 0 / 50 - pour la beauté de la grille )
Cochez la case enlarge points
Réglez le nombre de points max ou la durée représentée comme vous le souhaitez
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).
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. Essayez d'obtenir le résultat ci-dessous.