Ce guide vous permettra de démarrer rapidement avec InfluxDB en utilisant la carte ESP32. InfluxDB est une base de données de séries temporelles open source (TSDB). Il est donc idéal de stocker les données des capteurs avec des horodatages sur une période de temps déterminée. Dans ce didacticiel, vous allez configurer un compartiment InfluxDB pour enregistrer des données et vous apprendrez à enregistrer des données ESP32 dans la base de données. InfluxDB propose également différentes façons de visualiser et d’organiser vos données (tableaux de bord, graphiques, tableaux, jauges, etc.).

Nous avons un tutoriel similaire pour la carte ESP8266 NodeMCU : Premiers pas avec InfluxDB
Table des matières
Qu’est-ce qu’InfluxDB ?

InfluxDB est une base de données de séries chronologiques (TSDB) hautes performances open source qui peut stocker de grandes quantités de données par seconde. Chaque point de données que vous soumettez à la base de données est associé à un horodatage particulier. Il est donc idéal pour les projets d’enregistrement de données IoT, tels que le stockage des données des capteurs de votre station météo.
Tu peux courir InfluxDB dans InfluxDB Cloudou localement sur votre ordinateur portable ou Raspberry Pi.
« Pourquoi utiliser InfluxDB Cloud ? Il s’agit d’une plate-forme de surveillance en temps réel rapide, élastique et sans serveur, d’un moteur de tableau de bord, d’un service d’analyse et d’un processeur d’événements et de métriques. »
https://www.influxdata.com/products/influxdb-cloud/
Termes clés InfluxDB
Avant de commencer, vous devez comprendre certains termes importants. Nous allons juste jeter un oeil aux termes les plus pertinents, vous pouvez lire l’intégralité glossaire. Ne vous inquiétez pas si certains termes prêtent à confusion. Vous comprendrez mieux ces termes lorsque vous commencerez à écrire dans la base de données.
Dans InfluDB, un compartiment est nommé emplacement où les données de la série chronologique sont stockées. Tous les buckets ont une période de rétention : elle définit la durée pendant laquelle un bucket conserve les données. Les points dont les horodatages sont antérieurs à la période de conservation sont supprimés.
Les données dans InfluxDB sont stockées dans des tables dans des lignes et des colonnes. Un ensemble de données dans une ligne est appelé point (similaire à une ligne dans une table de base de données SQL). Chaque point a une mesure, un ensemble de balises, une clé de champ, une valeur de champ et un horodatage ;
Les colonnes stockent des ensembles de balises (indexés) et des ensembles de champs. La seule colonne requise est l’heure, qui stocke les horodatages et est incluse dans toutes les tables InfluxDB.
- tag : la paire clé-valeur dans la structure de données d’InfluxDB qui enregistre les métadonnées. Les balises sont une partie facultative de la structure de données d’InfluxDB, mais elles sont utiles pour stocker les métadonnées fréquemment interrogées ; les balises sont indexées afin que les requêtes sur les balises soient performantes.
- clé de balise : les clés de balise sont des chaînes et stockent des métadonnées. Les clés de balise sont indexées afin que les requêtes sur les clés de balise soient traitées rapidement.
- valeur de balise : les valeurs de balise sont des chaînes et elles stockent des métadonnées. Les valeurs des balises sont indexées afin que les requêtes sur les valeurs des balises soient traitées rapidement.
- champ : la paire clé-valeur dans la structure de données d’InfluxDB qui enregistre les métadonnées et la valeur réelle des données. Les champs sont requis dans la structure de données d’InfluxDB et ils ne sont pas indexés – les requêtes sur les valeurs de champ analysent tous les points qui correspondent à la plage de temps spécifiée et, par conséquent, ne sont pas performantes par rapport aux balises.
- field key : la clé de la paire clé-valeur. Les clés de champ sont des chaînes et elles stockent des métadonnées.
- valeur du champ : la valeur d’une paire clé-valeur. Les valeurs de champ sont les données réelles ; ils peuvent être des chaînes, des flottants, des entiers ou des booléens. Une valeur de champ est toujours associée à un horodatage. Les valeurs de champ ne sont pas indexées – les requêtes sur les valeurs de champ analysent tous les points qui correspondent à la plage de temps spécifiée et, par conséquent, ne sont pas performantes.
- mesure : la partie de la structure d’InfluxDB qui décrit les données stockées dans les champs associés.
Nous vous recommandons également de jeter un coup d’œil rapide sur Concepts clés InfluxDB.
Créer un compte InfluxDB
Si vous souhaitez exécuter InfluxDB localement sur un Raspberry Pi, suivez d’abord le tutoriel suivant : Installez InfluxDB 2 sur Raspberry Pi. Ensuite, passez à la Chargement de données dans InfluxDB section.
1) Aller à https://cloud2.influxdata.com/signup et créez un compte InfluxDB.

