Modifications

Sauter à la navigation Sauter à la recherche
5 050 octets ajoutés ,  31 mars 2014 à 04:37
Ligne 6 : Ligne 6 :  
Cela est rendu possible grâce à la libraire Python pySerial.}}
 
Cela est rendu possible grâce à la libraire Python pySerial.}}
   −
=== pySerial ===
+
== pySerial ==
 +
=== Qu'est ce que pySerial? ===
    
{{bloc-etroit|text=pySerial est un projet OpenSource disponible sur SourceForge.Net.
 
{{bloc-etroit|text=pySerial est un projet OpenSource disponible sur SourceForge.Net.
Ligne 17 : Ligne 18 :     
Vous pouvez accéder directement au site du projet sur [http://pyserial.sourceforge.net/ pyserial.sourceforge.net].
 
Vous pouvez accéder directement au site du projet sur [http://pyserial.sourceforge.net/ pyserial.sourceforge.net].
 +
 +
=== Easy-Intall & pip ===
 +
Il existe des logiciel qui facilitent grandement l'installation de librairies Pythons.
 +
 +
Il s'agit des utilitaires '''pip''' et/ou '''easy_install'''.
 +
 +
easy_install devrait déjà être présent sur votre Pi puisqu'il fait partie intégrante de la distribution de Python.
 +
 +
Par contre, il est préférable d'installer l'utilitaire '''pip''', à l'aide de la commande:
 +
 +
sudo apt-get install python-pip
 +
 +
=== Installer pySerial ===
 +
 +
Nous allons maintenant installer la librairie.
 +
 +
La méthode la plus simple consiste à utiliser l'utilitaire easy_install
 +
 +
sudo easy_install pySerial
 +
 +
Si vous rencontrer des problèmes avec easy_install ou si vous préférez pip, utilisez alors la commande
 +
 +
sudo pip install pySerial
 +
 +
== pySerialTest.py ==
 +
Nous vous proposons maintenant de tester la communication série depuis un programme Python.
 +
 +
Pour se faire, nous allons utiliser une particularité du module SIM900.
 +
 +
Si on lui envoi une commande "AT" sans rien d'autre avec un retour à la ligne alors le module SIM900 répond "OK".
 +
 +
C'est une astuce utilisée pour savoir si le module SIM900 est bien sous tension ;-)
 +
 +
=== le programme pySerialTest.py ===
 +
Créez le répertoire pySerialTest
 +
 +
<nowiki>cd ~
 +
mkdir pyGsmGPRS_Test
 +
cd pyGsmGPRS_Test
 +
mkdir pySerialTest
 +
cd pySerialTest</nowiki>
 +
 +
Créez maintenant le programme pySerialTest.py à l'aide de l'éditeur nano.
 +
 +
<nowiki>nano pySerialTest.py</nowiki>
 +
 +
et ajouter le code Python suivant:
 +
 +
<nowiki>#!/usr/bin/python
 +
# -*- encoding: utf8 -*-
 +
 +
# Ce programme teste la connexion avec un GSM/GPRS actif
 +
# Il envoi une commande AT sur le port série à laquelle il attend une réponse OK
 +
 +
# Voir le tutoriel MCHobby sur
 +
#    http://wiki.mchobby.be/index.php?title=RASP-GOF-GSM-GPRS
 +
# Où acheter le module GSM/GPRS
 +
#    http://shop.mchobby.be/product.php?id_product=63
 +
 +
import serial, time
 +
ser = serial.Serial( port='/dev/ttyAMA0', baudrate=19200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1 )
 +
ser.open
 +
 +
# Envoyer la commande AT
 +
ser.write( "AT\r\n" )
 +
# Attendons un moment avant de lire la réponse
 +
#  (ce qui donne aux périphérique le temps de nous fournir une réponse)
 +
time.sleep(0.3)
 +
# Lecture de la réponse octet par octet
 +
out = ''
 +
while ser.inWaiting() > 0:
 +
        out += ser.read(1)
 +
print (out)
 +
 +
# --- Envoyer une 2ieme commande AT
 +
ser.write( "AT\r\n" )
 +
time.sleep(0.3)
 +
out = ''
 +
while ser.inWaiting() > 0:
 +
        out += ser.read(1)
 +
print out</nowiki>
 +
 +
Saisissez la commande suivante pour rendre le programme exécutable
 +
 +
chmod +x pySerialTest.py
 +
 +
== Tester pySerialTest.py ==
 +
=== Démarrer le SIM900 ===
 +
Assurez-vous que le module SIM900 soit sous tension avant de lancer le programme de test.
 +
 +
En effet, vous n'obtiendrez aucune réponse si ce dernier est éteint.
 +
 +
[[Fichier:RASP-GOF-GSM-GPRS-UART-02.jpg]]
 +
 +
Si votre module est allumé alors:
 +
* La led PWR: Alimentation (<font color="green">Vert</font>) est allumée.
 +
* La led Statut: <font color="blue">Bleu</font> est allumée.
 +
* La led Netlight: Réseau <font color="red">Rouge</font> clignote.
 +
 +
[[File:GSM-Shield-02-fr.jpg|center]]
 +
 +
=== Démarrez pySerialTest.py ===
 +
 +
Démarrez maintenant votre programme de test en Python à l'aide de la commande:
 +
 +
./pySerialTest.py
 +
 +
Et vous devriez voir apparaitre le résultat suivant dans votre fenêtre terminal.
 +
 +
[[Fichier:RASP-GOF-GSM-GPRS-SerialPython-testResult.jpg]]
 +
 +
Voici quelques informations complémentaires sur les réponses produites par le programme
 +
 +
'''Pourquoi les commandes AT sont-elles visibles?'''
 +
 +
Si le programme ne fait que lire les réponses, pourquoi voit-on aussi les "AT" dans les messages de réponses!?!?
 +
 +
Simplement parce que le module SIM900 est configuré en ''mode echo'', ce qui implique que le module SIM900 renvoi aussi sur la sortie série toutes les commande qu'il reçoit.
 +
 +
'''Beaucoup de ligne vide!!!'''
 +
 +
Après le AT, il y a une ligne vide puis un OK puis une ligne vide.
 +
C'est étonnant d'avoir autant de ligne vide.
 +
 +
{{ambox-stop|text=Après une recherche scrupuleuse, on remarquera que seule le \r est utile en fin de commande. Le \r\n est interprété comme un double retour à la ligne.}}
 +
 +
ser.write( "AT\r" )
 +
 +
'''C'est quoi ce caractère "?" bizarre avant le premier AT?'''
 +
 +
Probablement produit par l'état indéfini/quelconque/flottant de la ligne série au moment de l'initialisation de la communication.
 +
 +
Une analyse plus scrupuleuse de la réponse à l'aide du code suivant:
 +
<nowiki>ser.write( "AT\r" )
 +
# Attendons un moment avant de lire la réponse
 +
#  (ce qui donne aux périphérique le temps de nous fournir une réponse)
 +
time.sleep(0.3)
 +
out = ''
 +
aChar = 0
 +
while ser.inWaiting() > 0:
 +
        aChar = ser.read(1)
 +
        print( ord( aChar ))
 +
        out += aChar
 +
print (out)</nowiki>
 +
 +
Permet de s'apercevoir que la réponse est
 +
 +
<nowiki>255
 +
65
 +
84
 +
13
 +
13
 +
10
 +
79
 +
75
 +
13
 +
10
 +
�AT
 +
OK
 +
</nowiki>
 +
 +
Ce caractère bizarre correspond chr(255) qui correspond à un octet/byte où tous les bits sont à 1. 255 correspond à la notation 0b11111111
    
== Ressources ==
 
== Ressources ==
29 917

modifications

Menu de navigation