Modifications

Sauter à la navigation Sauter à la recherche
3 805 octets ajoutés ,  25 janvier 2014 à 16:29
aucun résumé de modification
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.
   −
== Préparer ==
+
== En savoir plus sur I2C ==
 +
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 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]]
 +
 
 +
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]]
 +
 
 +
== Préparer votre Arduino / RPi-ShieldBridge ==
    
Téléversez le sketch/croquis suivant sur votre RPi-ShieldBridge.
 
Téléversez le sketch/croquis suivant sur votre RPi-ShieldBridge.
 +
 +
Vous pouvez vous référer au point relatif à firmata si vous ne savez pas comment programmer et téléverser le programme suivant sur votre RPi-ShieldBridge.
    
  <nowiki>#include <Wire.h>  
 
  <nowiki>#include <Wire.h>  
Ligne 17 : 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 37 : 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 48 : 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 ==
 +
 +
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
 +
$ sudo modprobe i2c-dev</nowiki>
 +
 +
Il faut également installer les outils I2C et la gestion smbus pour Python:
 +
 +
<nowiki>$ sudo apt-get update
 +
$ sudo apt-get install i2c-tools
 +
$ sudo apt-get install python-smbus</nowiki>
 +
 +
Vous pouvez tester le bus I2C avec la commande suivante sur vos Raspberry Pi (rev 2):
 +
 +
$ sudo i2cdetect -y 1
 +
 +
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.
 +
 +
* GPIO18 = Etat Haut (high) = Reset Arduino '''activé'''.
 +
* GPIO18 = Etat bas (low) = Reset Arduino '''désactivé'''.
 +
 +
Il faut donc initialiser correctement le GPIO18 pour désactiver le Reset Arduino:
 +
 +
<nowiki>$ sudo -i
 +
$ echo 18 > /sys/class/gpio/export
 +
$ echo out > /sys/class/gpio/gpio18/direction
 +
$ echo 0 > /sys/class/gpio/gpio18/value
 +
$ exit</nowiki>
 +
 +
Ou vous pouvez utiliser l'utilitaire '''gpio''' si vous avez installé WiringPi (voir [[Pi-WiringPi|notre tutoriel WiringPi]]):
 +
 +
<nowiki>gpio -g mode 18 out
 +
gpio -g write 18 1</nowiki>
 +
 +
== Tester ==
 +
 +
=== Commande Shell ===
 +
 +
Commençons par utiliser une commande Shell
 +
Switch on LED:
 +
 +
$ sudo i2cset -y 1 0x30 0x01
 +
 +
Switch off LED:
 +
 +
$ sudo i2cset -y 1 0x30 0x00
 +
 +
=== Python ===
 +
Créons un script de test nommé i2ctest.py:
 +
 +
$ nano i2ctest.py
 +
 +
Et copiez y le code suivant:
 +
 +
<nowiki>#!/usr/bin/env python
 +
# -*- coding: latin-1 -*-
 +
 +
import time
 +
import smbus
 +
bus = smbus.SMBus(1)
 +
addr = 0x30  # Adresse de périphérique I2C
 +
 +
while True:
 +
    # Ecrire le byte/octet 0x01 sur le périphérique I2C 0x30
 +
    # (donc le RPi-ShieldBrigde)
 +
    bus.write_byte(addr, 0x01)
 +
    # Message pour indiquer que la Led est allumée sur le Rpi-ShieldBridge
 +
    print "on"
 +
   
 +
    # Attendre une seconde
 +
    time.sleep(1)
 +
   
 +
    # Ecrire le byte/octet 0x00 sur le périphérique I2C 0x30
 +
    # (donc le TRi-ShieldBrigde)
 +
    bus.write_byte(addr, 0x00)
 +
 +
    # Message pour indiquer que la Led est éteinte sur le Rpi-ShieldBridge
 +
    print "off"
 +
 +
    time.sleep(1)</nowiki>
 +
 +
 +
Exécuter le script Python:
 +
 +
  $ sudo python i2ctest.py
 +
 
{{RPI-ShieldBridge-TRAILER}}
 
{{RPI-ShieldBridge-TRAILER}}
29 918

modifications

Menu de navigation