Tutoriel - Bibliothèque STM32_AHT20

Interface simple pour communiquer avec le capteur de température et d'humidité AHT20.

Consultez la librairie sur GitHub.

1. Introduction

Le capteur AHT20 est un capteur numérique de température et d'humidité relative. Cette librairie facilite son utilisation avec les microcontrôleurs STM32 en s'appuyant sur la couche d'abstraction matérielle (HAL) fournie par STMicroelectronics.

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 AHT20.

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_AHT20 présente dans le répertoire STM32_Libraries.

3. Fichiers de la librairie

  • STM32_AHT20.h : Fichier d'en-tête contenant les déclarations des fonctions et constantes.
  • STM32_AHT20.c : Fichier source contenant l'implémentation des fonctions.

n'oubliez pas de modifier le fichier STM32_AHT20.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 Intégration

  1. Créez un dossier nommé STM32_AHT20 dans le répertoire Drivers de votre projet STM32 et copiez y les fichiers STM32_AHT20.h et STM32_AHT20.c.
  2. 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_AHT20.

N'oublier pas d'activer le float dans les propriétés du projet pour afficher le nombres flottants dans le printf.

5. Utilisation

Pour utiliser la librairie, voici un exemple, modifier le fichier main.c de votre projet STM32CubeIDE.

5.1 Inclusion

Incluez le fichier d'en-tête dans la section USER CODE BEGIN Includes :


/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "STM32_AHT20.h"
/* USER CODE END Includes */
            

5.2 Redirection de printf

Pour afficher les résultats sur le terminal, redirigez la sortie de printf vers l'UART. Vous pouvez utiliser la fonction __io_putchar pour cela. Voici un exemple d'implémentation pour l'UART2 dans la section USER CODE BEGIN 0 :


/* USER CODE BEGIN 0 */
// Fonction qui transmet un caractère via UART et le renvoie.Utilisé pour la sortie standard (printf).
int __io_putchar(int ch) {
HAL_UART_Transmit(&huart2, (uint8_t*) &ch, 1, 0xFFFF); // Pour Envoyer le caractère via UART
// ITM_SendChar(ch); // Option alternative pour envoyer le caractère via ITM
return ch;
}
/* USER CODE END 0 */
        

5.3 Initialisation

Initialisez le capteur dans la section USER CODE BEGIN 2 :


/* USER CODE BEGIN 2 */
AHT20_Status status = AHT20_Init(&hi2c1);
if (status != AHT20_OK) {
    printf("Erreur d'initialisation du capteur AHT20: %d\r\n", status);
    Error_Handler();
}
AHT20_Data sensor_data; // Structure pour stocker les données du capteur
/* USER CODE END 2 */
        

5.4 Lecture des mesures

Pour lire les données de température et d'humidité dans la section USER CODE BEGIN WHILE :


