RASP-GOF-GSM-GPRS-SerialPython

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.

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.

Cela est rendu possible grâce à la libraire Python pySerial.

pySerial

Qu'est ce que pySerial?

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).

RASP-GOF-GSM-GPRS-pySerial.jpg

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 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

cd ~
mkdir pyGsmGPRS_Test
cd pyGsmGPRS_Test
mkdir pySerialTest
cd pySerialTest

Créez maintenant le programme pySerialTest.py à l'aide de l'éditeur nano.

nano pySerialTest.py

et ajouter le code Python suivant:

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

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.

RASP-GOF-GSM-GPRS-UART-02.jpg

Si votre module est allumé alors:

  • La led PWR: Alimentation (Vert) est allumée.
  • La led Statut: Bleu est allumée.
  • La led Netlight: Réseau Rouge clignote.
GSM-Shield-02-fr.jpg

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.

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.

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:

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)

Permet de s'apercevoir que la réponse est

255
65
84
13
13
10
79
75
13
10
�AT
OK

Ce caractère bizarre correspond chr(255) qui correspond à un octet/byte où tous les bits sont à 1. 255 correspond à la notation 0b11111111

Ressources


Réalisé par Meurisse D. pour MCHobby.be

Traduit avec l'autorisation de Geek On Fire - Translated with the permission from Geek On Fire - [1]

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.