Dashboard Grafana. Monitoring d’un panneau solaire en WiFi avec un ESP8266

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Table des matières

Grafana permet de créer très rapidement des dashboards pour suivre graphiquement l’évolution de mesures physiques (température, ensoleillement, teneur en particules dans une pièce, taux de CO2…). Lorsqu’on veut fabriquer ses propres objets connectés, on se pose souvent la question de la source d’alimentation en énergie. Il n’y a pas toujours une prise de courant à proximité ! L’énergie solaire est une excellente solution pour recharger une batterie LiPo ou Li-Ion. Je vous propose ici un projet qui permet de mesurer la puissance délivrée par deux panneaux solaires à l’aide de deux modules INA219. Les mesures seront collectées à l’aide d’un ESP8266 puis transmises en WiFi à une base de données InfluxDB installée sur un Raspberry Pi 3. Les mesures sont ensuite affichées sur un dashboard à l’aide de Grafana. 

 

Vous pouvez également mesurer l’ensoleillement des panneaux solaire à l’aide d’un BH1750 déjà présenté dans ce tutoriel.

Ce que vous allez apprendre en réalisant ce projet DIY

Si vous débutez dans la fabrication de vos propres objets connectés, voici ce que vous allez apprendre :

  • Installer et configurer une base de données InfluxDB et Grafana
  • Mesurer la puissance consommée ou délivrée par un appareil électrique. Ici, la puissance délivrée par un panneau solaire.
  • Utiliser l’IDE Arduino, coder en C++, utiliser une librairie Arduino
  • Exécuter du code Arduino sur un ESP8266
  • Publier des mesures depuis un ESP8266 sur une base de données InfluxDB en WiFi avec du code Arduino
  • Créer un base de données InfluxDB, un utilisateur. Attribuer les droits de lecture et d’écriture à un utilisateur
  • Connecter Grafana base de données InfluxDB
  • Créer un dashboard Grafana et ajouter des graphiques en ligne

Matériel nécessaire

L’objectif de ce projet est pouvoir mesurer la puissance délivrée par au moins 2 panneaux solaires (tension, intensité, puissance) afin de déterminer si elle est suffisante pour alimenter un projet d’objet connecté. On pourra également vérifier le taux d’ensoleillement à l’aide du BH1750 en fonction de différents paramètres : heure de la la journée, inclinaison, localisation, orientation, saison…

Il est possible d’attribuer jusqu’à 4 adresses I2C (0x40, 0x41, 0x42, 0x43) à un module INA219. On pourra donc surveiller jusqu’à 4 panneaux. On pourra également surveiller la puissance délivrée par la batterie LiPo pour connaître l’autonomie restante…

ina219 i2c address

Certains INA219 achetés en chine peuvent être défectueux, utilisez ce sujet sur le forum pour en savoir plus et partager vos expériences.

Pour ce tutoriel, nous allons comparer deux mini panneaux solaires en silicium mono-cristallin que l’on peut ce procurer pour moins d’un euro. L’INA219 peut mesurer une tension jusqu’à 26V et 3,2A. Ne dépassez pas (sans protection) la puissance admissible par l’INA219.

La puissance pour recharger une batterie Li-Ion ou LiPO est assez faible (moins de 1W). Je vous propose ici de comparer deux panneaux solaires de dimensions courantes, 80×55 mm et 85x115mm. Cela reste assez facile à intégrer dans un boitier par impression 3D.

monocristallin mini solar panel

-15% INA219 GY-219 I2C Interface High Side DC Current Sensor Breakout Power Supply...
1,05 1,24
Voir l'offre
Aliexpress AliExpress
-4% Free shipping 10pcs/lot Lithium charge management IC TP4055 55b4 screen 4055 SOT23-5...
1,45 1,52
Voir l'offre
Aliexpress AliExpress
-46% 0.75W 5V 150mA Mini cellule solaire panneau solaire Standard époxy polycristallin silicium...
1,92 3,56
Voir l'offre
Aliexpress AliExpress
-15% For WeMos D1 mini V3.0.0 WIFI Internet of Thing Development Board Wireless...
2,19 2,58
Voir l'offre
Aliexpress AliExpress
Last update was on: 6 février 2021 20 h 37 min

Vous pouvez installer Grafana et InfluxDB sur un PC Windows, Linux ou un MAC. Pour rester dans l’esprit DIY, je vous propose d’utiliser un Raspberry Pi 3. Tout est installé en quelques minutes et il peut rester en permanence sans risquer d’alourdir votre note d’électricité.

