Ligne 2 : |
Ligne 2 : |
| | | |
| == Introduction == | | == Introduction == |
− | Maintenant que nous avons réussit à utiliser le port série matériel du Raspberry Pi et et à échanger des commandes AT à l'aide de minicom, ce qui serait vraiment chouette, c'est de pouvoir communiquer avec le module SIM900 avec un programme en Python. | + | {{bloc-etroit|text=Maintenant que nous avons réussit à utiliser le port série matériel du Raspberry Pi et et à échanger des commandes AT à l'aide de minicom, ce qui serait vraiment chouette, c'est de pouvoir communiquer avec le module SIM900 avec un programme en Python. |
| | | |
− | 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? === |
| | | |
− | pySerial est un projet OpenSource disponible sur SourceForge.Net. | + | {{bloc-etroit|text=pySerial est un projet OpenSource disponible sur SourceForge.Net. |
| | | |
− | Ce module encapsule l’accès au port série. Il fournit un support matériel (''backends'') pour Python fonctionnant sur Windows, Linux, BSD (tou les système répondant à la norme POSIX), Jython and IronPython (.NET et Mono). | + | Ce module encapsule l’accès au port série. Il fournit un support matériel (''backends'') pour Python fonctionnant sur Windows, Linux, BSD (tou les système répondant à la norme POSIX), Jython and IronPython (.NET et Mono).}} |
| | | |
| [[Fichier:RASP-GOF-GSM-GPRS-pySerial.jpg]] | | [[Fichier:RASP-GOF-GSM-GPRS-pySerial.jpg]] |
| | | |
| Ce qui est génial pour nous, c'est de pySerial peut également être installé sur Raspberry-Pi :-) | | Ce qui est génial pour nous, c'est de pySerial peut également être installé sur Raspberry-Pi :-) |
| + | |
| + | 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 == |
| + | * Le site du projet [http://pyserial.sourceforge.net/ pyserial.sourceforge.net] |
| | | |
| {{RASP-GOF-GSM-GPRS-TRAILER}} | | {{RASP-GOF-GSM-GPRS-TRAILER}} |