ESP32 avec SHT41 : obtenez la température et l’humidité (Arduino)

ESP32 avec SHT41 : obtenez la température et l'humidité (Arduino)

Apprenez à interfacer le capteur de température et d’humidité SHT41 avec l’ESP32 programmé à l’aide de l’IDE Arduino. C’est l’un des capteurs présentant le meilleur rapport qualité-prix du marché. Il fait partie de la série SHT4x de 4e génération de Sensirion, un capteur de haute précision à faible consommation avec une interface I2C.

Nous allons vous montrer une introduction rapide au capteur, comment le connecter à l’ESP32 et le programmer pour obtenir les données du capteur. Ce guide est également compatible avec les capteurs SHT40 et SHT45.

ESP32 avec SHT41 : obtenez la température et l'humidité (Arduino IDE)

Vous êtes nouveau sur l’ESP32 ? Consultez notre eBook : Apprenez l’ESP32 avec l’IDE Arduino (eBook).

Table des matières

Dans ce guide, nous aborderons les sujets suivants :

Présentation du capteur de température et d’humidité SHT41

Le SHT41 est un capteur de température et d’humidité relative de 4e génération, de haute précision et à très faible puissance, de la série SHT4x (par Sensirion).

Vérifier la version du capteur SHT4x Capteur d'humidité et de température SHT41

Il a une précision de température typique de +/-0,2°C et une précision d’humidité relative de +/-1,8% RH. La fiche technique spécifie une consommation de courant moyenne de 0,4 µA. Cependant, lors de l’utilisation du capteur sur une carte de dérivation comme celle de notre cas, la consommation électrique sera plus élevée. Le capteur est calibré en usine. Voici les spécifications du capteur :

  • Précision de la température : +/-0,2°C
  • Précision de l’humidité : +/- 1,8 % HR
  • Plage de température : -40 à 125°C
  • Plage d’humidité : 0 à 100 %HR
  • Tension d’alimentation : 1,08 à 3,6 V
  • Interface : I2C
  • Adresse I2C : 0x44
  • Courant moyen : 0,4 µA (puce nue)

Le capteur est également livré avec un chauffage interne à puissance contrôlée qui peut être utilisé à trois niveaux de chauffage pour permettre le fonctionnement du capteur dans des environnements exigeants. Par exemple, cela peut aider à empêcher la condensation sur le capteur dans des conditions d’humidité élevée.

L’interface de ce capteur avec l’ESP32 ou tout autre microcontrôleur est assez simple et utilise le protocole de communication I2C.

Pour nos projets, il est plus simple d’utiliser le SHT41 sur un breakout board. Il existe différentes cartes de dérivation disponibles avec la série de capteurs SHT4x. Nous utilisons celui montré dans l’image suivante.

Présentation du capteur de température et d'humidité SHT41 Connecteurs de brochage

Dans notre cas, il est livré avec deux connecteurs compatibles STEMMA QT/Qwiic pour I2C. L’un est utilisé pour connecter la carte au microcontrôleur et l’autre peut être utilisé pour connecter des capteurs ou modules I2C supplémentaires si nécessaire pour votre projet. Il existe également la possibilité de souder des broches d’embase et de connecter des câbles de liaison « normaux » ou d’utiliser une planche à pain.

Où acheter ?

Vous pouvez consulter notre page Maker Advisor Tools pour comparer le prix du module de capteur SHT41 dans différents magasins.

Ce guide est également compatible avec :

SHT40 contre SHT41 contre SHT45

Les SHT40, SHT41 et SHT45 appartiennent tous à la même quatrième génération de capteurs de température et d’humidité relative de Sensirion. Ils fonctionnent de la même manière et le code est le même.

Versions du capteur SHT4x SHT40 SHT41 SHT45

Ils diffèrent en termes de précision. Les SHT40 et SHT41 ont une précision typique similaire (le SHT41 maintient mieux cette précision lorsque l’humidité se rapproche des extrêmes), tandis que le SHT45 offre une précision plus élevée.

