ArduPi-I2C-Simple-CodePi

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Raspberry

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

Notre programme python s'appuie sur la librairie I2C écrite par 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.

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:

ls ~/Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/

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:

  1. copier Adafruit_I2C.py dans le même répertoire que le programme MasterWriter.py (que nous allons créer).
  2. 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:

cd ~
mkdir ArdPi-I2C
cd ArdPi-I2C
mkdir Pi
cd Pi
mkdir MasterWriter
cd MasterWriter

Voila, maintenant nous allons créer un lien symbolique vers la source Adafruit_I2C que vous avez déjà installé sur votre pi

cd ~/ArdPi-I2C/Pi/MasterWriter
ln -s ../../../Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/Adafruit_I2C.py 

Ne reste plus qu'à créer notre programme MasterWriter.py à l'aide de la commande:

cd ~/ArdPi-I2C/Pi/MasterWriter
nano MasterWriter.py

Vous pouvez alors taper le code du programme (voir ci-dessous).

Vous pouvez également utiliser la méthode Pi-Copier/Pi-Coller pour copier/coller facilement le code dans MasterWriter.py

Programme MasterWriter.py

#!/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)

Ecrit par Meurisse D. pour mchobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.