![]() |
Mesure de la temperature |
novembre 2019 |
Un circuit "minute" ! En effet il ne faut que quelques minutes pour réaliser un tel circuit.
Merci aux ingénieurs qui nous proposent des circuits "LEGO" comme l'ESP, le LCD OLED ou le "Sensor de température LM75".
Merci aux développeurs des librairies Arduino / ESP qui nous facilitent grandement la tâche pour exploiter ces circuits !
Merci aux inventeurs de I2C !
Merci aux développeurs de la suite MQTT, MOSQUITTO, INFLUXDB, GRAFANA !
Alors avec tous les cadeaux tombés du ciel vous prenez :
- Un circuit WEMOS D1 R1 ou D1 mini (un ESP8266 monté sur un circuit imprimé avec l'alim 3v3 / 5v, les résistances de polarisation de l'esp, une interface mini USB).
- Un circuit LCD OLED en I2C.
- Un sensor de température à base de LM75 (j'ai utilisé ce circuit plutôt qu'un DTxx car l'info humidité ne m'intéressait pas).
Vous sortez votre fer à souder car il y a 4 fils à souder sur une plaquette d'essai (Alim + et - et deux fils I2C (SCL et SDA)). Vous avez terminé !
Vous téléchargez à l'aide de l'interface Arduino un petit programme comme celui que je vous propose plus bas (Parametres : Type de carte "WeMos D1R1", Port "COM6" et vitesse "921600).
Il ne vous reste plus qu'à récupérer les données sous NODE-RED et à afficher de beaux graphiques avec GRAFANA.
Affichage de la température comme sur un vulgère thermomètre, mais le plus, c'est que toutes les 3 minutes (aproximativement)
la température est envoyée vers un serveur mosquitto pour mémorisation et exploitation à votre convenance.
Les trois circuits utilisés sont très faciles à trouver dans le commerce. Chercher dans moteur de recherche :
Esp-8266 D1 mini
sensor lm75
oled ssd1306
Il vous faudra sortir le portefeuille ! Au moins un billet de cinq euros !!!!
Le schéma est on ne peut plus simple !!!!
Comme on peut le voir il n'y a vraiment que peu de connexions à réaliser.
Les fils alim et I2C sont simplement à souder sur les trois circuits.
Pour I2C sur l'ESP on utilise Gpio4 et Gpio5 ce qui correspond à D2 et D1 sur la carte "D1 mini".
Donc attention, si vous utilisez un esp sans le suport "D1 mini", il faut utiliser les sorties 5 et 4 et non pas 1 et 2 !
Côté NODE-RED maintenant vous connaissez ! On récupère les données reçues dans MOSQUITTO puis on utilise une fonction pour ne garder que la valeur numérique, ensuite on enregistre le résultat dans InfluxDB et en parallèle on va créer un petit graphique en directe dans node-red. Pour un graphique plus évolué on récupèrera les données de InfluxDB avec le logiciel Grafana...
Sur NODE-RED pour afficher les graphiques créés, il suffit d'aller sur l'adresse http://adresseIPnodered:1880/ui voici un exemple de ce que l'on peut facilement obtenir.
Le code de base qui doit vous permettre de démarrer pour vos propres projets...
// Mesure de la temperature interieur
// novembre 2019
// Castoo
#include "ESP8266WiFi.h"
#include "PubSubClient.h"
#include "Wire.h"
#include "SSD1306Wire.h"
#include "Temperature_LM75_Derived.h"
// l'adresse I2C (ici 0x3C) peut être différente en fonction du module utilisé
SSD1306Wire display(0x3c, 4, 5);
Generic_LM75 temperature; // Declaration variable de lecture de la température
const char* box = "raspi-mqtt"; // Nom du ssid du serveur raspberry Mosquitto
const char* m_passe = "xxxxxxxxxxxxxx"; // Passe WiFi
const char* mqtt_server = "10.3.141.1"; // Adr de serveur mosquitto
const char* mqtt_user = "admin"; // login sur serveur mosquitto
const char* mqtt_password = "xxxxxxxxxxx"; // Passe sur serveur mosquitto
char msg_envoye[50];
char ch_result[10];
WiFiClient espClient; // déclaration Objet wifi
PubSubClient client(espClient); // déclaration objet mosquitto
// ------------------- Cnx au serveur Raspberry Mosquitto ------------------
void setup_wifi() {
delay(10);
WiFi.begin(box, m_passe);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
randomSeed(micros());
}
// ----------------------------- Cnx à mosquitto ------------------------
void reconnect() {
while (!client.connected()) {
String clientId = "ESP8266CuveEau-"; // Creatation d'un ID aléatoire (identification ESP sur mosquitto)
clientId += String(random(0xffff), HEX);
if (!client.connect(clientId.c_str(), mqtt_user, mqtt_password)) { delay(5000); }
}
}
void setup(){
// initialisation de l'ecran (voir la documentation de la librairie)
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_24); // ArialMT_Plain_10
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.clear();
delay(500);
setup_wifi(); // cnx wifi
client.setServer(mqtt_server, 1883); // cnx mosquitto
delay(2000);
Wire.begin();
}
void loop(){
float resultat = 0;
resultat = temperature.readTemperatureC();
snprintf (ch_result, 50, "%.2f °", resultat);
display.clear();
display.drawString(64, 22, ch_result);
display.display();
if (!client.connected()) { reconnect(); }
client.loop();
snprintf (msg_envoye, 50, "T %.2f °", resultat);
client.publish("temp_interieur", msg_envoye);
delay(100000); // environ 3 minutes
display.clear();
display.drawString(64, 22, "Données émises");
display.drawString(100, 32, msg_envoye);
display.display();
}
Doc carte Wemos sur l'excellent site "Projets DIY" : Version D1 mini pro.
Doc sensor
Data-sheet du LM75.Un circuit vraiment facile à tester, on trouve plein de circuits de mesure de température à base d'esp et de DTxxx. Je trouve qu'avec I2C, il est super facile d'avoir une lecture directe de la température à l'enfroit de la mesure et c'est bien pratique sans difficulté supplèmentaire...