SHT40 SHT41 SHT45
Précision de température typique +/-0,2 °C +/-0,2 °C +/-0,1 °C
Précision typique de l’humidité +/-1,8 %HR +/-1,8 %HR +/-1,0 %HR
Plage de température −40 à 125 °C −40 à 125 °C −40 à 125 °C
Plage d’humidité 0 à 100 %HR 0 à 100 %HR 0 à 100 %HR
Tension d’alimentation 1,08 à 3,6 V 1,08 à 3,6 V 1,08 à 3,6 V
Interface I2C I2C I2C
Courant moyen 0,4uA 0,4uA 0,4uA
Temps de réponse en température 2s 2s 2s
Temps de réponse à l’humidité 4s 4s 4s
Où acheter Acheter SHT40 Acheter SHT41 Acheter SHT45

Brochage SHT4x

Les trois capteurs SHT40, SHT41 et SHT45 communiquent via le protocole I2C. Le brochage est le même pour tous.

ESP32 avec circuit de capteur de température et d'humidité SHT41
  • VIN : broches d’alimentation. La plupart des cartes de dérivation sont livrées avec un régulateur de tension. Vous pouvez donc connecter le même niveau logique de puissance que votre microcontrôleur (par exemple, 5V pour l’Arduino et 3,3V pour l’ESP32)
  • 3Vo : la sortie du régulateur de tension (3,3 V). Certaines planches de discussion n’ont pas cette broche
  • GND : broche GND
  • SCL : broche d’horloge I2C
  • SDA : broche de données I2C

Câblage du SHT4x à l’ESP32

Vous pouvez connecter le SHT41 à l’ESP32 à l’aide du connecteur si votre carte en est équipée, ou vous pouvez le connecter aux broches I2C par défaut de l’ESP32.

SHT41 Kit de développement ESP32 ESP32-S3
NIV 3V3 3V3
3Vo Ne pas se connecter Ne pas se connecter
GND GND GND
SCL GPIO22 GPIO9
SDA GPIO21 GPIO8

Pièces requises :

Les broches ESP32 I2C peuvent être différentes selon le modèle de carte ESP32. Alors, ajustez en conséquence. Lecture recommandée :

ESP32-S3

Schéma de câblage du circuit du capteur ESP32-S3 Devkit SHT41 SHT40 SHT45

Kit de développement ESP32

Schéma de câblage du circuit du capteur ESP32 Devkit SHT41 SHT40 SHT45

Préparation de l’IDE Arduino

Avant de continuer, assurez-vous que l’IDE Arduino et les cartes ESP32 sont installés. Suivez le tutoriel suivant si ce n’est pas déjà fait :

Installation de la bibliothèque SHT4x

Il existe plusieurs bibliothèques pour s’interfacer avec le capteur SHT41. Nous utiliserons la bibliothèque Adafruit SHT4x. Il est compatible avec les capteurs SHT40, SHT41 et SHT45. Alternativement, vous pouvez également utiliser la bibliothèque fournie par Sensirion.

Dans votre IDE Arduino, ouvrez le gestionnaire de bibliothèque. Recherchez adafruit sht4x et installez la bibliothèque Adafruit SHT4x d’Adafruit (installez toutes les autres dépendances recommandées)

installer la bibliothèque adafruit sht4x arduino IDE

Code – ESP32 avec SHT41 : obtenez la température et l’humidité relative

La bibliothèque fournit un exemple simple montrant comment obtenir la température et l’humidité relative du capteur. Le code est déjà assez simple et direct, nous utilisons donc ici l’exemple original fourni par la bibliothèque (avec quelques modifications). Il est compatible avec les SHT40, SHT41 et SHT45.

Cet exemple montre comment obtenir la température et l’humidité relative, comment sélectionner différentes précisions (trois options différentes) et comment sélectionner différents paramètres pour utiliser le chauffage interne si nécessaire.

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-sht41-temperature-humidity-arduino/
  Based on the example provided by the Adafruit_SHT4x Library
*/
#include "Adafruit_SHT4x.h"

Adafruit_SHT4x sht4 = Adafruit_SHT4x();

