question sur acquisition valeurs sonde SHT20

Bonjour,
pour relever la température et l'humidité des chambres et de la SdB dans ma maison, j'ai acheté 6 sondes SHT20 (sondes), j'ai acheté également un multiplexeur I2C TCA9548A (multiplexeur). J'ai réalisé un code pour un WEMOS D1 Mini (car envoi à ma domotique) qui lit les 6 sondes l'une après l'autre.
Mais j'ai un phénomène que je ne comprend pas:
si je fais :

   tcaselect(i); //(selection de la sonde sur le TCA9548A
   delay(8500); // attente des 8s
    float temp = sht20.readTemperature();               // Read Temperature
    delay(10);
    float humd = sht20.readHumidity();                  // Read Humidity

j'obtiens une mesure correcte de l'humidité mais la température c'est n'importe quoi:

11:54:41.586 -> Sonde n° 0 Temperature: -45.9 C Humidity: 57.7 %
11:54:50.329 ->
11:54:50.329 -> Sonde n° 1 Temperature: 998.0 C Humidity: 45.6 %
11:54:59.137 ->
11:54:59.137 -> Sonde n° 2 Temperature: 998.0 C Humidity: 44.6 %
11:55:07.946 ->
11:55:07.946 -> Sonde n° 3 Temperature: 998.0 C Humidity: 43.8 %
11:55:16.802 ->
11:55:16.802 -> Sonde n° 4 Temperature: 33.6 C Humidity: 45.1 %
11:55:25.517 ->
11:55:25.517 -> Sonde n° 5 Temperature: 22.4 C Humidity: 44.8 %
11:55:34.227 ->

11:55:44.240 -> Sonde n° 0 Temperature: 22.7 C Humidity: 55.8 %
11:55:53.055 ->
11:55:53.055 -> Sonde n° 1 Temperature: 998.0 C Humidity: 44.9 %
11:56:01.865 ->
11:56:01.865 -> Sonde n° 2 Temperature: 22.8 C Humidity: 44.3 %
11:56:10.575 ->
11:56:10.575 -> Sonde n° 3 Temperature: 998.0 C Humidity: 43.8 %
11:56:19.384 ->
11:56:19.384 -> Sonde n° 4 Temperature: 64.8 C Humidity: 44.5 %
11:56:28.097 ->
11:56:28.097 -> Sonde n° 5 Temperature: 998.0 C Humidity: 44.1 %
11:56:36.940 ->

11:56:46.914 -> Sonde n° 0 Temperature: 125.0 C Humidity: 55.7 %
11:56:55.670 ->
11:56:55.670 -> Sonde n° 1 Temperature: 998.0 C Humidity: 45.2 %
11:57:04.495 ->
11:57:04.495 -> Sonde n° 2 Temperature: 998.0 C Humidity: 44.3 %
11:57:13.288 ->
11:57:13.288 -> Sonde n° 3 Temperature: 998.0 C Humidity: 43.8 %
11:57:22.097 ->
11:57:22.097 -> Sonde n° 4 Temperature: 61.5 C Humidity: 44.5 %
11:57:30.859 ->
11:57:30.859 -> Sonde n° 5 Temperature: 998.0 C Humidity: 44.8 %
11:57:39.668 ->

si je fais:

    tcaselect(i); //(selection de la sonde sur le TCA9548A
    delay(8500); // attente des 8s
    float humd = sht20.readHumidity();                  // Read Humidity
    delay(10);
    float temp = sht20.readTemperature();               // Read Temperature

c'est la température qui est bonne mais l'humidité c'est n'importe quoi:

12:01:24.072 -> Sonde n° 0 Temperature: 22.4 C Humidity: -1.2 %
12:01:32.634 ->
12:01:32.634 -> Sonde n° 1 Temperature: 22.7 C Humidity: 998.0 %
12:01:41.289 ->
12:01:41.289 -> Sonde n° 2 Temperature: 22.9 C Humidity: 998.0 %
12:01:49.898 ->
12:01:49.898 -> Sonde n° 3 Temperature: 23.1 C Humidity: 998.0 %
12:01:58.506 ->
12:01:58.506 -> Sonde n° 4 Temperature: 22.5 C Humidity: 58.6 %
12:02:07.068 ->
12:02:07.068 -> Sonde n° 5 Temperature: 22.4 C Humidity: 998.0 %
12:02:15.660 ->

