Tutoriel - Bibliothèque STM32_DHT20_I2C
Interface C pour capteur de température et d'humidité DHT20 via I2C sur microcontrôleurs STM32
Consultez la librairie sur GitHub.
1. Introduction
La bibliothèque STM32_DHT20_I2C est une interface C conçue pour faciliter la communication entre les microcontrôleurs STM32 et le capteur de température et d'humidité DHT20, qui utilise le protocole I2C. Cette bibliothèque s'appuie sur le framework HAL (Hardware Abstraction Layer) de ST Microelectronics pour assurer la portabilité entre les différentes familles de microcontrôleurs STM32.
2. Compatibilité et Prérequis
Compatibilité Matérielle
- Toutes les familles de microcontrôleurs STM32 supportant HAL et disposant d'un périphérique I2C.
- Capteur DHT20.
Prérequis Logiciels
- Un microcontrôleur STM32.
- STM32CubeIDE.
- Le bus I2C sur lequel se troue votre capteur doit être configuré et initialisé dans votre projet.
- La librairie HAL
STM32_DHT20_I2C
présente dans le répertoire STM32_Libraries.
3. Fichiers de la librairie
STM32_DHT20_I2C.h
: Fichier d'en-tête contenant les déclarations des fonctions et constantes.STM32_DHT20_I2C.c
: Fichier source contenant l'implémentation des fonctions.
n'oubliez pas de modifier le fichier STM32_DHT20_I2C.h
pour
l'adapter à votre configuration matérielle #include "stm32l0xx_hal.h" // Remplacez stm32l0xx_hal.h si vous utilisez une autre série de carte ex : stm32f4xx_hal.h.
4. Installation et Configuration
Pour installer la bibliothèque dans votre projet STM32 :
- Créez un dossier nommé
STM32_DHT20_I2C
dans le répertoireDrivers
de votre projet STM32 et copiez y les fichiersSTM32_DHT20_I2C.h
etSTM32_DHT20_I2C.c
. - Ajoutez les chemins d'inclusion : dans les propriétés de votre projet STM32CubeIDE, dans C/C++ General,
> Paths and Symbols > Onglet Includes, dans GNU ajoutez le chemin vers le dossier
STM32_DHT20_I2C
.
N'oublier pas d'activer le float dans les propriétés du projet pour afficher le nombres flottants dans le printf.
5. Le Capteur DHT20
Le DHT20 est un capteur numérique de température et d'humidité qui communique via le protocole I2C. Il est connu pour sa bonne précision et sa stabilité.
Caractéristique | Valeur |
---|---|
Interface de Communication | I2C |
Adresse I2C | 0x38 (fixe) |
Plage de Température | -40 à 80°C |
Précision Température | ±0.3°C |
Plage d'Humidité | 0 à 100% RH |
Précision Humidité | ±2% RH (à 25°C) |
Tension d'alimentation | 2.5V à 5.5V |
6. Branchement du Capteur
Brochage du capteur DHT20
Le capteur DHT20 (ou le module sur lequel il est monté) a typiquement 4 broches :
- VCC : Alimentation (typiquement 3.3V pour STM32)
- GND : Masse
- SCL : Ligne d'horloge I2C
- SDA : Ligne de données I2C
Connexion au STM32
- VCC → 3.3V du STM32
- GND → GND du STM32
- SCL → Broche SCL du périphérique I2C configuré sur le STM32 (ex: PB6 pour I2C1_SCL)
- SDA → Broche SDA du périphérique I2C configuré sur le STM32 (ex: PB7 pour I2C1_SDA)

