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
- Créez un dossier nommé
STM32_AHT20
dans le répertoireDrivers
de votre projet STM32 et copiez y les fichiersSTM32_AHT20.h
etSTM32_AHT20.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_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, ouAHT20_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 unuint8_t
où l'octet de statut sera stocké.- Retourne
AHT20_OK
en cas de succès, ouAHT20_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 structureAHT20_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, ouAHT20_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éralement0x38 << 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 de0x38
. - Utilisez la fonction
I2C_Scan
(présente dans l'exemplemain.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.
- Le capteur peut être encore en train d'effectuer une mesure. La librairie attend
- 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 redirigerprintf
vers l'UART (comme montré dans l'exemplemain.c
).
- Assurez-vous que l'UART est correctement configuré et que la fonction
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.