/* USER CODE BEGIN WHILE */
while (1) {
    status = AHT20_ReadMeasurements(&hi2c1, &sensor_data);
    if (status == AHT20_OK) {
        printf("Température: %.1f °C, Humidité: %.1f %%\r\n", sensor_data.temperature, sensor_data.humidity);
        HAL_Delay(1000);
    }
    /* USER CODE END WHILE */
        

5.5 Gestion des erreurs

Toutes les fonctions de la librairie retournent un statut de type `AHT20_Status`. Il est crucial de vérifier cette valeur pour s'assurer que l'opération s'est déroulée correctement. Les statuts possibles sont définis dans le fichier d'en-tête STM32_AHT20.h :

  • AHT20_OK : Opération réussie.
  • AHT20_ERROR_I2C : Erreur de communication I2C.
  • AHT20_ERROR_CALIBRATION : Calibration échouée.
  • AHT20_ERROR_BUSY : Le capteur est occupé.
  • AHT20_ERROR_CHECKSUM : Erreur de somme de contrôle.
  • AHT20_ERROR_INVALID_PARAM : Paramètre invalide.

6. Fonctions détaillées

AHT20_Init


AHT20_Status AHT20_Init(I2C_HandleTypeDef *hi2c);
        

Initialise le capteur AHT20. Cette fonction effectue un reset logiciel, envoie la commande d'initialisation et vérifie le bit de calibration du capteur.

  • hi2c: Pointeur vers la structure de handle I2C.
  • Retourne AHT20_OK en cas de succès, ou un code d'erreur sinon.

AHT20_SoftReset


AHT20_Status AHT20_SoftReset(I2C_HandleTypeDef *hi2c);
        

Effectue un reset logiciel du capteur.

  • hi2c: Pointeur vers la structure de handle I2C.
  • Retourne AHT20_OK en cas de succès, ou AHT20_ERROR_I2C en cas d'échec de communication.

AHT20_GetStatus


AHT20_Status AHT20_GetStatus(I2C_HandleTypeDef *hi2c, uint8_t *status_byte);
        

Récupère l'octet de statut brut du capteur.

  • hi2c: Pointeur vers la structure de handle I2C.
  • status_byte: Pointeur vers un uint8_t où l'octet de statut sera stocké.
  • Retourne AHT20_OK en cas de succès, ou AHT20_ERROR_I2C.

AHT20_ReadMeasurements


AHT20_Status AHT20_ReadMeasurements(I2C_HandleTypeDef *hi2c, AHT20_Data *data);
        

Déclenche une mesure et lit les données de température et d'humidité.

  • hi2c: Pointeur vers la structure de handle I2C.
  • data: Pointeur vers une structure AHT20_Data où les mesures converties (température en °C, humidité en %) seront stockées.
  • Retourne AHT20_OK en cas de succès, AHT20_ERROR_BUSY si le capteur est occupé, AHT20_ERROR_CHECKSUM si le CRC est incorrect, ou AHT20_ERROR_I2C.

7. Calibration

Le capteur AHT20 effectue une calibration interne lors de son initialisation. La fonction AHT20_Init vérifie le bit de statut "CAL Enable" (bit 3 de l'octet de statut) pour s'assurer que cette calibration interne s'est bien déroulée. Si ce bit n'est pas positionné correctement après la séquence d'initialisation, AHT20_Init retourne AHT20_ERROR_CALIBRATION.
Il ne s'agit pas d'une procédure de calibration où l'utilisateur fournit des points de référence, mais d'une vérification de l'auto-calibration du capteur.

8. Constantes importantes

Définies dans STM32_AHT20.h :

  • AHT20_I2C_ADDR: Adresse I2C du capteur (généralement 0x38 << 1).
  • AHT20_CMD_INIT, AHT20_CMD_SOFT_RESET, AHT20_CMD_TRIGGER: Commandes I2C.
  • AHT20_DELAY_INIT_CMD_WAIT_MS, AHT20_DELAY_SOFT_RESET_MS, AHT20_DELAY_MEASUREMENT_WAIT_MS: Délais utilisés par la librairie.
  • AHT20_I2C_TIMEOUT_MS: Timeout pour les opérations I2C.

9. Dépannage

  • Erreur d'initialisation (AHT20_ERROR_I2C, AHT20_ERROR_CALIBRATION):
    • Vérifiez le câblage du capteur AHT20 (SDA, SCL, VCC, GND).
    • Assurez-vous que les résistances de pull-up sont présentes sur les lignes SDA et SCL si nécessaire.
    • Vérifiez que l'adresse I2C (AHT20_I2C_ADDR) est correcte. L'AHT20 a une adresse fixe de 0x38.
    • Utilisez la fonction I2C_Scan (présente dans l'exemple main.c) pour vérifier si le capteur est détecté sur le bus I2C.
    • Assurez-vous que le bus I2C est correctement initialisé avant d'appeler AHT20_Init.
  • Erreur de lecture (AHT20_ERROR_BUSY):
    • Le capteur peut être encore en train d'effectuer une mesure. La librairie attend AHT20_DELAY_MEASUREMENT_WAIT_MS (typiquement 80ms) après avoir déclenché une mesure. Si cette erreur persiste, il peut y avoir un problème avec le capteur ou la communication.
  • Erreur de lecture (AHT20_ERROR_CHECKSUM):
    • Indique que les données reçues du capteur sont corrompues. Cela peut être dû à du bruit sur le bus I2C, à des problèmes de timing ou à un capteur défectueux. Vérifiez la qualité des connexions.
  • Pas de sortie printf:
    • Assurez-vous que l'UART est correctement configuré et que la fonction __io_putchar (ou équivalent) est implémentée pour rediriger printf vers l'UART (comme montré dans l'exemple main.c).

10. Conclusion

La bibliothèque STM32_AHT20 vise à simplifier l'utilisation du capteur AHT20 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 AHT20.