Diagramme de connexion typique du capteur avec un STM32 (exemple avec DHT22 illustrant les connexions I2C).
7. Configuration I2C sur STM32
Le périphérique I2C du STM32 doit être configuré correctement.
Configuration avec STM32CubeMX
- Ouvrez votre projet dans STM32CubeMX.
- Dans la section "Connectivity", sélectionnez un périphérique I2C (par exemple, I2C1).
- Activez le mode I2C.
- Configurez les paramètres I2C :
- I2C Speed Mode: Standard Mode (100kHz) ou Fast Mode (400kHz). Le DHT20 supporte jusqu'à 400kHz.
- Les autres paramètres peuvent souvent être laissés par défaut.
8. Utilisation de la Bibliothèque
8.1 Inclusion de la Bibliothèque
Pour utiliser la bibliothèque, incluez le fichier d'en-tête dans votre `main.c` :
/* USER CODE BEGIN Includes */
#include <stdio.h> // Pour printf
#include "STM32_DHT20_I2C.h" // Inclure la bibliothèque STM32_DHT20_I2C
/* USER CODE END Includes */
8.2 Fonctions Utilitaires
Incluez le fichier d'en-tête dans la section USER CODE BEGIN Includes
:
/* USER CODE BEGIN 0 */
int __io_putchar(int ch) {
HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
return ch;
}
/* USER CODE END 0 */
8.3 Initialisation
Initialisez le capteur dans la section USER CODE BEGIN 2
:
/* USER CODE BEGIN 2 */
printf("--- Initialisation ---\r\n");
DHT20_Handle dht20_sensor; // Structure pour contenir les données du capteur DHT20
float temperature; // Température lue par le capteur DHT20
float humidity; // Humidité lue par le capteur DHT20
DHT20_Init(&dht20_sensor, &hi2c1, 100); // Initialise le capteur DHT20 avec le handle I2C et un timeout de 100ms
if (DHT20_Check_Status(&dht20_sensor) == HAL_OK) { // Vérifie si le capteur est prêt
printf("Capteur DHT20 prêt.\r\n"); // Affiche un message de succès
} else { // Sinon, affiche un message d'erreur
printf("Erreur lors de la vérification du statut du capteur DHT20.\r\n");
}
printf("--- Début de la lecture ---\r\n");
/* USER CODE END 2 */
8.4 Lecture des Données
Pour lire les données de température et d'humidité dans la section USER CODE BEGIN WHILE
:
/* USER CODE BEGIN WHILE */
while (1)
{
// Lire les données via le handle
HAL_StatusTypeDef dht_status = DHT20_ReadData(&dht20_sensor, &temperature, &humidity); // &temperature, &humidity);
if (dht_status == HAL_OK) {
printf("Température: %.2f °C, Humidité: %.2f %%\r\n", temperature, humidity); // Afficher les données
}
HAL_Delay(2000); // 2s entre chaque mesure
/* USER CODE END WHILE */
9. Dépannage
Problèmes Courants et Solutions
Problème | Causes Possibles | Solutions |
---|---|---|
Le capteur ne répond pas (erreur de communication, NACK) |
|
|
Erreur CRC |
|
|
Valeurs incorrectes ou figées |
|
|
10. Référence API (Exemple)
Voici un aperçu des fonctions typiques que pourrait fournir la bibliothèque
STM32_DHT20_I2C.h
:
-
DHT20_Status_t DHT20_Init(DHT20_Sensor_t* sensor, I2C_HandleTypeDef* hi2c)
: Initialise le capteur DHT20. Prend en argument un pointeur vers la structure du capteur et le handle I2C. Vérifie la communication et l'état du capteur. -
DHT20_Status_t DHT20_TriggerMeasurement(DHT20_Sensor_t* sensor)
: (Optionnel, peut être interne à ReadData) Envoie la commande pour démarrer une conversion de température et d'humidité. -
DHT20_Status_t DHT20_ReadData(DHT20_Sensor_t* sensor, float* temperature, float* humidity)
: Déclenche une mesure (si non fait séparément), attend la conversion, lit les données brutes, vérifie le CRC, et convertit les données en température (°C) et humidité (%). -
DHT20_Status_t DHT20_ReadRawData(DHT20_Sensor_t* sensor, uint8_t* buffer, uint8_t len)
: (Optionnel) Lit les données brutes du capteur sans conversion. -
uint8_t DHT20_CalculateCRC(uint8_t *data, uint8_t len)
: (Interne ou utilitaire) Calcule le CRC8 pour les données.
La structure DHT20_Sensor_t
:
typedef struct {
GPIO_TypeDef* DHT_PORT; // Pointeur vers le port GPIO auquel le capteur est connecté.
uint16_t DHT_PIN; // Numéro de la broche GPIO à laquelle le capteur est connecté.
uint8_t sensorType; // Type du capteur (utiliser les définitions DHT11, DHT22, DHT21).
TIM_HandleTypeDef* htim; // Pointeur vers le handle du timer utilisé pour les délais/mesures.
uint8_t hum1; // Octet de poids fort de l'humidité (ou partie entière pour DHT11).
uint8_t hum2; // Octet de poids faible de l'humidité (ou partie décimale pour DHT11).
uint8_t temp1; // Octet de poids fort de la température (ou partie entière pour DHT11).
uint8_t temp2; // Octet de poids faible de la température (ou partie décimale pour DHT11).
uint8_t SUM; // Somme de contrôle reçue du capteur.
uint8_t CHECK; // Somme de contrôle calculée localement.
} DHT_Sensor;
11. Conclusion
La bibliothèque STM32_DHT20_I2C vise à simplifier l'utilisation du capteur DHT20 avec les microcontrôleurs STM32 en encapsulant la complexité de la communication I2C et de la conversion des données. En suivant ce tutoriel, vous devriez être en mesure de configurer, brancher et lire les données de température et d'humidité de votre capteur DHT20.