From 15ee6d27fad477c4fbf2aa033a8e8ac577ff2715 Mon Sep 17 00:00:00 2001 From: Jonathan BAUDIN Date: Sun, 5 Nov 2023 15:08:40 +0100 Subject: [PATCH] Add readme section about `Dht22Type2` --- Cargo.toml | 2 +- readme.md | 15 ++++++++++++++- readme_fr.md | 14 +++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 36abbb9..14620d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dht-pio" -version = "0.5.3" +version = "0.5.4" edition = "2021" license = "MIT" diff --git a/readme.md b/readme.md index 5fba2a4..63dc750 100644 --- a/readme.md +++ b/readme.md @@ -33,7 +33,20 @@ Read data: let dht_data = dht.read(&mut delay); ``` -NB: `read` retrun a `Result`. +NB: `read` return a `Result`. + +### DHT22 type 2 🧐 +It seems that there are two versions of DHT22. I haven't found anything really conclusive, but what is certain is that not all DHT22s have the same data format... In one case the format is the same as presented in (almost) all datasheets, i.e. the most significant bit is set to `1` if the number is negative, **but** the binary representation of the absolute temperature value is not changed. For example: + - `0000 0000 0110 1001` = 105 or 10.5°C + - `1000 0000 0110 1001` = 32873 or -10.5°C + +This is how the `Dht22` struct will "decode" the data coming from the sensor. +However, I've come across sensors that don't work like this at all. But in a (ultimately) more logical way. Since the data is represented in [**two's complement**](https://en.wikipedia.org/wiki/Two%27s_complement). In this case, use `Dht22Type2`. For example: + - `0000 0000 0110 1001` = 105 i.e. 10.5°C + - `1111 1111 1001 0111` = 65431 i.e. -10.5°C + +To simplify, if your sensor is a DHT22 but the values don't seem consistent (negative values), then try "Type 2" (and if nothing really works, open an exit 😉 ). + ## Support ### Board diff --git a/readme_fr.md b/readme_fr.md index 171035f..b622a1c 100644 --- a/readme_fr.md +++ b/readme_fr.md @@ -36,7 +36,19 @@ Lire les données: let dht_data = dht.read(&mut delay); ``` -NB: `read` retrun un `Result`. +NB: `read` renvoi un `Result`. + +### DHT22 Type 2 🧐 +Il semble qu'il existe deux versions de DHT22. Je n'ai rien trouvé de vraiment probant, mais ce qui est certain c'est que tous les DHT22 n'ont pas le même format de donnée... Dans un cas le format est le même que présenté dans (quasi) toutes les datasheet, à savoir le bit de poids fort est à l'état `1` si le nombre est négatif, **mais** la représentation binaire de la valeur absolue de la température n'en est pas changée. Par exemple: + - `0000 0000 0110 1001` = 105 soit 10.5°C + - `1000 0000 0110 1001` = 32873 soit -10.5°C + +C'est comme cela que la struct `Dht22` va "décoder" les données en provenance du capteur. +Or je suis tombé sur des capteurs qui ne fonctionnaient pas du tout comme cela. Mais de manière (au final) plus logique. Puisque les données sont représentées en [**complément à deux**](https://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux). Dans ce cas il faut utiliser `Dht22Type2`. Par exemple: + - `0000 0000 0110 1001` = 105 soit 10.5°C + - `1111 1111 1001 0111` = 65431 soit -10.5°C + +Pour simplifier si votre capteur est un DHT22 mais que les valeurs ne semblent pas cohérentes (valeurs négatives) alors essayez le "Type 2" (et si vraiment rien ne marche, ouvrez une issue 😉). ## Support ### Board