Ligne 1 : |
Ligne 1 : |
| {{RPI-ShieldBridge-NAV}} | | {{RPI-ShieldBridge-NAV}} |
− | {{traduction}}
| |
| | | |
| == 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 autre tutoriel ArduPi-I2C]]. |
− | Concernant la communication avancée en I2C entre Raspberry Pi et Arduino, vous pouvez consulter [[ArduPi-I2C|notre tutoriel ArduPi-I2C]]. | |
| | | |
| [[Fichier:tlogo-ArduPi-I2C.jpg]] | | [[Fichier:tlogo-ArduPi-I2C.jpg]] |
Ligne 31 : |
Ligne 29 : |
| 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 51 : |
Ligne 51 : |
| { | | { |
| 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 62 : |
Ligne 62 : |
| } | | } |
| | | |
− | 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 80 : |
Ligne 84 : |
| $ 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 96 : |
Ligne 105 : |
| $ 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 105 : |
Ligne 114 : |
| === Commande Shell === | | === Commande Shell === |
| | | |
| + | Commençons par utiliser une commande Shell |
| Switch on LED: | | Switch on LED: |
| | | |
Ligne 114 : |
Ligne 124 : |
| | | |
| === Python === | | === Python === |
− | Create a test script named i2ctest.py:
| + | Créons un script de test nommé i2ctest.py: |
| | | |
| $ nano i2ctest.py | | $ nano i2ctest.py |
Ligne 126 : |
Ligne 136 : |
| import smbus | | import smbus |
| bus = smbus.SMBus(1) | | bus = smbus.SMBus(1) |
− | addr = 0x30 | + | addr = 0x30 # Adresse de périphérique I2C |
| | | |
| while True: | | while True: |
| + | # Ecrire le byte/octet 0x01 sur le périphérique I2C 0x30 |
| + | # (donc le RPi-ShieldBrigde) |
| bus.write_byte(addr, 0x01) | | bus.write_byte(addr, 0x01) |
| + | # Message pour indiquer que la Led est allumée sur le Rpi-ShieldBridge |
| print "on" | | print "on" |
| + | |
| + | # Attendre une seconde |
| time.sleep(1) | | time.sleep(1) |
| + | |
| + | # Ecrire le byte/octet 0x00 sur le périphérique I2C 0x30 |
| + | # (donc le TRi-ShieldBrigde) |
| bus.write_byte(addr, 0x00) | | bus.write_byte(addr, 0x00) |
| + | |
| + | # Message pour indiquer que la Led est éteinte sur le Rpi-ShieldBridge |
| print "off" | | print "off" |
| + | |
| time.sleep(1)</nowiki> | | time.sleep(1)</nowiki> |
| | | |
| | | |
− | Run the script:
| + | Exécuter le script Python: |
| | | |
| $ sudo python i2ctest.py | | $ sudo python i2ctest.py |
| | | |
| {{RPI-ShieldBridge-TRAILER}} | | {{RPI-ShieldBridge-TRAILER}} |