embassy-am2302
Driver async no_std pour le capteur de température et d'humidité AM2302 (DHT22).
Compatible avec toutes les cartes via embedded-hal.
⚠️ La version 0.1.0 est obsolète. Elle dépendait d'
embassy-timeetembassy-sync, ce qui causait des conflits avec les projets Embassy utilisant une source git. La version 0.2.x corrigeait cela mais utilisait un seuil fixe non documenté. La 0.3.0 expose le seuil en paramètre avec des constantes prêtes à l'emploi.
Fonctionnalités
- Entièrement asynchrone via
embedded-hal-async - Aucune dépendance Embassy — zéro conflit de versions
- Aucun timer hardware requis — mesure des bits par comptage de boucles
- Seuil de détection passé en paramètre — portable sur tout MCU
- Constantes précalibrées pour la Pico 2 et la Pico 1
- Vérification du checksum intégrée
- Support des températures négatives
- Compatible
no_std, aucune allocation dynamique
Installation
[]
= "0.3"
Utilisation
use ;
match am2302_read.await
Constantes de seuil
| Constante | Carte | Fréquence |
|---|---|---|
PICO2_BIT_THRESHOLD |
Raspberry Pi Pico 2 (RP2350) | 150 MHz |
PICO_BIT_THRESHOLD |
Raspberry Pi Pico (RP2040) | 125 MHz |
Pour tout autre MCU, calibrez empiriquement ou avec un oscilloscope.
La valeur correcte se situe entre ~28 µs et ~70 µs selon votre fréquence :
threshold = fréquence_mhz * 28 / 1000 comme point de départ.
Exemple complet — Embassy RP2350 avec LCD HD44780
signals.rs :
use ;
use EnvData;
pub static ENV_SIGNAL: = new;
tasks.rs — lecture capteur :
use Flex;
use ;
use ;
use crateENV_SIGNAL;
pub async
tasks.rs — affichage LCD :
use LcdI2c;
use ;
use I2C0;
use ;
use Write;
use String;
use crateENV_SIGNAL;
pub async
main.rs :
let pin = new;
spawner.spawn.unwrap;
spawner.spawn.unwrap;
Pourquoi un seuil en paramètre ?
Le DHT22 encode ses bits par la durée relative du signal haut (~28 µs pour un 0,
~70 µs pour un 1). Cette crate mesure cette durée par comptage d'itérations de boucle,
ce qui évite toute dépendance à embassy-time et tout conflit de versions.
En contrepartie, le nombre d'itérations correspondant à 28–70 µs varie selon la fréquence du MCU. Exposer ce seuil en paramètre plutôt que de le coder en dur rend la crate portable sans introduire la moindre dépendance Embassy.
Migration depuis 0.2.x
| 0.2.x | 0.3.0 |
|---|---|
am2302_read(&mut pin, &mut delay) |
am2302_read(&mut pin, &mut delay, PICO2_BIT_THRESHOLD) |
| Seuil fixe interne (40) | Seuil explicite passé en argument |
| Non documenté pour autres MCU | Constantes fournies + formule de calibration |
Licence
Ce projet est distribué sous licence GPL-2.0-or-later. Voir le fichier LICENSE pour les détails.