void setup() {
  Serial.begin(115200);

  Serial.println("SHT4x test");
  if (!sht4.begin()) {
    Serial.println("Couldn't find SHT4x");
    while (1) delay(1);
  }
  Serial.println("Found SHT4x sensor");
  Serial.print("Serial number 0x");
  Serial.println(sht4.readSerial(), HEX);

  // You can have 3 different precisions, higher precision takes longer
  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  switch (sht4.getPrecision()) {
     case SHT4X_HIGH_PRECISION: 
       Serial.println("High precision");
       break;
     case SHT4X_MED_PRECISION: 
       Serial.println("Med precision");
       break;
     case SHT4X_LOW_PRECISION: 
       Serial.println("Low precision");
       break;
  }

  // You can have 6 different heater settings higher heat and 
  // longer times uses more power and reads will take longer too
  sht4.setHeater(SHT4X_NO_HEATER);
  switch (sht4.getHeater()) {
     case SHT4X_NO_HEATER: 
       Serial.println("No heater");
       break;
     case SHT4X_HIGH_HEATER_1S: 
       Serial.println("High heat for 1 second");
       break;
     case SHT4X_HIGH_HEATER_100MS: 
       Serial.println("High heat for 0.1 second");
       break;
     case SHT4X_MED_HEATER_1S: 
       Serial.println("Medium heat for 1 second");
       break;
     case SHT4X_MED_HEATER_100MS: 
       Serial.println("Medium heat for 0.1 second");
       break;
     case SHT4X_LOW_HEATER_1S: 
       Serial.println("Low heat for 1 second");
       break;
     case SHT4X_LOW_HEATER_100MS: 
       Serial.println("Low heat for 0.1 second");
       break;
  }
}

void loop() {
  sensors_event_t humidity, temp;
  
  uint32_t timestamp = millis();
  // Get the latest temperature and humidity readings
  sht4.getEvent(&humidity, &temp);
  timestamp = millis() - timestamp;

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degrees C");

  Serial.print("Humidity: "); 
  Serial.print(humidity.relative_humidity);
  Serial.println("% rH");
  
  // Convert temperature to Fahrenheit
  float tempF = 1.8 * temp.temperature + 32;
  Serial.print("Temperature: ");
  Serial.print(tempF);
  Serial.println(" degrees F");

  Serial.print("Read duration (ms): ");
  Serial.println(timestamp);
  Serial.println(" ");

  delay(1000);
}

Afficher le code brut

Comment fonctionne le code ?

Commencez par inclure la bibliothèque Adafruit_SHT4x.

#include "Adafruit_SHT4x.h"

Créez un objet Adafruit_SHT4x appelé sht4 pour faire référence au capteur.

Adafruit_SHT4x sht4 = Adafruit_SHT4x();

Dans setup(), initialisez le moniteur série.