44,59€
69,03€
En Stock
25 neufs à partir de 36,33€
1 occasions à partir de 41,69€
actualisé le 26 août 2020 6 h 19 min
Amazon.fr
12,91€
En Stock
2 neufs à partir de 12,91€
actualisé le 26 août 2020 6 h 19 min
Amazon.fr
Prix actualisé le 26 août 2020 6 h 19 min

Installer et configurer InfluxDB et Grafana

Pour installer et configurer Grafana et InfluxDB, suivez ces tutoriels précédents

Installer InfluxDB sur Raspberry Pi, Windows, macOS
Découverte du Shell. Créer une base de données, politique de rétention
Installer InfluxDB sur Raspberry Pi, Windows, macOS
Installer Grafana sur macOS et Raspbian pour Raspberry Pi
Exemple de dashboard pour objet connecté MySensors avec Node-RED et InfluxDB
Installer Grafana sur macOS et Raspbian pour Raspberry Pi

Configurer InfluxDB

Pour pouvoir publier des mesures dans une base InfluxDB, vous devez

  • Créer une base de données
  • Créer un utilisateur
  • Attribuer les droits de lecture et d’écriture à cet utilisateur

Voici un exemple à exécuter depuis le Shell InfluxDB

create database demo
create user nomutilisateur with password 'motdepasse'
use demo
grant all on demo to nomutilisateur

Assemblage du circuit : ESP8266, INA219, BH1750, panneaux solaire, TP4055

Comme nous l’avons déjà vu dans le tutoriel consacré à l’INA219, la mesure de puissance se fait entre la source et un consommateur de courant. Il suffit de brancher le fil positif venant du panneau solaire sur la broche Vin- de l’INA219. On connecte ensuite la sortie Vin+ sur un régulateur de charge (un TP4055 par exemple).

 

wifi solar panel power ina219 esp8266 influxdb grafana

Remarque. Si la mesure de tension est négative, il suffit d’inverser Vin- et Vin+.

Code Arduino compatible ESP8266

Pour développer le code Arduino du projet, j’ai utilisé la librairie développée par Francesco d’Aloisio disponible sur GitHub ici.

Vous pouvez également télécharger le code complet du projet sur GitHub ici.

Avant de téléverser le croquis, vous devez modifier les paramètres suivants :

  • INFLUXDB_HOST, adresse IP sur serveur InfluxDB
  • DATABASE, la base de données InfluxDB
  • DB_USER, l’utilisateur autorisé à se connecter à la base InfluxDB
  • DB_PASSWORD, et son mot de passe
  • WiFiMulti.addAP, modifier le nom et le mot de passe du réseau WiFi
  • ina219b.begin(0x41), l’adresse I2C du second INA219
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
#include <BH1750.h>
#include "ESPinfluxdb.h"

#if defined(ESP8266)
  #include <ESP8266WiFi.h>
  #include <ESP8266WiFiMulti.h>
#elif defined(ESP32)
  #include <WiFi.h>
  #include <WiFiMulti.h>
#endif

Adafruit_INA219 ina219;
Adafruit_INA219 ina219b;
BH1750 lightMeter(0x23);

const char *INFLUXDB_HOST = "ip_influxdb";
const uint16_t INFLUXDB_PORT = 8086;

const char *DATABASE = "database";
const char *DB_USER = "user";
const char *DB_PASSWORD = "password";

#if defined(ESP8266)
ESP8266WiFiMulti WiFiMulti;
#elif defined(ESP32)
WiFiMulti WiFiMulti;
#endif

Influxdb influxdb(INFLUXDB_HOST, INFLUXDB_PORT);

void setup() {
        Serial.begin(115200);
        WiFiMulti.addAP("ssid", "wifipass");
        while (WiFiMulti.run() != WL_CONNECTED) {
                delay(100);
        }
        Serial.println("Ready");
        
        ina219.begin(0x40);
        ina219b.begin(0x41);
        lightMeter.begin();

        //influxdb.opendb(DATABASE, DB_USER, DB_PASSWORD);
        while (influxdb.opendb(DATABASE, DB_USER, DB_PASSWORD)!=DB_SUCCESS) {
                Serial.println("Open database failed");
                delay(10000);
        }
}

