Différences entre versions de « ArduPi-I2C-DataType-CodePi »
(3 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 20 : | Ligne 20 : | ||
=== Préparation pour MasterWriterDataTypes.py === | === Préparation pour MasterWriterDataTypes.py === | ||
− | Le programme MasterWriter'''DataTypes'''.py va importer le Adafruit_I2C.py, il est donc capital que ce fichier soit accessible depuis MasterWriter'''DataTypes'''.py. | + | {{bloc-etroit|text=Le programme MasterWriter'''DataTypes'''.py va importer le Adafruit_I2C.py, il est donc capital que ce fichier soit accessible depuis MasterWriter'''DataTypes'''.py. |
Le plus simple est de créer un lien symbolique vers Adafruit_I2C.py depuis le répertoire où sera stocké notre programme MasterWriter'''DataTypes'''.py . | Le plus simple est de créer un lien symbolique vers Adafruit_I2C.py depuis le répertoire où sera stocké notre programme MasterWriter'''DataTypes'''.py . | ||
− | Le commandes suivantes permettent créer le répertoire de stockage pour MasterWriter'''DataTypes'''.py , voici la marche à suivre: | + | Le commandes suivantes permettent créer le répertoire de stockage pour MasterWriter'''DataTypes'''.py , voici la marche à suivre: }} |
− | |||
<nowiki>cd ~ | <nowiki>cd ~ | ||
mkdir ArdPi-I2C | mkdir ArdPi-I2C | ||
Ligne 64 : | Ligne 63 : | ||
* Demander le NO de version, donc lectyre d'un octet (type "'''byte'''") | * Demander le NO de version, donc lectyre d'un octet (type "'''byte'''") | ||
* Demander la lecture d'un nombre décimal (type "'''double'''") | * Demander la lecture d'un nombre décimal (type "'''double'''") | ||
+ | |||
+ | '''Decodage d'un type DOUBLE:'''<br /> | ||
+ | Le décodage d'un type DOUBLE se fait à l'aide d'un struct.unpack. Pour un double, il faut fournir un buffer de 4 octets. Ce buffer doit être une chaîne de caractère. | ||
+ | |||
+ | Il faut donc transformer les 4 octets/byte en provenance d'Arduino et reçu à l'aide de I2C.readList() en une chaine de caractère à l'aide de la fonction CHR(). | ||
=== Le programme === | === Le programme === | ||
Ligne 94 : | Ligne 98 : | ||
# --- Demander le NO de version --- | # --- Demander le NO de version --- | ||
+ | # Transfert d'un type BYTE | ||
+ | |||
# Ecriture de la valeur 0x01 dans le registre 0 | # Ecriture de la valeur 0x01 dans le registre 0 | ||
i2c.write8( 0, 0x01 ); | i2c.write8( 0, 0x01 ); | ||
Ligne 103 : | Ligne 109 : | ||
# Error accessing 0x04: Check your I2C address | # Error accessing 0x04: Check your I2C address | ||
time.sleep( 0.100 ) | time.sleep( 0.100 ) | ||
+ | |||
+ | # --- Demander une valeur décimale --- | ||
+ | # Transfert d'un type DOUBLE | ||
# demander l'opération de reception d'un float, placer 0x02 dans le | # demander l'opération de reception d'un float, placer 0x02 dans le |
Version actuelle datée du 10 août 2013 à 17:07
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 MasterWriterDataTypes.py
Le programme MasterWriterDataTypes.py va importer le Adafruit_I2C.py, il est donc capital que ce fichier soit accessible depuis MasterWriterDataTypes.py.
Le plus simple est de créer un lien symbolique vers Adafruit_I2C.py depuis le répertoire où sera stocké notre programme MasterWriterDataTypes.py .
Le commandes suivantes permettent créer le répertoire de stockage pour MasterWriterDataTypes.py , voici la marche à suivre:
cd ~ mkdir ArdPi-I2C cd ArdPi-I2C mkdir Pi cd Pi mkdir MasterWriterDataTypes cd MasterWriterDataTypes
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/MasterWriterDataTypes ln -s ../../../Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/Adafruit_I2C.py
Ne reste plus qu'à créer notre programme MasterWriterDataTypes.py à l'aide de la commande:
cd ~/ArdPi-I2C/Pi/MasterWriterDataTypes nano MasterWriterDataTypes.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 MasterWriterDataTypes.py
MasterWriterDataTypes.py prêt?
Voila, si tout est correctement préparé, la commande commande ls suivante:
ls ~/ArdPi-I2C/Pi/MasterWriterDataTypes
Affiche la liste des fichiers où les éléments suivants doivent être visible:
Adafruit_I2C.py MasterWriterDataTypes.py
Programme MasterWriterDataTypes.py
Fonctionnement en quelques mots
Le programme MasterWriterDataTypes.py établit une connexion avec l'esclave 0x04 (donc notre Arduino programmé avec SlaveListerner) et envoi une série de message.
Le programme MasterWriterDataTypes.py effectue les opérations suivant:
- Demander le NO de version, donc lectyre d'un octet (type "byte")
- Demander la lecture d'un nombre décimal (type "double")
Decodage d'un type DOUBLE:
Le décodage d'un type DOUBLE se fait à l'aide d'un struct.unpack. Pour un double, il faut fournir un buffer de 4 octets. Ce buffer doit être une chaîne de caractère.
Il faut donc transformer les 4 octets/byte en provenance d'Arduino et reçu à l'aide de I2C.readList() en une chaine de caractère à l'aide de la fonction CHR().
Le programme
#!/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 instructions vers un Arduino par # l'intermédiaire de "registres" de façon logiciel sur Arduino. # S'utilise avec le programme Arduino SlaveRegisterDataTypes.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 import struct from Adafruit_I2C import Adafruit_I2C i2c = Adafruit_I2C( 0x04 ) # --- Demander le NO de version --- # Transfert d'un type BYTE # Ecriture de la valeur 0x01 dans le registre 0 i2c.write8( 0, 0x01 ); time.sleep( 0.020 ); print( i2c.readU8( 0x00 ) ); # Donner un delai 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 ) # --- Demander une valeur décimale --- # Transfert d'un type DOUBLE # demander l'opération de reception d'un float, placer 0x02 dans le # le registre d'exécution 0 i2c.write8( 0x00, 0x02 ) time.sleep(0.100) i2c.debug = True # Lire 4 octets pour recevoir le Float. # Doit recevoir les valeurs [164, 112, 181, 64] # i2c.debug = True lstData = i2c.readList( 0x00, 4 ) # transformer en string pour unpack sData = '' for aByte in lstData: sData = sData + chr(aByte) f_data, = struct.unpack('<f',sData) print f_data # Affiche la valeur en Float.
Executer le programme
Les résultats de ce programme sont principalement visible dans la session terminal de votre Raspberry Pi. Le programme Arduino est cependant susceptible d'envoyer quelques informations sur le "Moniteur Série" d'Arduino IDE. N'oubliez donc pas de charger SlaverRegisterDataTypes sur votre Arduino et de démarrer le moniteur série. |
Le programme s'exécute simplement comme suit:
cd ~/ArdPi-I2C/Pi/MasterWriterDataTypes sudo python MasterWriterDataTypes.py
Il est important d'utiliser sudo pour que Python puisse accéder librement au GPIO! |
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.