void setup() {
  Serial.begin(115200);

Les lignes suivantes initialisent le capteur.

Serial.println("SHT4x test");
if (!sht4.begin()) {
  Serial.println("Couldn't find SHT4x");
  while (1) delay(1);
}
Serial.println("Found SHT4x sensor");

Chaque capteur SHT4x est livré avec un numéro de série unique. Vous pouvez l’obtenir en utilisant la fonction readSerial() sur l’objet sht4 comme indiqué dans les lignes suivantes.

Serial.print("Serial number 0x");
Serial.println(sht4.readSerial(), HEX);

Comme nous l’avons mentionné précédemment, vous pouvez sélectionner différentes précisions pour obtenir les données du capteur. Tenez compte du fait qu’une plus grande précision prend plus de temps. Choisissez en fonction des besoins de votre projet.

Vous pouvez choisir parmi ces options :

  • SHT4X_HIGH_PRECISION
  • SHT4X_MED_PRECISION
  • SHT4X_LOW_PRECISION

Nous sélectionnons la haute précision.

sht4.setPrecision(SHT4X_HIGH_PRECISION);

Le code montre ensuite comment définir les paramètres du chauffage. Il y a six options possibles :

  • SHT4X_NO_HEATER
  • SHT4X_HIGH_HEATER_1S
  • SHT4X_HIGH_HEATER_100MS
  • SHT4X_MED_HEATER_1S
  • SHT4X_MED_HEATER_100MS
  • SHT4X_LOW_HEATER_1S
  • SHT4X_LOW_HEATER_100MS

Dans l’exemple, nous n’utilisons pas le radiateur.

sht4.setHeater(SHT4X_NO_HEATER);

C’est dans la boucle() que nous obtiendrons les relevés de température.

Nous devons créer des objets de type sensor_event_t dans lesquels nous enregistrerons les lectures de température et d’humidité.

sensors_event_t humidity, temp;

Le code calcule également le temps nécessaire pour obtenir les lectures. Il est enregistré dans la variable d’horodatage.

uint32_t timestamp = millis();
(...)
timestamp = millis() - timestamp;

Pour remplir les objets de température et d’humidité avec les nouvelles données du capteur, nous devons procéder comme suit :

sht4.getEvent(&humidity, &temp);

Enfin, après avoir obtenu la température et l’humidité dans les objets correspondants, nous pouvons les obtenir en appelant temp.temperature et Moisture.relative_humidity comme indiqué ci-dessous (les lectures sont imprimées dans le moniteur série) :

Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degrees C");

Serial.print("Humidity: "); 
Serial.print(humidity.relative_humidity);
Serial.println("% rH");

Nous avons également la possibilité d’imprimer la température en Fahrenheit.

float tempF = 1.8 * temp.temperature + 32;
Serial.print("Temperature: ");
Serial.print(tempF);
Serial.println(" degrees F");

Nous imprimons également le temps nécessaire pour obtenir de nouvelles lectures. Si vous modifiez les définitions de précision et de chauffage, vous verrez que cela change.

Serial.print("Read duration (ms): ");
Serial.println(timestamp);

Démonstration

Téléchargez le code précédent sur votre carte ESP32. Assurez-vous de sélectionner la bonne carte et le bon port COM.

Après le téléchargement, ouvrez le moniteur série à une vitesse de transmission de 115 200 bauds et appuyez sur le bouton RST.

Après quelques secondes, il devrait commencer à afficher la température et l’humidité relative actuelles, ainsi que le temps nécessaire pour obtenir les lectures.

ESP32 obtient la température et l'humidité du capteur SHT41 - affichage sur le moniteur série

ESP32 avec SHT41 : affichage de la température et de l’humidité relative sur l’écran OLED

La bibliothèque est également livrée avec un autre exemple pour afficher les lectures du capteur sur l’écran OLED.

ESP32 avec capteur d'humidité de température SHT41 Circuit OLED Arduino IDE

Pièces requises :

Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1793507853 769 ESP32 avec SHT41 obtenez la temperature et lhumidite Arduino

Schémas de câblage

L’écran OLED utilise également le protocole de communication I2C. Vous pouvez le connecter aux mêmes broches I2C.

ESP32-S3

ESP32S3 connecté au capteur d'humidité et de température SHT41 et à un écran OLED SHT40 SHT45

Kit de développement ESP32

ESP32 Devkit connecté au capteur d'humidité et de température SHT41 et à un écran OLED SHT40 SHT45

Installer les bibliothèques requises

Pour ce projet, vous devez également installer les bibliothèques suivantes si ce n’est pas déjà fait :

Vous pouvez les installer en recherchant leurs noms dans le gestionnaire de bibliothèque Arduino IDE et vous devez également installer toutes les autres dépendances suggérées.

Dépendances d'installation d'adafruit SHT4X

Code – Afficher les lectures SHT41 sur l’écran OLED

Le code suivant affiche les lectures de température et d’humidité relative sur l’écran OLED. Le code a été légèrement modifié par rapport à l’exemple fourni par la bibliothèque.

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-sht41-temperature-humidity-arduino/
  Based on the example provided by the Adafruit_SHT4x Library
*/
#include 
#include 
#include "Adafruit_SHT4x.h"
#include 

#define SCREEN_WIDTH 128    // OLED display width (pixels)
#define SCREEN_HEIGHT 64    // OLED display height (pixels)

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1   // Reset pin (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Declaration for the SHT4X connected to the default I2C pins
Adafruit_SHT4x sht4 = Adafruit_SHT4x();

void setup() {
  Serial.begin(115200);

  // Initialize OLED display
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("SSD1306 allocation failed");
    for (;;);
  }

  // Clear the display
  display.clearDisplay();
  display.display();
  
  // Initialize SHT4x sensor
  Serial.println("Initializing SHT4x");
  if (! sht4.begin(&Wire)) {
    Serial.println("Couldn't find SHT4x");
    while (1) delay(1);
  }
  Serial.println("Found SHT4x sensor");
  Serial.print("Serial number 0x");
  Serial.println(sht4.readSerial(), HEX);

  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  sht4.setHeater(SHT4X_NO_HEATER);
  
  display.setFont(&FreeSans9pt7b);
  display.setTextColor(SSD1306_WHITE);  
}

