Le MG996R est un servomoteur numérique robuste et dispose de pignons et...
La carte Arduino Nano 3.0 est basée sur un ATMega328. Sa mémoire de 32...
Câble de rallonge pour Servomoteurs ( SG90, MG995, MG996R, S3003,...
Capteur infrarouge arduino permettant la détection d'obstacles ou de...
Capteur optoélectronique avec circuit de traitement du signal présentant...
Capteur de fin de course optique idéal pour les imprimantes 3D.
Posted On: juil. 10, 2020
Seen by: 1661
Categories: GSM/GPRS
Author: Christian Joseph
Tags: raspberry pi , sim900 , sms , mms
Après avoir envoyé et reçu des SMS, envoyé des MMS et émis des appels avec Arduino, nous allons maintenant le faire avec le Raspberry Pi en langage python.
1. Présentation:
Le Raspberry Pi est une carte micro-ordinateur avec des Ports usb ( 2 à 4 suivant le modèle), un port HDMI, 1 port pour sa caméra, 1 Port Ethernet, une connectivité Bluetooth et WIFI (suivant le modèle), et un environnement d'exploitation sous linux appélé Rasbian OS.
Le Raspberry permet de faire tout ce qui est possible sur un ordinateur classique, comme de l'édition de texte, du multimédia, et même de la programmation. Depuis la 1ère version, le Raspberry Pi a beaucoup évolué en terme de Software et de Hardware. Il est capable de faire une viso conférence, faire de la télésurveillance, ou encore travailler des processus liés à l'intélligence artificielle.
2. Branchement:
Notre but est d'envoyer des SMS et des MMS avec un SIM900, ou un SIM800 mais tout d'abord nous allons devoir le connecter avec notre Raspberry Pi.
La Connection est plutôt simple avec 3 fils comme lors du tutoriel avec Arduino:
SIM900 | RASPi 4 |
GND | GND |
RX | GPIO15 |
TX | GPIO14 |
Nous utilisons un Raspberry Pi 4, mais ce montage est aussi valable pour un Raspberry 3 ou 2 étant donné qu'il s'agit des mêmes broches.
3.Programmation:
Alors avant de programmer, il faut d'abord activer le port série de votre Raspberry Pi:
ENVOI DE SMS et Appels:
Etant donné que l'éditeur Blog ne prend pas encore en compte le symbole antislash( Eh oui il l'assimile à du code HTML), il faudra donc remplacer dans le code (antislash) par son symbole, avant de lancer votre script python via le terminal raspberry. Exemple: Python /home/pi/Documents/mon_script.py ou Python3 /home/pi/Documents/mon_script.py.
N.B: mon_script.py est bien entendu enregistré dans le dossier Documents de votre raspberry Pi.
Le sim900 ne prend pas en compte les accents, du coup tous vos sms doivent être rédigés en notation anglo-saxonne, c'est à dire sans accent (sacrebleu!).
Code avec Python 2.7
import serial
import RPi.GPIO as GPIO
import time
# Enable Serial Communication
phone = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1)
phone.write('AT(antislash)r(antislash)n')
time.sleep(2)
phone.write('AT+CMGF=1(antislash)r(antislash)n')
time.sleep(3)
phone.write('AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(2)
phone.write('AT+CMGS=(antislash)"+33644757223(antislash)"(antislash)r(antislash)n')
time.sleep(2)
phone.write('Hello cher utilisateur, je suis ton Raspberry Pi (antislash)r(antislash)n')
time.sleep(2)
phone.write('(antislash)x1A')
time.sleep(2)
phone.write('ATD+33644757223;(antislash)r"); #appel téléphonique
Code avec Python 3
import serial
import RPi.GPIO as GPIO
import time
# Activation du port série
phone = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1)
phone.write(b'AT(antislash)r(antislash)n')
time.sleep(2)
phone.write(b'AT+CMGF=1(antislash)r(antislash)n')
time.sleep(3)
phone.write(b'AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(2)
phone.write(b'AT+CMGS=(antislash)"+33644757223(antislash)"(antislash)r(antislash)n')
time.sleep(2)
phone.write(b'Hello cher utilisateur, je suis ton Raspberry Pi(antislash)r(antislash)n')
time.sleep(2)
phone.write(b'(antislash)x1A')
time.sleep(2)
phone.write(b'ATD+33644757223;(antislash)r"); #appel téléphonique
RECEPTION DE SMS:
Code avec Python 2.7:
import RPi.GPIO as GPIO
import serial
import time
SERIAL_PORT = "/dev/ttyS0"
ser = serial.Serial(SERIAL_PORT, baudrate = 9600, timeout = 5)
ser.write("AT+CMGF=1(antislash)r") # mode texte
time.sleep(3)
ser.write('AT+CMGDA="DEL ALL"(antislash)r') # efface tous les SMS
time.sleep(3)
reply = ser.read(ser.inWaiting()) # efface le buffer
print "Attente de SMS entrant..."
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if reply != "": # ATTENTION A L'INDENTATION ICI
ser.write("AT+CMGR=1r")
time.sleep(3)
reply = ser.read(ser.inWaiting())
print "SMS recu. Contenu:"
print reply
ser.write('AT+CMGDA="DEL ALL"(antislash)r') # efface tous les SMS
time.sleep(3)
Code avec Python 3:
import RPi.GPIO as GPIO
import serial
import time
SERIAL_PORT = "/dev/ttyS0"
ser = serial.Serial(SERIAL_PORT, baudrate = 9600, timeout = 5)
ser.write(b"AT+CMGF=1(antislash)r") # mode texte
time.sleep(3)
ser.write(b'AT+CMGDA="DEL ALL"(antislash)r') # efface tous les SMS
time.sleep(3)
reply = ser.read(ser.inWaiting()) # efface le buffer
print "Attente de SMS entrant..."
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if reply != "": # ATTENTION A L'INDENTATION ICI
ser.write(b"AT+CMGR=1(antislash)r")
time.sleep(3)
reply = ser.read(ser.inWaiting())
print "SMS recu. Contenu:"
print reply
ser.write(b'AT+CMGDA="DEL ALL"(antislash)r') # efface tous les SMS
time.sleep(3)
ENVOI DE MMS:
Pour l'envoi de MMS, nous avons enregistré une image Jpeg sur le bureau du Raspberry Pi appelé 'mon-image.jpg'.
Les paramètres d'envoi du MMS sont ceux de laposte mobile.
Code avec Python 2.7:
import serial
import RPi.GPIO as GPIO
import time
#Activation du port série
phone = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1)
phone.write('AT(antislash)r(antislash)n')
time.sleep(1)
phone.write('AT+CMMSINIT(antislash)r(antislash)n')
time.sleep(2)
phone.write('AT+CMMSCURL=(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
phone.write('AT+CMMSCID=1(antislash)r')
time.sleep(1)
phone.write('AT+CMMSPROTO=(antislash)"10.143.156.003(antislash)",8080(antislash)r')
time.sleep(1)
phone.write('AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(antislash)r')
time.sleep(1)
phone.write('AT+SAPBR=3,1,(antislash)"CONTYPE(antislash)",(antislash)"GPRS(antislash)"(antislash)r')
time.sleep(1)
phone.write('AT+SAPBR=3,1,(antislash)"APN(antislash)",(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
phone.write('AT+SAPBR=1,1(antislash)r')
time.sleep(4)
phone.write('AT+SAPBR=2,1(antislash)r')
time.sleep(1)
phone.write('AT+CMMSEDIT=1(antislash)r')
time.sleep(1)
phone.write('AT+CMMSDOWN=(antislash)"PIC(antislash)",15683,20000,(antislash)"mon-image.jpg(antislash)"(antislash)r') #la taille de notre image est de 15683 octets. Pensez à regarder la taille de votre image et remplacez ce chiffre.
time.sleep(1)
photo = open ("/home/pi/Desktop/mon-image.jpg", "r")
dataphoto = photo.read()
phone.write(dataphoto)
time.sleep(1)
phone.write('AT+CMMSRECP=(antislash)"+33644757223(antislash)"(antislash)r')
time.sleep(1)
phone.write('AT+CMMSVIEW(antislash)r')
time.sleep(1)
phone.write('AT+CMMSSEND(antislash)r')
time.sleep(1)
phone.write('AT+CMMSEDIT=0(antislash)r')
time.sleep(1)
phone.write('AT+CMMSTERM(antislash)r')
time.sleep(1)
photo.close()
En ce qui concerne les appels avec le Raspberry Pi, il faut connecter un micro et un Haut-parleur ou des écouteurs au module SIM900.
Pour toutes questions, remarques, ou demande d'envoi du code, n'hésitez pas à nous écrire à projet@eagle-robotics.com.