2) Sélectionnez l’endroit où vous souhaitez enregistrer vos données. Je choisis l’option Google Cloud, mais vous pouvez choisir l’une des autres options. Sélectionnez la région, elle doit être la plus proche de votre emplacement. Ensuite, entrez quelque chose dans le champ Nom de l’entreprise et acceptez les conditions avant de continuer.

3) Sélectionnez le forfait InfluxDB. Pour cet exemple, nous utiliserons le plan gratuit. Pour la plupart de nos projets IoT, le plan gratuit fonctionne très bien.

4) Après avoir sélectionné le plan, vous serez redirigé vers la page de démarrage.

Chargement de données dans InfluxDB
5) Cliquez sur l’icône Charger les données et sélectionnez Sources.

6) Faites défiler vers le bas jusqu’à ce que vous trouviez l’option Arduino dans la section Bibliothèques clientes.

Cliquez sur Initialiser le client.

La page qui s’ouvre vous permet de créer des compartiments, et elle montre également un exemple de code pour interfacer les cartes ESP8266 ou ESP32 avec InfluxDB.
Création d’un compartiment InfluxDB
7) Créez un nouveau compartiment pour stocker vos données. Cliquez sur + Créer un compartiment pour créer un nouveau compartiment pour cet exemple. Vous pouvez utiliser les paramètres par défaut ou les personnaliser.

Obtenir l’URL InfluxDB et le jeton API
8) Obtenez votre URL InfluxDB* et d’autres détails dont vous aurez besoin plus tard. Faites défiler jusqu’à l’extrait de profil Configurer InfluxDB. Ensuite, copiez INFLUXDB_URL, INFLUXDB_TOKEN, INFLUXDB_ORG et INFLUXDB_BUCKET.

* Si vous exécutez InfluxDB localement sur un Raspberry Pi, l’URL sera l’adresse IP du Raspberry Pi sur le port 8086. Par exemple 192.168.1.106:8086.
Jetons d’API
Si vous avez suivi les étapes précédentes, le cloud InfluxDB a déjà créé pour vous un jeton d’API que vous pourriez trouver dans l’extrait présenté à l’étape précédente. Si vous accédez à l’icône Charger les données et sélectionnez Jetons d’API, vous trouverez le jeton d’API généré précédemment.

Sur cette page, vous pouvez générer un nouveau jeton d’API si nécessaire.
À ce moment, vous devriez avoir enregistré les éléments suivants :
- URL du serveur InfluxDB
- Organisation InfluxDB
- Nom du compartiment InfluxDB
- Jeton d’API
Interfaçage de l’ESP32 avec InfluxDB
Nous allons programmer l’ESP32 à l’aide d’Arduino IDe, alors assurez-vous que le module complémentaire des cartes ESP32 est installé :
Vous pouvez également utiliser VS Code avec l’extension PlatformIO. Consultez le didacticiel suivant pour démarrer avec VS Code + PlatformIO :
Installer la bibliothèque client InfluxDB Arduino
Il existe une librairie qui permet d’interfacer facilement l’ESP32 avec InfluxDB : le Bibliothèque client InfluxDB Arduino. Cette bibliothèque est également compatible avec les cartes ESP8266.
Installation – Arduino IDE
Si vous utilisez Arduino IDE, suivez les étapes suivantes pour installer la bibliothèque.
- Allez dans Sketch > Inclure la bibliothèque > Gérer les bibliothèques
- Recherchez InfluxDB et installez la bibliothèque ESP8266 Influxdb de Tobias Shürg (même si elle a ESP8266 dans le nom, elle est également compatible avec l’ESP32).

Remarque : nous utilisons les cartes ESP32 version 2.0.1. Vérifiez la version de vos tableaux dans Outils > Tableau > Gestionnaire de tableaux. Ensuite, recherchez ESP32 et mettez à niveau vers la version 2.0.1 (pour le moment, il y a quelques problèmes avec la version 2.0.2, alors ne sélectionnez pas celle-là).
Installation – Code VS
Si vous utilisez VS Code avec l’extension PlatformIO, commencez par créer un projet Arduino pour votre carte ESP32.
Ensuite, cliquez sur l’icône PIO Home, puis sélectionnez l’onglet Bibliothèques. Recherchez « influxdb ». Sélectionnez l’ESP8266 Influxdb de Tobias Schürg.