12:02:25.686 -> Sonde n° 0 Temperature: 22.4 C Humidity: 66.1 %
12:02:34.241 ->
12:02:34.241 -> Sonde n° 1 Temperature: 22.7 C Humidity: 998.0 %
12:02:42.903 ->
12:02:42.903 -> Sonde n° 2 Temperature: 22.8 C Humidity: 998.0 %
12:02:51.512 ->
12:02:51.512 -> Sonde n° 3 Temperature: 23.1 C Humidity: 998.0 %
12:03:00.120 ->
12:03:00.120 -> Sonde n° 4 Temperature: 22.5 C Humidity: 66.4 %
12:03:08.676 ->
12:03:08.676 -> Sonde n° 5 Temperature: 22.5 C Humidity: 44.9 %
12:03:17.188 ->

12:03:27.204 -> Sonde n° 0 Temperature: 22.4 C Humidity: 66.1 %
12:03:35.769 ->
12:03:35.769 -> Sonde n° 1 Temperature: 22.7 C Humidity: 998.0 %
12:03:44.397 ->
12:03:44.397 -> Sonde n° 2 Temperature: 22.8 C Humidity: 998.0 %
12:03:53.020 ->
12:03:53.020 -> Sonde n° 3 Temperature: 23.1 C Humidity: 998.0 %
12:04:01.683 ->
12:04:01.683 -> Sonde n° 4 Temperature: 22.5 C Humidity: 45.0 %
12:04:10.191 ->
12:04:10.191 -> Sonde n° 5 Temperature: 22.5 C Humidity: 44.4 %
12:04:18.748 ->

j'ai donc fait une boucle qui lit la température puis après une autre boucle qui lit l'humidité, et la c'est les 2 (T° et HR) qui sont n'importe quoi !