void loop() {
  sensors_event_t humidity, temp;
  
  uint32_t timestamp = millis();
  // Get the latest temperature and humidity readings
  sht4.getEvent(&humidity, &temp);
  // Calculate the time it takes to get a new reading
  timestamp = millis() - timestamp;

  Serial.print("Temperature: "); 
  Serial.print(temp.temperature); 
  Serial.println(" degrees C");

  Serial.print("Humidity: "); 
  Serial.print(humidity.relative_humidity); 
  Serial.println("% rH");

  // Convert temperature to Fahrenheit
  float tempF = 1.8 * temp.temperature + 32;
  Serial.print("Temperature: ");
  Serial.print(tempF);
  Serial.println(" degrees F");

  Serial.print("Read duration (ms): ");
  Serial.println(timestamp);

  display.clearDisplay();
  display.setCursor(0, 20);
  display.println("SHT41 Sensor");
  display.setCursor(0, 40);

  display.print("Temp: "); 
  display.print(temp.temperature,1); 
  display.println(" C");

  // Display temperature in Fahrenheit
  //display.print("Temp: "); 
  //display.print(tempF,1);
  //display.println(" F");

  display.print("Hum: "); 
  display.print(humidity.relative_humidity,1); 
  display.println(" %");
  display.display();
  yield();
  delay(100);
}

Afficher le code brut

Si vous avez déjà travaillé avec un écran OLED SSD1306, le code est assez facile à comprendre. Pour en savoir plus sur l’utilisation et la programmation d’un écran OLED avec l’ESP32, consultez notre guide :

Démonstration

Après avoir téléchargé le code, l’OLED affichera la température et l’humidité relative actuelles, comme indiqué dans l’image ci-dessous.

ESP32 avec capteur d'humidité de température SHT41 Démonstration OLED Arduino IDE

Conclusion

Dans ce guide, vous avez appris à utiliser le capteur de température et d’humidité relative SHT41 avec l’ESP32 programmé avec l’IDE Arduino. Ce tutoriel est également compatible avec SHT40 et SHT45. Le câblage et le code sont exactement les mêmes.

Le SHT41 est l’un des meilleurs capteurs en termes de rapport qualité-prix, c’est donc un excellent choix pour vos projets IoT et de domotique amateurs.

Nous proposons des didacticiels pour d’autres capteurs de température/humidité populaires :

Nous espérons que vous avez trouvé ce guide utile. Quels autres guides/tutoriels aimeriez-vous voir sur les capteurs SHT4x ? Faites-le-nous savoir dans la section commentaires.

Si vous souhaitez en savoir plus sur l’ESP32, consultez nos ressources :

Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

  • Zylotec Lot de 2 modules de capteur d'humidité SHT41, capteur Qwiic I²C, précision de température ± 0,2 °C, ± 1,8 % RH, -40 à 125 °C, pour Arduino, ESP32 et projets de bricolage
  • SHT41 Module de capteur de température et d'humidité Ulegqin SHT40 avec interface I2C 3,3-5 V Tension d'alimentation pour climatiseurs et déshumidificateurs