Bonjour,
J'essaye en vain de faire communiquer un arduino UNO R3 avec une sonde de mesure de température et humidité de vendue par DFRobot, le modèle SEN0546. C'est une sonde qui communique avec le protocole I2C. J'ai utilisé le code Arduino mis à disposition sur leur site (ici) (D'ailleurs il contenait deux erreurs à la compilation, assez étonnant...), mais j'obtiens dans la console toujours la même chose : temp(C):-40.00 hum(%RH):0.00
En étudiant le code, j'ai vu que Wire.endTransmission() (ligne 38) renvoi un code erreur différent de 0.
En l'occurrence il prend les valeurs :
2 (received NACK on transmit of address. - selon la doc de Wire), si je met une résistance (4.6 kOhm) entre le fil SDA (jaune) de la sonde et le port SDA (A4 ou SDA) de l'Arduino.
3 (received NACK on transmit of data.), si je relis le fil jaune (SDA) directement à l'Arduino.
J'ai testé avec cette résistance car il est question d'une résistance pull-up dans la datasheet de la sonde, mais j'ai peut-être mal compris ce passage...
Je suis débutant Arduino donc il y a surement quelque chose qui m'échappe. J'espère vous avoir donné toutes les infos pour pouvoir comprendre le problème et m'aider à trouver une solution.
PS : Dernier point, en terme de branchement, j'ai relié : - Le fil Rouge au 5V côté Arduino - Le fil Noir au GND - Le fil Jaune (SDA) à l'entrée A4 (avec ou sans résistance 4.6 kOhm) - Le fil Blanc (SCL) à l'entrée A5
Un outil indispensable, dans ton cas, le scanner i2C, qui te permettra de voir l'adresse i2C de ta sonde, s'il n'indique rien, c'est qu'il y a un problème sur ton bus i2C, alors essaies de croiser SDA et SCL.
Bonjour Jpbbricole.
Merci pour ton schéma. J'ai testé mais cela n'a pas aidé non plus.
Cependant j'ai enfin trouvé la solution ! En réalité il s'agissait d'une erreur dans le code exemple du revendeur.
Au moment de l'instruction "Wire.write", il fallait écrire dans le registre passait en paramètre de la fonction.
Je met ci-dessous le code qui fonctionne pour lire la sonde. Si vous voulez voir où se situait le problème par rapport à l'exemple du site du revendeur, il faut regarder à la ligne 37 (l'une des deux lignes qui justement comportait une erreur de compilation que j'évoquais rapidement dans mon post d'origine) où il faut écrire : Wire.write(reg);
au lieu de Wire.write(®, 1);
Voici le code complet avec les erreurs corrigées (l'autre concernait un typage a corriger dans l'appel à requestFrom l. 42) :