Pour m'en sortir j'ai donc fait 2 boucles, avec pour la première, la température en premier (je garde l'humidité) et pour la deuxième l'humidité en premier (je garde la température). C'est double travail mais les mesures (T° et HR) sont bonnes.
J'ai regardé du coté des delays et sur la datasheet il est marqué 8s typique d'ou le delay(8500) alors que pour le code final j'ai mis 500ms de delay et ça marche !

Avez vous déjà constater ce problème ? Est-ce du au multiplexeur ? (j'avais testé sans le multiplexeur, une seule sonde de reliée directement sur une NANO et pas de problèmes)
Coté câblage le TCA9548A est sur SCL et SDA du wemos. Et pour l'alimentation 3.3V j'utilise un régulateur branché sur le 5V du wemos: 5v->3.3 pour alimenter le TCA9548A et les 6 sondes. (mesuré à 3.3v au multimètre)

Merci :wink:

voici mon code:

/*!
   @file  DFRobot_SHT20_test.ino
   @brief DFRobot's SHT20 Humidity And Temperature Sensor Module
   @n     This example demonstrates how to read the user registers to display resolution and other settings.
          Uses the SHT20 library to display the current humidity and temperature.
          Open serial monitor at 9600 baud to see readings.
          Errors 998 if not sensor is detected. Error 999 if CRC is bad.
   Hardware Connections:
   -VCC = 3.3V
   -GND = GND
   -SDA = A4 (use inline 330 ohm resistor if your board is 5V)
   -SCL = A5 (use inline 330 ohm resistor if your board is 5V)
*/

#include <Wire.h>
#include "DFRobot_SHT20.h"
#include <TI_TCA9548A.h>
#define TCAADDR 0x70
int   i = 0;

DFRobot_SHT20    sht20;

void tcaselect(uint8_t i) {
  if (i > 7) return;

  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();
}

void setup()
{
  Serial.begin(115200);
  delay(250);
  Serial.println("Init des sondes SHT...");

  //boucle d'initialisation des 6 SHT20
  for (i = 0; i < 6; i++)
  {
    tcaselect(i);
    Serial.print("SHT n° ");
    Serial.println(i);
    sht20.initSHT20();                                  // Init SHT20 Sensor
    delay(200);
    sht20.checkSHT20();                                 // Check SHT20 Sensor
    delay(200);
  }

  Serial.println("Fin d'init");
}

void loop() {

  //boucle de lecture des 6 SHT20 -->> température (humidité ignorée)
  for (i = 0; i < 6; i++)
  {
    tcaselect(i);
    Serial.print("Sonde n° ");
    Serial.print(i);
    delay(500);
    float humd = sht20.readHumidity();                  // Read Humidity
    delay(10);
    float temp = sht20.readTemperature();               // Read Temperature
    Serial.print("  Temperature: ");
    Serial.print(temp, 1);
    Serial.println(" C");

  }
  //boucle de lecture des 6 SHT20 -->> humidité (température  ignorée)
  for (i = 0; i < 6; i++)
  {
    tcaselect(i);
    Serial.print("Sonde n° ");
    Serial.print(i);
    delay(500);
    float temp = sht20.readTemperature();               // Read Temperature
    delay(10);
    float humd = sht20.readHumidity();                  // Read Humidity
    Serial.print(" Humidity: ");
    Serial.print(humd, 1);
    Serial.println(" %");

  }
  Serial.println("");
  delay(10000);
}

Au delà du souci rencontré, je ne comprends pas bien comment vous allez faire votre montage. Vous dites

pour relever la température et l’humidité des chambres et de la SdB dans ma maison,

Comment vous allez faire pour relier un seul Wemos à toutes ces sondes? les chambres et de la SdB sont toutes à moins d’un mètre l’une de l’autre?

sinon vérifiez ce que retourne l’appel aux fonctions et si vous obtenez un ERROR_BAD_CRC

(avez vous vérifié si le capteur fonctionne bien sous 3.3V et qu’il y a assez de courant pour tout alimenter ?)

alors question branchement c'est pas ce qui pose problème car actuellement j'ai les mesures de température et d'humidité qui remontent bien.

16:36:38.659 -> Sonde n° 0 Temperature: 24.8 C
16:36:39.308 -> Sonde n° 1 Temperature: 25.1 C
16:36:39.876 -> Sonde n° 2 Temperature: 25.2 C
16:36:40.461 -> Sonde n° 3 Temperature: 25.4 C
16:36:41.024 -> Sonde n° 4 Temperature: 24.8 C
16:36:41.662 -> Sonde n° 5 Temperature: 24.4 C
16:36:42.309 -> Sonde n° 0 Humidity: 51.1 %
16:36:42.963 -> Sonde n° 1 Humidity: 37.6 %
16:36:43.510 -> Sonde n° 2 Humidity: 37.1 %
16:36:44.111 -> Sonde n° 3 Humidity: 36.5 %
16:36:44.665 -> Sonde n° 4 Humidity: 38.3 %
16:36:45.212 -> Sonde n° 5 Humidity: 37.8 %

Les 6 sondes sont sur un multiplexeur I2C (8 entrées), j'interroge sonde après sonde via la commande

tcaselect(i);

qui switch les entrées du multiplexeur vers le wemos.
Je n'ai pas de message d'erreur, la librairie n'est pas très détaillée !

pour la longueur seule la salle de bain risque d'etre limite la wemos étant dans le couloir au centre des 4 chambres (dans les combles bien sur), je vais faire des tests de longueur de câble maintenant que les valeurs sont correcte (histoire d'avancer step by step)

OK - il y a peut-être une perturbation lors du switch I2C et peut-être il faut envoyer un ordre au composant pour qu'il soit dans le bon état.. je n'ai jamais essayé ce genre de composant