Modifications

Sauter à la navigation Sauter à la recherche
Ligne 1 : Ligne 1 :  
{{Arduino-I2C-Intro-NAV}}
 
{{Arduino-I2C-Intro-NAV}}
 +
 +
== Le minimum d'anglais ==
 +
Dans le monde technique il est difficile de se passer de l'anglais. Cette documentation est certes en français mais reconnaître les 4 mots clés suivants sera certainement utile.
 +
 +
* Master = Maître (celui qui tient le fouet et organise son petit monde à sa guise)
 +
* Slave = Esclave (celui qui obéit sans discuter... sinon coup de fouet assuré  ;-) )
 +
* Read/Reader = Lire/Lecture
 +
* Write/Writer = Ecrire/Ecriture
    
== Communiquer en coordination ==
 
== Communiquer en coordination ==
Ligne 20 : Ligne 28 :  
=== Concepts importants ===
 
=== Concepts importants ===
 
Pour réguler le dialogue, il faut comprendre quelques concepts simples.
 
Pour réguler le dialogue, il faut comprendre quelques concepts simples.
Les assimiler vous permettra d'assimiler plus facilement les tenants et les aboutissants du bus I2C.  
+
Les assimiler vous permettra de comprendre plus facilement les tenants et les aboutissants du bus I2C.
   −
Ces concepts sont :
+
S'il y a plusieurs informations de premiers plans, les concepts suivants restent certainement les plus importants:  
 
* Le concept de "maître et esclave"
 
* Le concept de "maître et esclave"
 +
* Le principe d'adressage (adresse unique pour chaque esclave).
 
* Le concept de régulation de communication comme "Master Reader" et "Master Writer"
 
* Le concept de régulation de communication comme "Master Reader" et "Master Writer"
   Ligne 43 : Ligne 52 :  
''Exemple à titre indicatif issus de notre tutoriel sur [[ADF-LED-BACKPACK|les contrôleurs LEDs]]''   
 
''Exemple à titre indicatif issus de notre tutoriel sur [[ADF-LED-BACKPACK|les contrôleurs LEDs]]''   
   −
=== L'adressage ===
+
== L'adressage ==
 
L'adressage sert à identifier chacun des des éléments sur un bus I2C. Lorsque vous branchez un composant, il dispose généralement d'une adresse. Cette adresse est une valeur numérique qui identifie le composant sur le bus.
 
L'adressage sert à identifier chacun des des éléments sur un bus I2C. Lorsque vous branchez un composant, il dispose généralement d'une adresse. Cette adresse est une valeur numérique qui identifie le composant sur le bus.
   −
Sur un bus I2C, le maître envoi un ordre du genre: "Hep, Numéro 3, lecture de température!" et le numéro 3 (qui serait un senseur de température) répond docilement en renvoyant la température mesurée.
+
Sur un bus I2C, le maître envoi un ordre du genre: "Hep, Numéro 3, lecture de 6 octets!" (''pour lire la température'') et le numéro 3 (qui serait un senseur de température) répond docilement en renvoyant la température mesurée.
    
Il va de soit qu'il ne faut qu'un seul "numéro 3" qui répondent en même temps sur le bus. C'est pour cela que cette adresse est importante et qu'elle doit aussi être unique sur le bus.
 
Il va de soit qu'il ne faut qu'un seul "numéro 3" qui répondent en même temps sur le bus. C'est pour cela que cette adresse est importante et qu'elle doit aussi être unique sur le bus.
   −
Les composants disposent d'une adresse prédéfinie qu'il est généralement possible de la modifier sensiblement en soudant des "jumpers".
+
=== L'adressage Logiciel ===
 +
C'est le cas le plus simple, celui d'un module programmable comme Arduino, Rapsberry Pi, MBed, etc.
 +
 
 +
En effet, un Arduino se programme et s'il est raccordé sur un bus en tant qu'esclave alors il peut choisir n'importe quelle adresse valide.
 +
 
 +
Cette adresse est "encodée" dans le programme.
 +
 
 +
=== L'adressage Matériel ===
 +
Pour les composants pré-assemblés (comme les senseurs I2C) ne sont pas "programmable" comme un Arduino.
 +
 
 +
Les composants disposent donc d'une adresse prédéfinie qu'il est généralement possible de la modifier sensiblement en soudant/pontant des "jumpers".
    
[[Fichier:ADF-LED-BACKPACK-ARD-01.jpg|300px]]<br />  
 
