Ligne 3 : |
Ligne 3 : |
| | | |
| == Introduction == | | == Introduction == |
− | A small guide to show the communication via I2C between the Arduino (RPi-ShieldBridge) and Raspberry Pi.
| + | Voici un petit guide montrant comment établir une communication I2C entre RPi-ShieldBridge (Arduino compatible) et Raspberry Pi. |
| | | |
− | The I2C pins of the Raspberry Pi are connected to the AVR and the Arduino Shield connectors (SDA+SCL) on the RPi-ShieldBridge.
| + | Les broches I2C du Raspberry Pi sont connectés sur l'AVR (le microcontroleur) mais aussi sur les broches SDA & SCL des connecteurs Shield Arduino présents sur le RPi-ShieldBridge. |
| | | |
| == En savoir plus sur I2C == | | == En savoir plus sur I2C == |
− | I2C est un bus de communication à la fois simple, puissant (par ses applications) et très répandu. | + | I2C est un bus de communication à la fois simple, puissant (par ses applications) et très répandu. La sphère Arduino dispose d'ailleurs de nombreux périphériques I2C qui peuvent même être directement utilisé avec un Pi. |
| | | |
− | Nous avons produit [[Arduino I2C Intro|un tutoriel assez complet pour Arduino]], c'est là qu'I2C est le plus facile à apprendre. Notre tutoriel couvre aussi bien le Maître et l'Esclave. | + | Nous avons produit [[Arduino I2C Intro|un tutoriel I2C assez complet pour Arduino]], c'est là qu'I2C est le plus facile à apprendre. Notre tutoriel couvre aussi bien le Maître et l'Esclave. |
| | | |
| [[Fichier:tlogo-I2C.jpg]] | | [[Fichier:tlogo-I2C.jpg]] |
| | | |
− | Concernant la communication avancée en I2C entre Raspberry Pi et Arduino, vous pouvez consulter [[ArduPi-I2C|notre tutoriel ArduPi-I2C]]. | + | Concernant la communication avancée en I2C entre Raspberry Pi et Arduino, vous pouvez consulter [[ArduPi-I2C|notre autre tutoriel ArduPi-I2C]]. |
| | | |
| [[Fichier:tlogo-ArduPi-I2C.jpg]] | | [[Fichier:tlogo-ArduPi-I2C.jpg]] |
Ligne 30 : |
Ligne 30 : |
| void setup() | | void setup() |
| { | | { |
− | pinMode(13, OUTPUT); // set pin 13 as output (LED connected) | + | pinMode(13, OUTPUT); // Définir la broche 13 comme sortie (il y a une LED connectée) |
− | digitalWrite(13, LOW); // set pin 13 to low (0V) | + | digitalWrite(13, LOW); // Eteindre la LED sur la broche 13 |
| | | |
− | Wire.begin(ADDRESS); // join I2C bus with respective address | + | Wire.begin(ADDRESS); // joindre le bus I2C avec l'adresse 0x30 |
− | Wire.onReceive(receive); // receive data function | + | Wire.onReceive(receive); // Fonction de réception de donnée (envoyé par le maitre) |
− | Wire.onRequest(request); // send data function | + | Wire.onRequest(request); // Fonction traitant une demande de donnée (demandé par le maitre) |
| } | | } |
| | | |
| void loop() | | void loop() |
| { | | { |
− | // do nothing | + | // Rien à exécuter... |
| } | | } |
| | | |
− | void receive(int numBytes) // function that runs when data is received | + | // Fonction qui est appelée lorsque des données sont |
| + | // recues sur le bus I2C (donnée envoyée par le maître) |
| + | void receive(int numBytes) |
| { | | { |
| unsigned char c; | | unsigned char c; |
Ligne 50 : |
Ligne 52 : |
| { | | { |
| c = Wire.read(); | | c = Wire.read(); |
− | if(c == 0x00) // LED off, if byte equals 0 | + | if(c == 0x00) // Si l'octet/byte recu est 0 -> éteindre la LED |
| { | | { |
| digitalWrite(13, LOW); | | digitalWrite(13, LOW); |
| } | | } |
− | else if(c == 0x01) // LED on, if byte equals 1 | + | else if(c == 0x01) // Si l'octet/byte recu est 1 -> Allumer la LED |
| { | | { |
| digitalWrite(13, HIGH); | | digitalWrite(13, HIGH); |
Ligne 61 : |
Ligne 63 : |
| } | | } |
| | | |
− | void request() // function that runs when data is requested | + | // Fonction qui est exécutée lorsque le maître du bus I2C |
| + | // réclame des données à l'esclave (donc votre RPi-ShieldBridge |
| + | void request() |
| { | | { |
− | Wire.write(0xAA); // send 0xAA | + | Wire.write(0xAA); // renvoyer 0xAA |
| }</nowiki> | | }</nowiki> |
| | | |
| == Préparé votre Pi == | | == Préparé votre Pi == |
| | | |
− | Activate I2C:
| + | Il faut bien entendu activer le bus I2C sur votre Raspberry-Pi. |
| + | |
| + | Si vous ne l'avez pas encore fait, chargez le module I2C et installez les logiciels nécessaires: |
| | | |
| <nowiki>$ sudo modprobe i2c_bcm2708 baudrate=100000 | | <nowiki>$ sudo modprobe i2c_bcm2708 baudrate=100000 |
| $ sudo modprobe i2c-dev</nowiki> | | $ sudo modprobe i2c-dev</nowiki> |
| | | |
− | Install i2c-tools and python-smbus:
| + | Il faut également installer les outils I2C et la gestion smbus pour Python: |
| | | |
| <nowiki>$ sudo apt-get update | | <nowiki>$ sudo apt-get update |
Ligne 79 : |
Ligne 85 : |
| $ sudo apt-get install python-smbus</nowiki> | | $ sudo apt-get install python-smbus</nowiki> |
| | | |
− | Test I2C bus:
| + | Vous pouvez tester le bus I2C avec la commande suivante sur vos Raspberry Pi (rev 2): |
| | | |
| $ sudo i2cdetect -y 1 | | $ sudo i2cdetect -y 1 |
| | | |
− | The Raspberry Pi hardware revision 1 boards connect I2C bus 0 (GPIO 0 + 1) and revision 2 boards connect I2C bus 1 (GPIO 2 + 3) to the GPIO connector.
| + | Le "1" est important et dépend de la révision du votre Pi. Les cartes Raspberry Pi révision 1 utilisent I2C bus 0 (GPIO 0 + 1) tandis que la révision 2 des cartes utilisent I2C bus 1 (GPIO 2 + 3) sur le connecteur GPIO. |
| + | |
| + | |
| + | === La Broche Reset Arduino === |
| + | Par défaut, la broche Reset de l'Arduino compatible (sur le RPi-ShieldBridge) est connecté sur le GPIO18 (broche #12) du Raspberry Pi. |
| | | |
− | Note: As default the reset pin of the Arduino is connected to GPIO18 (Pin 12) of the Raspberry Pi (GPIO18 high = reset on, GPIO18 low = reset off).
| + | * GPIO18 = Etat Haut (high) = Reset Arduino '''activé'''. |
| + | * GPIO18 = Etat bas (low) = Reset Arduino '''désactivé'''. |
| | | |
− | To disable the reset:
| + | Il faut donc initialiser correctement le GPIO18 pour désactiver le Reset Arduino: |
| | | |
| <nowiki>$ sudo -i | | <nowiki>$ sudo -i |
Ligne 95 : |
Ligne 106 : |
| $ exit</nowiki> | | $ exit</nowiki> |
| | | |
− | Or if you have installed WiringPi (voir [[Pi-WiringPi|notre tutoriel WiringPi]]):
| + | Ou vous pouvez utiliser l'utilitaire '''gpio''' si vous avez installé WiringPi (voir [[Pi-WiringPi|notre tutoriel WiringPi]]): |
| | | |
| <nowiki>gpio -g mode 18 out | | <nowiki>gpio -g mode 18 out |
Ligne 104 : |
Ligne 115 : |
| === Commande Shell === | | === Commande Shell === |
| | | |
| + | Commençons par utiliser une commande Shell |
| Switch on LED: | | Switch on LED: |
| | | |