Plusieurs capteurs I2C sur le même arduino ?

Bonjour,
je cherche à savoir si l’on peut utiliser par exemple sur un pro mini plusieurs ( 4) modules I2C genre un D6T d’Omron ?
Et faire une lecture en boucle tous les 100ms ?
Philippe.

Bonjour

Tu devrais potasser un peu l'I2C

Les modules I2C se branchent tous sur les mêmes pin SDA et SCL. Ils ont chacun une adresse qui les identifie. Il ne peut y avoir deux modules avec la même adresse sur le bus I2C.

On peut brancher plusieurs modules identiques sur le même bus, à conditions que ceux-ci offrent la possibilité de modifier leur adresse, pour les différencier.

C'est par exemple le cas du très classique composant PCF8574, qui a trois broches que l'on met à GND ou 5V, et qui correspondent à certains bits de l'adresse.

Mais cela n'a pas l'air d'être le cas des modules que tu indiques.

Pour ce capteur j’ai bien peur que non.

Il faudrait la vraie datasheet, celle que l'on peut télécharger n'est qu'une notice commerciale.

bricoleau: On peut brancher plusieurs modules identiques sur le même bus, à conditions que ceux-ci offrent la possibilité de modifier leur adresse, pour les différencier.

Mais cela n'a pas l'air d'être le cas des modules que tu indiques.

dans ce cas il existe des commutateurs I2C 4 ou 8 voies commandés par 2 ou 3 sorties digitales il suffit de gerer la commutation dans le code

Bonjour,

un peu plus détaillée que leur "datasheet" :

https://www.omron.com/ecb/products/sensor/special/mems/pdf/AN-D6T-01EN_r2.pdf

page 8, OMRON conseille un switch I2C

Pierre

Oui c'est sûr que des solutions existent, mais pour un débutant ce n'est pas forcément simple à mettre en œuvre.

Dans le même ordre d'idée, j'avais lu des trucs sur de l'I2C software, pour monter un bus I2C sur n'importe quelle pin d'un arduino. Même principe que SerialSoftware. Il n'y aurait alors plus besoin d'ajouter un switch I2C.

Cela dit, ce capteur coûte environ 50€. A ce prix là, le prix (donc le nombre) d'arduino mini devient secondaire.

Personnellement, je regarderais la solution dans son ensemble (structure du réseau de capteurs, modèle de communication, usage, ...) et je n'hésiterais pas à multiplier les arduino mini pour rendre chaque capteur plus autonome et mieux communiquant, par exemple en le dotant d'une liaison radio ou ethernet filaire ou wifi. C'est plus facile à intégrer, et une panne locale n'affecte pas le système dans sa globalité. Et on remplace plus facilement ce qui tombe en panne.

j'avais lu des trucs sur de l'I2C software, pour monter un bus I2C sur n'importe quelle pin d'un arduino.

Coté logiciel tout est possible.

Mais coté matériel on fait comment pour passer une sortie en open drain sur un Atmel avr? A4 et A5 sont spéciales et prévues pour cet usage mais les autres sorties ?

Remarque sur le coût d'un capteur : Tu as tout à fait raison la meilleure solution est de créer un nouveau module (mini-pro + capteur). Il est possible de configurer un Atmega 348p en esclave I2C (avec sa propre adresse) mais je ne sais pas s'il peut être esclave pour le micro central et maître pour le capteur. Pour dialoguer avec le micro central il reste le SPI en esclave.

Bonjour Messieurs merci encore à toutes ces aides, ce temps pour mes questions. Pour mon idée, j'ai besoin de mapper une surface au sol avec des thermopiles, je n'ai pas besoin de matrice quasi carré genre 32*31 ou 16*16, mais plutôt en ligne des 16*4 ou 8*1, d'où l'idée d'en mettre plusieurs. Ma question sur la possibilité de mettre plusieurs capteurs I2C sur le même microcontrolleur, c'est à cause des calculs et de la base temps qui doit être "exactement" la même, je veux dire à environ 10ms près; je ne sais pas synchroniser plusieurs microcontrolleur/RTc avec cette précision. Ce que je comprends dans vos réponses: c'est qu'il y a des switch I2C ce qui me permettraient d'aller dans mon sens, mais pas de manière soft. Philippe.

Pour le soft ça reste à creuser.

Au risque de dire une grosse bêtise, si je mets une io numérique de l'arduino en INPUT, n'est-ce pas l'équivalent d'un drain ouvert ?

Deux résistances de pullup externes sur des lignes pseudoSDA et pseudoSCL

Et en repassant brièvement en mode OUPUT, tirer la tension à GND.

Il me semble qu'on a tout ce qu'il faut pour créer un bus I2C sur n'importe quelle pin de l'arduino. Me trompe-je?

Bonsoir,

ce capteur coûte environ 50€. A ce prix là, le prix (donc le nombre) d'arduino mini devient secondaire

+1 la liaison filaire pourrait aussi être du rs232/485, spi, ou ... un autre i2c !

Au risque de dire une grosse bêtise, si je mets une io numérique de l'arduino en INPUT, n'est-ce pas l'équivalent d'un drain ouvert ?

ce n'est pas une grosse bêtise : on laisse la sortie à 0 et on joue sur INPUT et OUTPUT

page 17 il est fait état d'une particularité qui pourrait faire préférer un I2C manuel sur 2 IO au lieu de l'I2C "officiel" et ses librairies

bricoleau: Il me semble qu'on a tout ce qu'il faut pour créer un bus I2C sur n'importe quelle pin de l'arduino. Me trompe-je?

Pas besoin, cela est déjà fait il suffit de regarder un peut sur Google pour trouver les librairies.

A la page 8 du pdf posté par petrusfr il y à :

Case 5: Using I2C bus switch IC. Ex. PCA9545(4ch) , PCA9548(8ch) (multiple D6T sensors)

Il me semble que la solution est là...