[[Fichier:ADF-LED-BACKPACK-ARD-01.jpg|300px]]<br />  
Ligne 57 : Ligne 76 :  
Notre tutoriel sur [[ADF-LED-BACKPACK|les contrôleurs LEDs]] explique aussi [[ADF-LED-BACKPACK-I2C-Adresse|comment calculer la nouvelle adresse]]. Vous pourrez consulter ce point plus tard lorsque vous serez familiarisé avec les concepts et premier montages I2C d'Arduino
 
Notre tutoriel sur [[ADF-LED-BACKPACK|les contrôleurs LEDs]] explique aussi [[ADF-LED-BACKPACK-I2C-Adresse|comment calculer la nouvelle adresse]]. Vous pourrez consulter ce point plus tard lorsque vous serez familiarisé avec les concepts et premier montages I2C d'Arduino
   −
=== Une seul esclave à la fois? ===
+
== Communiquer... avec un seul esclave à la fois? ==
 
En général, le maître s'adresse à un esclave en particulier. C'est le cas le plus courant et le plus usité sur Arduino.
 
En général, le maître s'adresse à un esclave en particulier. C'est le cas le plus courant et le plus usité sur Arduino.
    
Il n'empêche qu'un maître peut s'adresser à plusieurs esclaves en une seule opération (voir le concept "Master Writer" ci-dessous). Ce cas d'utilisation est plus rare.
 
Il n'empêche qu'un maître peut s'adresser à plusieurs esclaves en une seule opération (voir le concept "Master Writer" ci-dessous). Ce cas d'utilisation est plus rare.
    +
== Faire communiquer ==
 
=== Arduino et réseaux de senseurs ===
 
=== Arduino et réseaux de senseurs ===
 
Il est possible de connecter un Arduino et plusieurs senseurs sur un réseau I2C.  
 
Il est possible de connecter un Arduino et plusieurs senseurs sur un réseau I2C.  
   −
Arduino sera le Maître et les senseurs seront les Esclaves. Lorsque l'on s'adresse à un réseau de senseur, il faut utiliser le concept "Master Reader" décrit ci-dessous).
+
Arduino sera le Maître et les senseurs seront les Esclaves.  
   −
=== Des Arduinos ensembles ===
+
Lorsque l'on s'adresse à un réseau de senseur, ont utilise généralement le concept "Master Reader" (décrit ci-dessous) car on sait quel senseur est l'adresse du senseur et quel est la longueur de la réponse que l'on obtiendra.
 +
 
 +
Certains senseurs dit "intelligents" ou "évolués" nécessitent plusieurs opérations avant d'obtenir la réponse attendue... dans ce cas, un concept plus évolué comme celui du "registre" est utilise.
 +
 
 +
=== Des Arduino ensembles ===
 
