Sommaire
Créons dans ce tutoriel un petit moniteur pour afficher en temps réel des StateObjects de votre Constellation sur un écran OLED comme par exemple la consommation CPU d’une de vos machines Windows récupérée grâce au package HWMonitor.
Prérequis
- Un ESP8266 ou un Arduino avec interface réseau
- Un petit écran OLED
- Un serveur Constellation
Etape 1 : le montage
Nous utilisons ici un ESP8266 de type D1 Mini Pro. Nous pouvons alors utiliser un écran OLED en Shield qu’on a juste à « déposer » sur le D1 Mini :
Autre solution, utilisez un écran OLED classique :
Ces deux écrans OLED sont pilotables en I²C. Pour les connexions du 2ème écran, il suffit de connecter les masses (GND) ensemble, la pin « Vcc » de l’écran sur la pin « 3V3 » de la D1 Mini et le « SLK » sur « D2 » et « SDA » sur « D1 ».
Etape 2 : la programmation
Pour démarrer vous devez dans Constellation déclarer une sentinelle associée à une clé d’accès et un package virtuel. Ici notre ESP8266 est représenté par la sentinelle nommée “ESP8266” et le package virtuel se nomme “MyMonitor”.
Dans l’Arduino IDE, nous créons un nouveau projet à partir du Starter Kit Constellation pour ESP8266 dans lequel nous allons définir le nom de notre réseau Wifi (SSID) ainsi que sa clé d’accès puis nous configurerons le client Constellation en spécifiant l’identité de notre package virtuel, sa clé d’accès et l’adresse/port de notre serveur Constellation :
1 2 3 4 5 6 7 |
// ESP8266 Wifi #include <ESP8266WiFi.h> char ssid[] = "MON SSID"; char password[] = "macléWifi!!!!"; // Constellation client Constellation<WiFiClient> constellation("X.X.X.X", 8088, "ESP8266", "MyMonitor", "xxxxxxxxxxxxxxxxx") |
Encore une fois si tout cela est nouveau pour vous, je vous recommande de suivre ce guide d’introduction à l’API Constellation pour Arduino/ESP8266.
Maintenant que la coquille de notre package virtuel sur ESP8266 est prête, installons la librairie « ESP8266 Oled Driver for SSD1306 » pour pouvoir piloter l’écran OLED depuis le gestionnaire de bibliothèque :
Il vous suffit ensuite d’importer cette librairie et déclarer l’objet « display » de cette façon :
1 2 3 |
#include <Wire.h> #include "SSD1306.h" SSD1306 display(0x3c, D1, D2); |
Au démarrage de votre programme, dans la méthode « setup() », initialisez votre écran :
1 2 3 |
display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); |
Toujours la méthode « setup() » et une fois connecté au Wifi, récupérez le setting « Machine » en prenant soin de recopier la valeur par les lignes :
1 2 |
JsonObject& settings = constellation.getSettings(); static String machine = String(settings["Machine"].asString()); |
Il ne nous reste plus qu’à enregistrer un ou plusieurs « StateObjectLink » pour récuperer les informations que vous souhaitez suivre.
Dans notre exemple nous allons enregistrer un « StateObjectLink » vers le StateObject « /intelcpu/0/load/0 » du package « HWMonitor » pour la sentinelle définie dans le setting « Machine ».
A chaque mise à jour du StateObject, nous afficherons sa valeur textuellement avec la méthode « drawString » ainsi que dans une barre de progression avec la méthode « drawProgressBar » :
1 2 3 4 5 6 7 8 9 10 11 12 |
constellation.registerStateObjectLink(machine.c_str(), "HWMonitor", "/intelcpu/0/load/0", [](JsonObject& so) { int cpuUsage = so["Value"]["Value"].as<int>(); // Vider l'écran display.clear(); // Afficher une progressbar display.drawProgressBar(0, 32, 120, 10, cpuUsage); // Afficher la consommation du CPU display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 15, "CPU = " + String(cpuUsage) + "%"); // Dessiner sur l'écran OLED display.display(); )}); |
Demos
Avant de lancer votre code, assurez-vous d’avoir bien déclaré le setting « Machine » avec le nom de la sentinelle sur laquelle est déployé le package « HWMonitor » :
Il ne vous reste plus qu’à téléverser votre programme sur la D1 Mini et observer le résultat.
Et voilà comment en quelque ligne de code vous avez un moniteur temps réel de votre consommation CPU Windows sur un écran OLED piloté par un ESP8266.
Pour aller plus loin
Vous pouvez bien entendu adapter le ou les StateObjects à afficher. Nous avons dans ce tutoriel affiché la consommation CPU mesurée par le package « HWMonitor » mais ce même package met à disposition beaucoup d’autre StateObject : consommation RAM, des disques dur, réseau, température du châssis, consommation énergétique, etc. N’hésitez pas à utiliser le StateObject Explorer pour explorer les StateObjects de ce package.
Il existe aussi plein d’autres packages qui produisent des StateObjects que vous pourrez afficher sur votre écran OLED. Quelques exemples : le package « NetAtmo » pour les mesures sur la T°, humidité, taux de CO², ambiance sonore, pluviomètre et autre ; le package « Nest » sur l’état de votre chauffage, T° ambiante et de consigne ; package « Tesla » pour récupérer en temps réel toutes les données sur votre voiture ; package « DayInfo » pour connaitre les heures du soleil ou la fête du jour ; le package « NetworkTools » où vous pourrez superviser des services TCP ou les temps de réponse de vos sites Web ou encore le package « SNMP » pour pouvoir afficher sur votre écran OLED des informations issues du SNMP, comme par exemple la bande passante de votre routeur.
Bref vous l’aurez compris, la seule limite sera votre imagination !
Démarrez la discussion sur le forum Constellation