Modifications

Sauter à la navigation Sauter à la recherche
4 983 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 ==
 +
Voici un petit guide montrant comment établir une communication I2C entre RPi-ShieldBridge (Arduino compatible) et Raspberry Pi.
 +
 
 +
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 ==
 +
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.
 +
 
 +
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>
 +
 
 +
#define ADDRESS 0x30
 +
 
 +
void setup()
 +
{
 +
  pinMode(13, OUTPUT);    // Définir la broche 13 comme sortie (il y a une LED connectée)
 +
  digitalWrite(13, LOW);  // Eteindre la LED sur la broche 13
 +
 
 +
  Wire.begin(ADDRESS);    // joindre le bus I2C avec l'adresse 0x30
 +
  Wire.onReceive(receive); // Fonction de réception de donnée (envoyé par le maitre)
 +
  Wire.onRequest(request); // Fonction traitant une demande de donnée (demandé par le maitre)
 +
}
 +
 
 +
void loop()
 +
{
 +
  // Rien à exécuter...
 +
}
 +
 
 +
// 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;
 +
 
 +
  while(Wire.available())
 +
  {
 +
    c = Wire.read();
 +
    if(c == 0x00)      // Si l'octet/byte recu est 0 -> éteindre la LED
 +
    {
 +
      digitalWrite(13, LOW);
 +
    }
 +
    else if(c == 0x01) // Si l'octet/byte recu est 1 -> Allumer la LED
 +
    {
 +
      digitalWrite(13, HIGH);
 +
    }
 +
  }
 +
}
 +
 
 +
// 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); // renvoyer 0xAA
 +
}</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