void loop() {
  scani2c();
  float busvoltage = 0;
  float current_mA = 0;
  float busvoltageb = 0;
  float current_mAb = 0;
  uint16_t lux = 0;
  
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  busvoltageb = ina219b.getBusVoltage_V();
  current_mAb = ina219b.getCurrent_mA();
  lux = lightMeter.readLightLevel();
  Serial.print(busvoltage);
  Serial.print(" V / ");
  Serial.print(current_mA);
  Serial.print(" mA - ina219b ");
  Serial.print(busvoltageb);
  Serial.print(" V / ");
  Serial.print(current_mAb);
  Serial.print(" mA - Lux ");
  Serial.println(lux);
  
  dbMeasurement row("80x55");
  row.addField("voltage", busvoltage);
  row.addField("Current", current_mA); 
  row.addField("power", busvoltage * current_mA);

  Serial.println(influxdb.write(row) == DB_SUCCESS ? " - Object write success" : " - Writing failed");
  dbMeasurement rowb("85x115");
  rowb.addField("voltage", busvoltageb);
  rowb.addField("Current", current_mAb); 
  rowb.addField("power", busvoltageb * current_mAb);
  Serial.println(influxdb.write(rowb) == DB_SUCCESS ? " - Object write success" : " - Writing failed");

  dbMeasurement rowlux("lux");
  rowlux.addField("lux", lux);
 Serial.println(influxdb.write(rowlux) == DB_SUCCESS ? " - Object write success" : " - Writing failed");
  
  // Empty field object.
  row.empty();
  rowb.empty();
  rowlux.empty();
  
  delay(5000);
}

void scani2c()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
}

Tutoriel vidéo. Préparer InfluxDB et créer le dashboard Grafana

La configuration de Grafana et d’InfluxDB est assez longue à décrire sur un tutoriel. Voici donc une petite vidéo qui explique toutes les étapes :

  • Comment préparer InfluxDB
  • Modifier le code Arduino à téléverser sur l’ESP8266
  • Connecter la source de données de Grafana à InfluxDB
  • Créer un Dashboard et ajouter des graphiques

Monitoring de la puissance délivrée par deux (petits) panneaux solaires

Voilà, après quelques minutes d’acquisition, le Dashbord Grafana va ressembler à ceci. Comme vous pouvez le constater, on peut très clairement observer les chutes de puissance en fonction de l’ensoleillement. Vous pouvez également voir q’il existe une grande différence de puissance entre les deux panneaux. Il faudra confirmer par d’autres essais, mais il semble bien qu’il existe une grande différence de qualité entre les panneaux solaire bon marché. Le panneau de 80x55mm peine à délivrer plus de 45mW même en plein ensoleillement alors que le panneau de 85x115mm dépasse facilement 400mW (avec des pics à plus de 500mW).

grafana dashboard esp8266 influxdb ina218 solar panel

Quelques astuces

J’en profite pour glisser quelques astuce et réglages

Problème pour tracer des courbes avec Grafana

En fonction de la version installé, il peut arriver que Null value soit configurée sur Null. Dans ce cas, la courbe ne s’affiche pas. Pour connecter les points et dessiner un ligne, il faut sélectionner connected puis cocher Lines

grafana display lines disconneted points

Tag ou Field, lequel choisir ?

  • Measurement est équivalent à une table SQL
  • Tags est similaire à une colonne indexée (column) dans une base SQL. On utilisera les Tags lorsqu’on veut faire des requêtes avec des conditions
  • Fields est similaire aux colonnes non indexées dans une base SQL. Utilisez le type field pour enregistrer les flux de mesures (aucune indexation n’est requise dans ce cas).

 

-15% INA219 GY-219 I2C Interface High Side DC Current Sensor Breakout Power Supply...
1,05 1,24
-4% Free shipping 10pcs/lot Lithium charge management IC TP4055 55b4 screen 4055 SOT23-5...
1,45 1,52
-46% 0.75W 5V 150mA Mini cellule solaire panneau solaire Standard époxy polycristallin silicium...
1,92 3,56
-15% For WeMos D1 mini V3.0.0 WIFI Internet of Thing Development Board Wireless...
2,19 2,58
Toshiba EXCERIA M302 16Go carte mémoire Micro SD de 90 Mo/s 4K...
12,91
-35% Raspberry Pi Carte Mère 3 Model B Quad Core CPU 1.2 GHz...
44,59 69,03 1 used from 41,69€

 

Avez-vous aimé cet article ?
[Total: 1 Moyenne: 5]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

1 commentaire
  1. Bonjour,j’ai un panneau de 10w,une batterie de 12V 7Ah et un régulateur de 10A, j’aimerai connaitre la puissance délivrée par ce panneau et calculer l’énergie produite mais je ne sais pas comment faire le câblage avec le capteur ina219. Ici vous avez utilisé un régulateur TP4050 et une batterie LIPO comment je dois les remplacer respectivement par ma batterie de 12v et mon régulateur de 10A? pouvez vous me donner un schéma de câblage avec mes matériaux que je cite en haut s’il vous plait? Merci

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Calculateurs
×
Calculateur loi d'Ohm
Tension (U) - en Volt
Courant (I) - en Ampère
Résistance (R) - en Ohms
Puissance (P) - en Watts

