Ligne 2 : |
Ligne 2 : |
| | | |
| == Introduction == | | == Introduction == |
− | Cet exemple est certes rudimentaire mais il met en place tous les éléments nécessaires à la communication I2C structurée entre un Raspberry Pi et un Arduino. | + | {{bloc-etroit|text=Cet exemple est certes rudimentaire mais il met en place tous les éléments nécessaires à la communication I2C structurée entre un Raspberry Pi et un Arduino.}} |
| | | |
| Dans l'exemple suivant: | | Dans l'exemple suivant: |
− | * Raspberry Pi est le MASTER WRITER<br />Pi est donc le maître de la communication envoyant ses instructions. | + | * <strong>Raspberry Pi est le MASTER WRITER</strong><br />Pi est donc le maître de la communication envoyant ses instructions. |
− | * Arduino est le SLAVE LISTENER<br />Il attend donc les instructions envoyée sur le bus I2C. | + | * <strong>Arduino est le SLAVE LISTENER</strong> (esclave qui écoute)<br />Il attend donc les instructions envoyée sur le bus I2C. |
| | | |
− | Dans cet exemple, le programme Arduino se content d'envoyer les informations reçues vers le Moniteur Série... ce qui permet d'espionner le processus de communication I2C. | + | Dans cet exemple: |
| + | * Le programme Raspberry se content d'envoyer des messages simples. |
| + | * le programme Arduino se content de renvoyer les informations reçues vers le Moniteur Série |
| | | |
− | == Arduino ==
| + | Grâce à cet exemple, il devient possible d'espionner le processus de communication I2C entre Arduino et Raspberry Pi.}} |
− | Commençons par le programme Arduino, c'est le plus simple.
| |
| | | |
− | Comme déjà précisé, il reçoit des informations en provenance du Raspberry-Pi sur le bus I2C.
| + | == Montage == |
| + | Nous utilisons ici le [[ArduPi-I2C-Montage|montage général]] décrit dans ce tutoriel. |
| | | |
− | Il se contente simplement de le renvoyer vers le Moniteur Série d'Arduino. Nous pourrons par la suite analyser le contenu de l'information et ainsi parfaire notre connaissance.
| |
− |
| |
− | === Programme SlaveListener ===
| |
− | Voici le contenu du programme Arduino. N'oubliez pas d'ouvrir le moniteur série d'Arduino pour voir ce qui passe sur le bus ;-)
| |
− |
| |
− | <nowiki>// === ArduPi-I2C ================================================
| |
− | // Communication entre Arduino et Raspberry Pi via le BUS I2C
| |
− | // ===============================================================
| |
− | // Tutoriel: http://mchobby.be/wiki/index.php?title=ArduPi-I2C
| |
− | //
| |
− | // Programme Esclave qui Recoit les données données envoyées par Raspberry Pi
| |
− | // S'utilise avec le programme Arduino MasterWriter.py
| |
− | //
| |
− | // Ecrit par D. Meurisse pour MCHobby.be
| |
− | // www.mchobby.be - Vente de kit et composant Arduino et Raspberry Pi
| |
− | // Licence CC-BY-SA
| |
− | //
| |
− | // Basé sur l'exemple de Nicholas Zambetti <http://www.zambetti.com>
| |
− | //
| |
− | #include <Wire.h>
| |
− |
| |
− | void setup()
| |
− | {
| |
− | Wire.begin(4); // Joindre le Bus I2C avec adresse #4
| |
− | Wire.onReceive(receiveEvent); // enregistrer l'événement (lorsqu'une demande arrive)
| |
− | Serial.begin(9600); // Démarrer une communication série
| |
− | }
| |
− |
| |
− | void loop()
| |
− | {
| |
− | delay(100);
| |
− | }
| |
− |
| |
− | // Fonction qui est exécutée lorsque des données sont envoyées par le Maître.
| |
− | // Cette fonction est enregistrée comme une événement ("event" en anglais), voir la fonction setup()
| |
− | void receiveEvent(int howMany)
| |
− | {
| |
− | Serial.println("---- READING ---");
| |
− | Serial.print("Number of Bytes: ");
| |
− | Serial.println( howMany );
| |
− | while(1 < Wire.available()) // Lire tous les octets sauf le dernier
| |
− | {
| |
− | char c = Wire.read(); // lecture de l'octet/byte comme caractère
| |
− | Serial.print(c); // afficher le caractère
| |
− | }
| |
− | int x = Wire.read(); // lecture de l'octet/byte ignoré comme un entier
| |
− | Serial.println(x); // Afficher la valeur numérique
| |
− | }
| |
− | </nowiki>
| |
| {{ArduPi-I2C-TRAILER}} | | {{ArduPi-I2C-TRAILER}} |