Traduit de English par IA ·
Le câblage est correct, ta lecture arrive trop tôt. En mode no-hold, le HTU21D envoie un NACK sur son adresse de lecture tant que la mesure n’est pas terminée, ce que montre exactement l’analyseur. Une mesure d’humidité sur 12 bits prend jusqu’à environ 16 ms ; avec la résolution par défaut et une marge, il faut attendre plus de 15 ms. La température est la plus lente, à 50 ms, et tu as probablement copié le délai d’un exemple ne concernant que l’humidité, avec un résultat qui a fonctionné par chance dans l’autre sens.Je scrute au lieu de deviner :
Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
uint8_t n = 0;
for (int i = 0; i < 10 && n < 3; i++) {
delay(10);
n = Wire.requestFrom(0x40, 3);
}
if (n < 3) { /* skip humidity this round */ }
Et si une lecture échoue malgré tout, omets la clé dans le message de cette minute ou envoie null. N’envoie pas 0 : Hermetry l’enregistre comme un vrai 0 % et ta règle d’alarme va en profiter. null signifie simplement qu’il n’y a pas de mesure.
Wiring is fine, your read is too early. In no-hold mode the HTU21D NACKs its read address until the measurement is done, which is exactly what the analyser shows. A 12-bit humidity reading takes up to about 16 ms, and with the default resolution and some margin you want more than 15. Temperature is the slow one at 50 ms, and you probably copied the delay from a humidity-only example and got lucky the other way round.
I poll instead of guessing:
Wire.beginTransmission(0x40);
Wire.write(0xF5);
Wire.endTransmission();
uint8_t n = 0;
for (int i = 0; i < 10 && n < 3; i++) {
delay(10);
n = Wire.requestFrom(0x40, 3);
}
if (n < 3) { /* skip humidity this round */ }
And when a read still fails, leave the key out of that minute’s message or send null. Don’t send 0, Hermetry stores it as a real 0 % and your alarm rule will love that. null just means no reading.

