Température et humidité avec Arduino
Mesurez la température et l’humidité puis affichez les sur un écran OLED avec votre carte Arduino.
Nous allons décomposer ce projet Arduino de mesure de la température et de l’humidité en 2 étapes, une première pour l’affichage utilisant l’écran OLED et une deuxième pour l’acquisition des données.
Le matériel nécessaire
Vous trouverez l’ensemble des produits nécessaires à la réalisation de ce projet directement sur la boutique.
Câblage de l’écran OLED avec votre carte Arduino
L’écran OLED 0.96 de ce montage utilise le protocole I2C qui ne nécessite que 2 fils pour échanger des données:
- la broche SDA de l’écran OLED reliée à la sortie A4 de l’Arduino
- la broche SCL reliée à la sortie A5.
Pour l’alimentation, de l’écran vous reliez:
- la broche VCC de l’écran au 3,3V de la carte Arduino
- les deux masses ensemble (GND).
Installation d’une bibliothèque pour l’écran OLED
Afin de nous faciliter la gestion de l’écran OLED, nous allons installer la bibliothèque Arduino lcdgfx. Pour cela, dans le menu « Outils », choisir « Gérer les bibliothèques ».

La fenêtre des bibliothèques s’ouvre alors. En saisissant « lcdgfx » dans la zone de recherche, vous ne verrez plus que la bibliothèque « lcdgfx by Alexey Dynda » d’affichée.
Vous pouvez alors réaliser sa mise en place en cliquant sur le bouton « Installer » correspondant.

Le message « INSTALLED » confirme que l’opération d’installation s’est bien déroulée.

Vous pouvez fermer la fenêtre, nous allons passer à la programmation proprement dite.
Code logiciel pour le pilotage de l’écran OLED
Nous allons partir de l’ossature du code Arduino suivante:
// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
}
// Fonction principale du programme, s'exécute en boucle:
void loop()
{
}
Nous commençons par indiquer au compilateur Arduino que nous utilisons la bibliothèque lcdgfx.
La première ligne démarrant par « // » est une ligne de commentaires non exécutée par le processeur. La deuxième ligne déclare le nom du fichier installé servant de porte d’entrée à la bibliothèque.
// Déclaration des librairies utilisées #include "lcdgfx.h"
Cette librairie utilise la programmation objet, aussi nous déclarons un objet globale de type « DisplaySSD1306_128x64_I2C » permettant de gérer l’afficheur en utilisant le protocole I2C. Vous allez nommer cette classe « Afficheur_G » à l’aide des instructions suivantes:
// Déclaration globales DisplaySSD1306_128x64_I2C Afficheur_G(-1);
Ensuite, vous allez ajouter les instructions de réglage de l’écran dans la fonction « setup » pour sélectionner une fonte de caractère de 6 points de large par 8 points de hauts:
/* Sélection de la fonte de 6x8 */
Afficheur_G.setFixedFont( ssd1306xled_font6x8 );
Ajoutez les 3 lignes suivantes pour initialiser initialise l’écran et l’effacer:
// Initialisation et effacement de l'écran
Afficheur_G.begin();
Afficheur_G.clear();
Nous allons pouvoir maintenant passer à l’affichage proprement dit des valeurs mesurées. Comme ces valeurs évoluent au cours du temps, elles s’écrivent dans la fonction « loop« .
L’écran OLED 0.96 est composé de 64 lignes de 128 points. L’origine des coordonnées des points est située sur le sommet gauche.

La fonction de la librairie permettant d’écrire une chaine de caractères est la fonction printFixed. Cette fonction prends 4 paramètres: les coordonnées X et Y de l’écran, la chaîne de caractères à afficher ainsi que le style de caractères à utiliser. Écrivez les 2 lignes suivantes pour avoir un affichage de la température et de l’humidité au centre de l’écran:
Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL);
Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL);
Afin de laisser le temps de lire la valeur affichée, nous allons utiliser la fonction « delay » qui demande au microcontrôleur d’attendre une durée exprimée en millisecondes. Puis nous effacerons l’écran par la fonction « clear » afin de nettoyer l’écran avant le nouvel affichage. Voici les 4 lignes à ajouter:
// Attente de 2 secondes
delay(2000);
// Effacement de l'écran
Afficheur_G.clear();
Voici à quoi devrait ressembler votre programme maintenant:
// Déclaration des librairies utilisées
#include "lcdgfx.h"
// Déclaration globales
DisplaySSD1306_128x64_I2C Afficheur_G(-1);
// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
/* Sélection de la fonte de 6x8 */
Afficheur_G.setFixedFont( ssd1306xled_font6x8 );
// Initialisation et effacement de l'écran
Afficheur_G.begin();
Afficheur_G.clear();
}
// Fonction principale du programme, s'exécute en boucle:
void loop()
{
Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL);
Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL);
delay(2000);
Afficheur_G.clear();
}
Afin de le vérifier, vous pouvez maintenant compiler cette première partie du programme puis le transférer dans l’Arduino avant de poursuivre notre projet. Vous devez obtenir le résultat suivant.

Maintenant, que nous avons préparé l’affichage de nos données, nous allons pouvoir passer à leur acquisition (page 2).









merci beaucoup pour le partage , ca fonctionne parfaitement 🙂
Bonjour et merci pour le partage. Malheureusement je n’ai rien sur le moniteur série, que puis je faire?
Bonjour Sixpeo,
Je ne comprends pas votre question.
A quelle étape êtes-vous bloqué ?
Bonjour j’ai fait le montage avec une Uno générique. le téléversement est ok, sans erreurs, mais aucun affichage sur le moniteur série, ni sur l’écran oled.
Pour l’affichage sur l’écran OLED, je vous invite à vérifier que l’écran que vous utilisez est bien compatible avec ce projet et surtout son branchement.
Pour l’envoi de données sur le port série, il vous est nécessaire d’utiliser l’instruction
dans la fonction setup().
Et les instructions
dans la fonction loop().
Bah j’ai copié le code sur votre tuto, en page 2.
Pas grave.
Merci quand même.