Il est bien entendu possible de connecter plusieurs Arduino sur un seul bus I2C (chacun disposant d'une adresse I2C unique).
 
Il est bien entendu possible de connecter plusieurs Arduino sur un seul bus I2C (chacun disposant d'une adresse I2C unique).
   Ligne 79 : Ligne 103 :     
Dans ce concept, le Maître s'adresse a un esclave de son choix et envoi une commande/demande de lecture à l'esclave à laquelle il attends une réponse!
 
Dans ce concept, le Maître s'adresse a un esclave de son choix et envoi une commande/demande de lecture à l'esclave à laquelle il attends une réponse!
 +
 +
[[Fichier:Arduino-I2C-Intro-MasterReader.jpg|640px]]
    
Ce concept est pratique pour collecter les informations de différents senseurs.  
 
Ce concept est pratique pour collecter les informations de différents senseurs.  
    
Pour être précis, le nom complet de ce concept est "Master Reader/Slave Sender" (le maître lit et les esclaves envoient/parlent).
 
Pour être précis, le nom complet de ce concept est "Master Reader/Slave Sender" (le maître lit et les esclaves envoient/parlent).
 +
 +
{{ambox | text = L'acquisition de donnée (lecture) se présente sous la forme '''d'une demande de lecture en précisant la taille de la réponse'''. Le maître doit donc savoir quel est la taille de la réponse attendue... ce qui est prévisible puisqu'il sait quel est le type de senseur à l'adresse #3 et que par conséquent il sait aussi quelle réponse il obtiendra! (''voir "protocole" ci-dessous'')}}
    
== Le concept "Master Writer" ==
 
== Le concept "Master Writer" ==
   −
Le "maître écrit". Ce concept est '''moins utilisé''' mais convient bien à des applications spécifiques.
+
Le "maître écrit". Ce concept est '''moins utilisé tel quel''' mais convient bien à des applications spécifiques.
    
Dans ce concept, le maître écrit/envoi des informations vers de multiples esclaves. Ce concept est bien pratique pour commander différents actionneurs ou répartir des ordres vers les différents éléments physiques (comme, par exemple, les servos moteurs I2C d'un robots).
 
Dans ce concept, le maître écrit/envoi des informations vers de multiples esclaves. Ce concept est bien pratique pour commander différents actionneurs ou répartir des ordres vers les différents éléments physiques (comme, par exemple, les servos moteurs I2C d'un robots).
 +
 +
[[Fichier:Arduino-I2C-Intro-MasterWriter.jpg|640px]]
    
Bien entendu, dans ce cas de figure, le Maitre n'attend pas réponse de la part des esclaves.
 
Bien entendu, dans ce cas de figure, le Maitre n'attend pas réponse de la part des esclaves.
Ligne 95 : Ligne 125 :     
Pour être précis, le nom complet de ce concept est "Master Writer/Slave Receiver".
 
Pour être précis, le nom complet de ce concept est "Master Writer/Slave Receiver".
 +
 +
La mise en place d'un protocole d'échange évolué nécessite parfois le passage en alternance entre les modes "Master Writer" et "Master Reader" (voir le concept de registre).
    
== Le protocole ==
 
== Le protocole ==
Ligne 103 : Ligne 135 :  
Cela se présentait sous la forme:  
 
Cela se présentait sous la forme:  
   −
  ''le maître envoi un ordre du genre: "Hep, Numéro 3, lecture de température!" et le numéro 3 répond docilement en renvoyant la température mesurée.''
+
  Le maître envoi un ordre du genre: "Hep, Numéro 3, lecture de 6 octets!" (''pour lire la température'')<br />et l'esclave numéro 3 répond docilement en renvoyant la température mesurée.
    
Il va de soit que "''lecture de température!''" n'est pas le message envoyé tel quel sur le bus I2C et que l'esclave ne répond pas "17.5°C" sous cette forme.
 
Il va de soit que "''lecture de température!''" n'est pas le message envoyé tel quel sur le bus I2C et que l'esclave ne répond pas "17.5°C" sous cette forme.
   −
Les messages et informations sont encodées en binaire (des 1 et des 0 ) envoyés sur le BUS dans un ordre précis afin qu'ils puissent être interprétés correctement par le senseur adressé. Chacun de ces 1 et 0 ayant un signification précise. C'est le protocole d'échange d'information qui est généralement détaillé dans la fiche technique du composant/senseur.
+
Le Maître sait qu'il s'adresse à un senseur de température de type XYZ et que ce dernier renverra l'information dans 6 octets.
 +
 
 +
La requête et informations de réponse sont encodées en binaire (des 1 et des 0 ) envoyés sur le BUS dans un ordre précis afin qu'ils puissent être interprétés correctement par le senseur adressé. Chacun de ces 1 et 0 ayant un signification précise. C'est le protocole d'échange d'information qui est généralement détaillé dans la fiche technique du composant/senseur.
    
'''La bonne nouvelle, c'est qu'il existe des librairies pour Arduino''' permettant de faire abstraction de cette complexité en permettant de faire des appels de fonctions de haut niveau similaire à:
 
'''La bonne nouvelle, c'est qu'il existe des librairies pour Arduino''' permettant de faire abstraction de cette complexité en permettant de faire des appels de fonctions de haut niveau similaire à:
Ligne 113 : Ligne 147 :  
   Temp_En_Degres = MonSenseurTemp.readTemperature();
 
   Temp_En_Degres = MonSenseurTemp.readTemperature();
   −
Les breakout et senseurs I2C proposés par AdaFruit disposent généralement (''toujours'') de librairie Arduino... mais aussi Raspberry Pi.  
+
Les breakout et senseurs I2C proposés par AdaFruit disposent généralement (''toujours'') de librairie Arduino... ainsi que pour Raspberry Pi.  
    
{{Arduino-I2C-Intro-TRAILER}}
 
{{Arduino-I2C-Intro-TRAILER}}
29 917

modifications

Menu de navigation