Ce calculateur permet de calculer les relations entre le courant, la tension, la résistance et la puissance dans les circuits résistifs.

Saisir au moins deux valeurs puis cliquer sur calculer pour calculer les valeurs restantes. Réinitialisez après chaque calcul.

Rappel sur la Loi d'Ohm
La loi d'Ohm explique la relation entre la tension, le courant et la résistance en déclarant que le courant traversant un conducteur entre deux points est directement proportionnel à la différence de potentiel entre les deux points.
La loi d'Ohm s'écrit U = IR, où U est la différence de tension, I est le courant en ampère et R est la résistance en Ohms (symbole Ω).
Loi d'Ohm (U=RI)
×
Déchiffrer le code couleur d'une résistance à 4 bandes
Bande 1 Bande 2 Multiplicateur Tolérance
   

Résistance:  

1 000 Ω ±5%

Comment déchiffrer le code couleur d'une résistance à 4 anneaux
Formule : ab*cΩ ±d%
Les deux premières bandes (a, b) permettent de déterminer le chiffre significatif. La première bande correspond au chiffre de la dizaine, le second anneau le chiffre de l'unité. Par exemple Brun(1), Noir (0) donne le nombre 10.
La troisième bande (c) est un coefficient multiplicateur. Par exemple, l'anneau rouge est un coefficient multiplicateur de 100, ce qui donne 10 X 100 = 1000Ω.
Le quatrième anneau (d) indique la tolérance de la valeur nominale de la résistance. Par exemple l'anneau Or correspond à ±5%. Donc le fabricant de la résistance s'engage à ce que sa valeur soit comprise entre 950 Ω et 1050 Ω.
Déchiffrer code couleur 4 bandes
×
Déchiffrer le code couleur d'une résistance à 5 bandes
Bande 1 Bande 2 Bande 3 Multiplicateur Tolérance

Résistance:  

1 000 Ω ±5%

Comment déchiffrer le code couleur d'une résistance à 5 anneaux
Formule : abc*dΩ ±e%
Les trois premières bandes permettent de déterminer le chiffre significatif. La première bande correspond au chiffre de la dizaine, le second anneau le chiffre de l'unité. Par exemple Brun(1), Noir (0), Noir (0) donne le nombre 100
La quatrième bande est un coefficient multiplicateur. Par exemple, l'anneau brun correspond au coefficient multiplicateur 10, ce qui donne 100 X 10 = 1000Ω.
Le cinquième anneau indique la tolérance de la valeur nominale de la résistance. Par exemple l'anneau Or correspond à ±5%. Donc le fabricant de la résistance s'engage à ce que la valeur de la résistance soit comprise entre 950 Ω et 1050 Ω.
Déchiffrer code couleur 5 bandes
×
Calculateur de résistance série pour une ou plusieurs LED
Tension d'alimentation en Volt
Tension directe en Volt
Courant en mA
Résistance calculée en Ω
Puissance estimée en W

Ce calculateur permet de déterminer la résistance requise pour piloter une ou plusieurs LED connectées en série à partir d'une source de tension à un niveau de courant spécifié.

Remarque. Il est préférable d'alimenter le circuit avec une puissance nominale comprise entre 2 et 10 fois la valeur calculée afin d'éviter la surchauffe
Couleur Longueur d'onde (nm) Tension (V) pour LED ⌀3mm Tension(V) pour LED ⌀5mm
Rouge 625-630  1,9-2,1 2,1-2,2
Bleu 460-470 3,0-3,2 3,2-3,4
Vert 520-525 2,0-2,2 2,0-2,2
Jaune 585-595 2,0-2,2 3,0-3,2
Blanc 460-470 3,0-3,2 1,9-2,1
Résistance en série pour une ou plusieurs LED
×
Calculateur durée de vie d'une batterie
Capacité de la batterie
Consommation de l'appareil ou objet connecté

Ce calculateur estime la durée de vie d'une batterie, en fonction de sa capacité nominale et du courant ou de la puissance qu'une charge en tire.

La durée de vie de la batterie est une estimation idéalisée. La durée de vie réelle peut varier en fonction de l'état de la batterie, de son âge, de la température, du taux de décharge et d'autres facteurs. C'est le mieux que vous pouvez espérer obtenir.

Autonomie de la batterie = capacité de la batterie en mAh / courant de charge en mA

Durée de vie batterie
Publicité
À lire aussi
Composants
Sur le Forum
Domotique et objets connectés à faire soi-même
Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.