ESP32 Enregistrer les données dans InfluxDB
Pour vous montrer comment enregistrer des données dans InfluxDB à l’aide de l’ESP32, nous allons jeter un œil à l’un des exemples fournis par la bibliothèque. Dans votre IDE Arduino, accédez à Fichier > Exemples > ESP8266 Infuxdb > Secure Write. Ou copiez simplement le code ci-dessous dans votre IDE Arduino.
/**
* Secure Write Example code for InfluxDBClient library for Arduino
* Enter WiFi and InfluxDB parameters below
*
* Demonstrates connection to any InfluxDB instance accesible via:
* - unsecured http://...
* - secure https://... (appropriate certificate is required)
* - InfluxDB 2 Cloud at https://cloud2.influxdata.com/ (certificate is preconfigured)
* Measures signal level of the actually connected WiFi network
* This example demonstrates time handling, secure connection and measurement writing into InfluxDB
* Data can be immediately seen in a InfluxDB 2 Cloud UI - measurement wifi_status
*
* Complete project details at our blog: https://Raspberryme.com/
*
**/
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
// WiFi AP SSID
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
// WiFi password
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
// InfluxDB v2 server url, e.g. https://eu-central-1-1.aws.cloud2.influxdata.com (Use: InfluxDB UI -> Load Data -> Client Libraries)
#define INFLUXDB_URL "REPLACE_WITH_YOUR_DATABASE_URL"
// InfluxDB v2 server or cloud API token (Use: InfluxDB UI -> Data -> API Tokens -> Generate API Token)
#define INFLUXDB_TOKEN "REPLACE_WITH_YOUR_TOKEN"
// InfluxDB v2 organization id (Use: InfluxDB UI -> User -> About -> Common Ids )
#define INFLUXDB_ORG "REPLACE_WITH_YOUR_ORG"
// InfluxDB v2 bucket name (Use: InfluxDB UI -> Data -> Buckets)
#define INFLUXDB_BUCKET "ESP32"
// Set timezone string according to https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
// Examples:
// Pacific Time: "PST8PDT"
// Eastern: "EST5EDT"
// Japanesse: "JST-9"
// Central Europe: "CET-1CEST,M3.5.0,M10.5.0/3"
#define TZ_INFO "WET0WEST,M3.5.0/1,M10.5.0"
// InfluxDB client instance with preconfigured InfluxCloud certificate
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
// InfluxDB client instance without preconfigured InfluxCloud certificate for insecure connection
//InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
// Data point
Point sensor("wifi_status");
void setup() {
Serial.begin(115200);
// Setup wifi
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
// Add tags
sensor.addTag("device", DEVICE);
sensor.addTag("SSID", WiFi.SSID());
// Alternatively, set insecure connection to skip server certificate validation
//client.setInsecure();
// Accurate time is necessary for certificate validation and writing in batches
// For the fastest time sync find NTP servers in your area: https://www.pool.ntp.org/zone/
// Syncing progress and the time will be printed to Serial.
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
// Check server connection
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
void loop() {
// Store measured value into point
sensor.clearFields();
// Report RSSI of currently connected network
sensor.addField("rssi", WiFi.RSSI());
// Print what are we exactly writing
Serial.print("Writing: ");
Serial.println(client.pointToLineProtocol(sensor));
// If no Wifi signal, try to reconnect it
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("Wifi connection lost");
}
// Write point
if (!client.writePoint(sensor)) {
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
//Wait 10s
Serial.println("Wait 10s");
delay(10000);
}
Avant de télécharger le code sur votre tableau, vous devez insérer vos informations d’identification réseau, l’URL InfludDB, l’ID de l’organisation et le nom du compartiment.
Cet exemple illustre comment créer un point de données sur la base de données avec des balises et des champs. Il enregistre le RSSI du réseau connecté (puissance Wi-Fi entre l’ESP32 et votre routeur) toutes les 10 secondes.
Voyons rapidement comment fonctionne le code.
Comment fonctionne le code
Tout d’abord, il commence par inclure les bibliothèques requises. Dans cet exemple, il utilise le WiFiMulti au lieu de la bibliothèque WiFi pour connecter l’ESP32 à un réseau. Il définit également le nom DEVICE en fonction de la carte sélectionnée.
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
Remarque : la bibliothèque WiFiMulti permet à l’ESP32 de se connecter au réseau avec le meilleur RSSI (indicateur de force du signal reçu) parmi une liste de réseaux ajoutés. Dans cet exemple, il ne se connecte qu’à un seul réseau.
Incluez les bibliothèques InfluxDB requises pour pouvoir communiquer avec InfluxDB :
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
Insérez vos informations d’identification réseau dans les variables suivantes afin que l’ESP32 puisse se connecter à Internet :
// WiFi AP SSID
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
// WiFi password
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
Insérez l’URL du serveur InfluxDB sur les lignes suivantes :celui que vous avez obtenu à cette étape:
// InfluxDB v2 server url, e.g. https://eu-central-1-1.aws.cloud2.influxdata.com (Use: InfluxDB UI -> Load Data -> Client Libraries)
#define INFLUXDB_URL "REPLACE_WITH_YOUR_INFLUXDB_URL"
Remarque : si vous exécutez InfluxDB localement sur un Raspberry Pi, l’URL sera l’adresse IP du Raspberry Pi sur le port 8086. Par exemple 192.168.1.106:8086.
Insérez votre jeton InfluxDB—enregistré à cette étape:
#define INFLUXDB_TOKEN "REPLACE_WITH_YOUR_INFLUXDB_TOKEN"
Ajoutez le nom de votre organisation InfluxDB—vérifier cette étape.
#define INFLUXDB_ORG "REPLACE_WITH_YOUR_INFLUXXDB_ORGANIZATION_ID"
Enfin, ajoutez le nom de votre compartiment InfluxDB :
#define INFLUXDB_BUCKET "ESP32"
Définition de votre fuseau horaire
Vous devez définir votre fuseau horaire en conséquence pour ces consignes. Le moyen le plus simple est de vérifiez ce tableau et copiez votre fuseau horaire à partir de là. Dans mon cas, c’est le fuseau horaire de Lisbonne :
#define TZ_INFO "WET0WEST,M3.5.0/1,M10.5.0"
Client InfluxDB
Maintenant que vous disposez de tous les paramètres requis, vous pouvez créer une instance InfluxDBClient. Nous créons un client sécurisé qui utilise un certificat préconfiguré—en savoir plus sur la connexion sécurisée ici.
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
Indiquer
Ensuite, nous créons une instance Point appelée capteur. Le point sera appelé wifi_status sur la base de données. Plus tard dans le code, nous pouvons nous référer à ce point (capteur) pour ajouter des balises et des champs.
Point sensor("wifi_status");
Remarque : Un ensemble de données dans une ligne de base de données est appelé point. Chaque point a une mesure, un jeu de balises, une clé de champ, une valeur de champ et un horodatage.
installation()
Dans setup(), initialisez le Serial Monitor.
Serial.begin(115200);
Configuration et connexion au Wi-Fi :
// Setup wifi
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Ensuite, nous ajoutons des balises à nos données. Les balises sont des métadonnées qui nous permettent de mieux organiser nos données. C’est également un moyen plus simple d’interroger les données de manière plus efficace par la suite. Dans cet exemple, nous avons la balise d’appareil qui enregistre le nom de l’appareil (ESP32 ou ESP8266) et la balise SSID qui enregistre le SSID du réseau connecté. Pour ajouter une balise, nous appelons la méthode addTag() au point du capteur. Nous passons en arguments la clé et la valeur de la balise.
// Add tags
sensor.addTag("device", DEVICE);
sensor.addTag("SSID", WiFi.SSID());
Imaginez que cet exemple s’exécute sur plusieurs cartes et que chaque carte possède une balise d’appareil unique. Ensuite, il serait plus facile d’interroger les données relatives à un appareil spécifique à l’aide de l’étiquette d’appareil. Idem pour le SSID du réseau connecté.
Les lignes suivantes synchronisent l’heure avec les serveurs NTP.
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
L’extrait de code suivant vérifie la connexion au serveur InfluxDB :
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
boucle()
Dans la boucle (), nous ajoutons des champs (les données réelles) au point. On commence par vider les champs de points :
sensor.clearFields();
Nous ajoutons un champ à ce point, en utilisant la méthode addField() et en passant comme arguments, la clé (rssi) et la valeur RSSI réelle (WiFi.RSSI()).
sensor.addField("rssi", WiFi.RSSI());
Imprimez dans le Serial Monitor ce que nous écrivons au point :
Serial.println(client.pointToLineProtocol(sensor));
Enfin, pour réellement ajouter le point à la base de données, nous utilisons la méthode writePoint() sur l’objet InfluxDBClient et passons en argument le point que nous souhaitons ajouter : client.writePoint(sensor). Nous exécutons la commande dans une instruction if à des fins de débogage.
if (!client.writePoint(sensor)) {
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
Nous écrivons de nouvelles données dans la base de données toutes les 10 secondes.
//Wait 10s
Serial.println("Wait 10s");
delay(10000);
Démonstration – Visualisation des données sur InfluxDB
Après avoir inséré tous les paramètres requis sur le code, vous pouvez le télécharger sur votre carte ESP32. Si vous obtenez une erreur lors de la compilation, vérifiez les points suivants :
- Vérifiez que vous avez bien sélectionné une carte ESP32 dans Outils > Carte.
- Vérifiez la version d’installation de vos cartes ESP32 dans Outils > Carte > Gestionnaire de cartes > ESP32. Sélectionnez la version 2.0.1 si vous rencontrez des problèmes avec d’autres versions.
Après avoir téléchargé le code sur votre carte, ouvrez le moniteur série à un débit en bauds de 115200. Appuyez sur le bouton RST embarqué ESP32 pour redémarrer la carte. Il devrait imprimer quelque chose de similaire sur le Serial Monitor :

Maintenant, rendez-vous sur votre compte InfludDB et rendez-vous dans le Data Explorer en cliquant sur l’icône correspondante.

Maintenant, vous pouvez visualiser vos données. Commencez par sélectionner le seau que vous voulez – dans notre cas, c’est l’ESP32. Ensuite, nous devons ajouter des filtres pour sélectionner nos données. Sélectionnez le wifi_status sous le champ _measurement, votre SSID sous la balise SSID (dans ce cas, nous n’avons qu’un seul SSID, mais si nous ajoutons plusieurs SSID, nous pourrions facilement filtrer les données car nous avons ajouté le SSID en tant que balise). Enfin, sélectionnez la balise de champ (rrsi) et le périphérique (ESP32).
Enfin, cliquez sur le bouton SOUMETTRE.
Cela affichera vos données dans le format choisi. Dans le coin supérieur gauche, vous pouvez sélectionner différentes manières de visualiser les données.

Vous pouvez créer un tableau de bord pour afficher plusieurs visualisations de données dans différents formats (jauges, histogrammes, statistiques uniques, etc.) ou différentes données sur la même page.
Création d’un tableau de bord
Cliquez sur l’icône Tableau de bord.

Puis sur Créer un tableau de bord > Nouveau tableau de bord.
Ajouter une cellule. Effectuez la requête pour obtenir vos données et sélectionnez la visualisation souhaitée. Donnez un nom à la cellule, par exemple ESP32 RSSI History. Vous pouvez également cliquer sur le bouton Personnaliser pour personnaliser le graphique. Enfin, cliquez sur l’icône ✓ dans le coin supérieur droit pour ajouter la visualisation sous forme de cellule à votre tableau de bord.

Vous pouvez ajouter d’autres visualisations à votre tableau de bord. Il vous suffit d’ajouter une nouvelle cellule pour chaque visualisation. Par exemple, j’ai ajouté un tableau et une seule statistique qui montre le SSID actuel.

Vous pouvez déplacer vos cellules vers différentes positions et organiser le tableau de bord d’une manière qui vous convient. Vous pouvez également personnaliser la façon dont les données sont actualisées et le nombre de points de données que vous souhaitez voir (jusqu’aux 30 derniers jours sur le plan cloud gratuit).
Conclusion
Ce n’était qu’une introduction rapide à InfluxDB avec l’ESP32. Vous avez appris à créer un bucket de base de données et à créer et envoyer des points à l’aide de l’ESP32. Dans cet exemple, nous envoyons le RSSI. Dans une application IoT, vous pouvez ajouter des lectures de capteurs, la consommation de courant ou toute autre donnée pertinente pour vos projets IoT et domotique.
Suivez le didacticiel suivant pour apprendre à envoyer des lectures de capteurs BME280 à InfluxDB avec des cartes ESP32/ESP8266.
Nous espérons que vous avez aimé ce tutoriel et qu’il vous a aidé à démarrer avec InfluxDB. Nous créerons bientôt d’autres tutoriels sur ce sujet. Alors restez à l’écoute!
En savoir plus sur l’ESP32 avec nos ressources :
Merci d’avoir lu.
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :
