Modifications

Sauter à la navigation Sauter à la recherche
6 467 octets ajoutés ,  7 avril 2013 à 10:40
Ligne 1 : Ligne 1 :  
{{ArduPi-I2C-NAV}}
 
{{ArduPi-I2C-NAV}}
   −
== x ==
+
== Raspberry ==
 +
{{bloc-etroit|text=Nous voici donc du côté de notre Raspberry-Pi.
 +
 
 +
Le programme Raspberry est un '''Master Writer''', cela signifie que c'est lui qui prend les commandes du bus I2C et qui envoi les ordres/instructions vers les différents esclaves (dont notre Arduino tout fraîchement programmé en Slave Listener).}}
    
== Pre-requis ==
 
== Pre-requis ==
 +
{{bloc-etroit|text=Notre programme python s'appuie sur la librairie I2C écrite par [http://www.adafruit.com Adafruit Industries] pour ses différents produits.
 +
 +
Il est donc nécessaire d'installer le code source d'AdaFruit sur votre Raspberry Pi en utilisant les instructions disponibles dans notre autre tutoriel sur le GPIO.}}
 +
 +
[[Rasp-Hack-GPIO AdaFruit PiCode|Vous trouverez les instructions nécessaires ici]] (issu du tutoriel sur le GPIO du Raspberry Pi).
 +
 +
Si les codes "Adafruit PiCode" sont correctement installés, l'instruction suivante:
 +
 +
<nowiki>ls ~/Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/</nowiki>
 +
 +
doit afficher une liste de fichiers où vous devez trouver '''Adafruit_I2C.py'''
 +
 +
=== Préparation pour MasterWriter.py ===
 +
Le programme MasterWriter.py va importer le Adafruit_I2C.py, il est donc capital que ce fichier soit accessible depuis MasterWriter.py.
 +
 +
Il y a deux solutions possibles:
 +
# copier Adafruit_I2C.py dans le même répertoire que le programme MasterWriter.py (que nous allons créer).
 +
# créer un lien symbolique vers Adafruit_I2C.py depuis le répertoire où sera stocké notre programme  MasterWriter.py . 
 +
 +
La deuxième option est de loin la plus propre et évitera la prolifération des version de Adafruit_I2C sur votre Pi.
 +
 +
Le commandes suivantes permettent créer le répertoire de stockage pour MasterWriter.py , voici la marche à suivre:
 +
 +
<nowiki>cd ~
 +
mkdir ArdPi-I2C
 +
cd ArdPi-I2C
 +
mkdir Pi
 +
cd Pi
 +
mkdir MasterWriter
 +
cd MasterWriter</nowiki>
 +
 +
Voila, maintenant nous allons créer un lien symbolique vers la source Adafruit_I2C que vous avez déjà installé sur votre pi
 +
 +
<nowiki>cd ~/ArdPi-I2C/Pi/MasterWriter
 +
ln -s ../../../Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/Adafruit_I2C.py </nowiki>
 +
 +
Ne reste plus qu'à créer notre programme MasterWriter.py à l'aide de la commande:
 +
 +
<nowiki>cd ~/ArdPi-I2C/Pi/MasterWriter
 +
nano MasterWriter.py</nowiki>
 +
 +
Vous pouvez alors taper le code du programme (voir ci-dessous).
 +
 +
Vous pouvez également utiliser la [[PI-Easy-Copy-Paste|méthode Pi-Copier/Pi-Coller]] pour copier/coller facilement le code dans '''MasterWriter.py'''
 +
 +
=== MasterWriter.py prêt? ===
 +
Voila, si tout est correctement préparé, la commande commande ls suivante:
 +
<nowiki>ls ~/ArdPi-I2C/Pi/MasterWriter</nowiki>
 +
 +
Affiche la liste des fichiers où les éléments suivants doivent être visible:
 +
<nowiki>Adafruit_I2C.py MasterWriter.py</nowiki>
 +
 +
== Programme MasterWriter.py ==
 +
 +
=== Support de l'adressage par registre ===
 +
 +
Pour commencer, la librairie AdaFruit_I2C supporte le mode d'adressage par Registre (voir [[Arduino I2C Intro|notre tutoriel d'intro à I2C]]).
 +
 +
Si cela n'est pas utilise dans le cadre du présent exemple, cette fonctionnalité se montrera très pertinente dans de nombreuses implémentations.
 +
 +
Le numéro de registre consiste en un byte/octet qui est envoyé en début de transmission I2C vers l'esclave.
 +
 +
Plutôt que d'essayer de se battre pour éliminer cet octet gênant, nous allons simplement envoyer une valeur de registre quelconque que nous allons ignorer dans notre programme Arduino SlaveListener!
 +
 +
=== Fonctionnement en quelques mots ===
 +
Le programme MasterWriter.py établit une connexion avec l'esclave 0x04 (donc notre Arduino programmé avec SlaveListerner) et envoi une série de message.
 +
 +
Le programme MasterWriter.py effectue les opérations d'envoi dans l'ordre suivant:
 +
* write8( 0, 0x40 )<br />Envoi d'un seul octet (valeur 0x40 en hexa, 64 en décimal, correspond au caractère "@" en ascii) sur le registre 0.
 +
* writeList( 0x35, [ord('a'),ord('b'),ord('c'),110] )<br />envoi une série d'octet correspond respectivement au code ascii de abc pour finallement envoyer la valeur numérique 110. Le tout est envoyé dans le registre 0x35 (valeur 0x35 en hexa, 53 en decimal, correspond au caractère "5" en ascii)
 +
* Finalement, l'envoi de 3 messages distincts sur le registre 0x35 contenant les code ascii des caractères "valeur=" suivit d'une valeur numérique de 0 à 2.
 +
 +
=== Le programme ===
 +
 +
<nowiki>#!/usr/bin/env python
 +
# -*- coding: latin-1 -*-
 +
 +
# === ArduPi-I2C ================================================
 +
# Communication entre Arduino et Raspberry Pi via le BUS I2C
 +
# ===============================================================
 +
# Tutoriel: http://mchobby.be/wiki/index.php?title=ArduPi-I2C
 +
 +
# Programme Master qui envoi des données données vers un Arduino
 +
# S'utilise avec le programme Arduino SlaveListerner.ino
 +
#
 +
# 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 Adafruit_I2C.py librairie Python écrite par AdaFruit Industries
 +
# www.adafruit.com
 +
 +
import time
 +
from Adafruit_I2C import Adafruit_I2C
 +
 +
i2c = Adafruit_I2C( 0x04 )
 +
 +
# Ecriture de deux bytes, le registre (ici à 0) et la valeur hexa 0x40
 +
i2c.write8( 0, 0x40 )
 +
 +
# Donner un delais au périphérique I2C pour qu'il soit prêt a recevoir
 +
# une nouvelle communication... sinon on recoit l'erreur
 +
#  Error accessing 0x04: Check your I2C address
 +
time.sleep( 0.100 )
 +
 +
# Ecriture d'une liste de bytes
 +
# d'abord le registre 0x35 (soit le caractère ascii 5)
 +
# Ensuite les caratères abc convertis en bytes à l'aide de la fonctino ord
 +
# Finalement la valeur 110
 +
i2c.writeList( 0x35, [ord('a'),ord('b'),ord('c'),110] )
 +
 +
time.sleep( 0.100 )
 +
 +
# Exemple plus élaboré
 +
# Le dernier caractère est destiné à recevoir un byte
 +
__liste = list()
 +
__texte = 'valeur= '
 +
for i in range( len(__texte) ):
 +
        __liste.append(ord(__texte[i]))
 +
 +
 +
for i in range(3):
 +
        __liste[len(__liste)-1] = i
 +
        i2c.writeList( 0x35, __liste )
 +
        time.sleep(0.100)</nowiki>
 +
 +
== Executer le programme ==
 +
 +
{{ambox-stop|text=Les résultats de ce programme sont visibles dans le "Moniteur Série" d'Arduino IDE.<br />N'oubliez donc pas de charger SlaverListerner sur votre Arduino et de démarrer le moniteur série.}}
 +
 +
Le programme s'exécute simplement comme suit:
 +
 +
<nowiki>cd ~/ArdPi-I2C/Pi/MasterWriter
 +
sudo python MasterWriter.py</nowiki>
    +
{{ambox|text=Il est important d'utiliser <strong>sudo</strong> pour que Python puisse accéder librement au GPIO!}}
    
{{ArduPi-I2C-TRAILER}}
 
{{ArduPi-I2C-TRAILER}}
29 917

modifications

Menu de navigation