ArduPi-I2C-Simple-CodeArduino
Arduino
Commençons par le programme Arduino, c'est le plus simple.
Comme déjà précisé, c'est un Slave Listener (esclave qui écoute). Il reçoit des informations en provenance du Raspberry-Pi sur le bus I2C.
Il se contente simplement de les 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 qui fonctionne comme suit:
Le programme fonctionne comme suit:
- Il reçoit un avis de transmission
- Il affiche le nombre d'octects/bytes reçu
- Affiche tous les Octets/Bytes sauf le dernier comme des caractères (sur le moniteur série)
- Affiche la valeur numérique du dernier Octet/Bytes (sur le moniteur série)
N'oubliez pas d'ouvrir le moniteur série d'Arduino pour voir ce qui passe sur le bus ;-)
// === 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 }
Compiler et Charger
Compiler le programme et charger le sur votre Arduino.
Tester l'esclave
Le programme esclave utilise l'adresse #4 (0x04) sur le Bus I2C.
Il est assez simple de vérifier la présence de l'esclave sur le bus I2C depuis le Raspberry Pi.
En effet, il existe le programme i2cdetect qui permet de détecter la présence d'un périphérique I2C sur le bus.
Démarrez une session terminal sur votre Raspberry Pi et taper la commande suivante (pour un Raspberry Version 2)
sudo i2cdetect 1
Si votre Arduino est correctement raccordé et le programme en cours de fonctionnement, vous verrez le résultat suivant:
WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- 04 -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Notez l'adresse 04 active qui correspond justement à notre Arduino :-)
Ecrit par Meurisse D. pour mchobby.be
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.