
Posted On: juil. 10, 2020
Seen by: 11073
Categories: GSM/GPRS
Author: Christian Joseph
Tags: raspberry pi , sim900 , sms , mms , sim800c
Après avoir envoyé et reçu des SMS, envoyé des MMS et émis des appels avec Arduino, nous allons maintenant le faire avec SIM800, le SIM800C, ou encore le SIM900 et le Raspberry Pi en langage python. L'envoi de SMS est un protocole universel quel que soit l'opérateur téléphonique. L'envoi de MMS nécessite des paramètres APN propres à chaque opérateur téléphonique. Pas de panique, nous avons développé le code de l'envoi MMS avec la poste mobile, mais nous vous avons aussi fournit les paramètres à remplacer tout simplement dans le code des opérateurs comme Orange, SFR, et Bouygue Télécom.
LE RASPBERRY PI:
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 visio conférence, faire de la télésurveillance, ou encore travailler des processus liés à l'intélligence artificielle.
SIM800 / SIM800C / SIM900:
Les modules SIM800, SIM800C et SIM900 sont des modules GSM/GPRS quadri-bande et qui servent à envoyer des SMS, des MMS et des Appels. Ces modules disposent tous de connecteurs pour carte SIM ou micro SIM (SIM800C) et sont compatibles tous opérateurs.
2. Branchement:
Notre but est d'envoyer des SMS et des MMS avec un SIM900 , un SIM800 ou avec un SIM800C 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.
Nous avons aussi la possibilité d'utiliser le SIM800 ou SIM800C pour Raspberry Pi:
L'avantage des modules SIM800 et SIM800C est qu'ils ne nécessitent aucun câblage avec la carte Raspberry Pi, et ne nécessitent aucune alimentation externe contrairement au SIM900 qui est plus désigné pour les carte Arduino, mais fonctionne aussi bien avec un Raspberry Pi.
3.Programmation:
Alors avant de programmer, il faut d'abord activer le port série de votre Raspberry Pi:
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=115200, 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') #message
time.sleep(2)
phone.write('(antislash)x1A') #Envoi du SMS
time.sleep(2)
phone.write('ATD+33644757223;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=115200, 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') #message
time.sleep(2)
phone.write(b'(antislash)x1A') #Envoi du SMS
time.sleep(2)
phone.write(b'ATD+33644757223;(antislash)r"); #appel téléphonique
#En ce qui concerne les appels avec le Raspberry Pi, il faut connecter un micro et un Haut-parleur ou des écouteurs au module SIM800C ou SIM900.
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)
Nous allons voir 4 programmes de réception de sms avec python3:
Pour savoir si un nouveau SMS est arrivé, on lit en permance le buffer de reception du module SIM800 ou SIM900, et on recherche le "REC" comme dans "REC UNREAD". Une fois le mot repéré, on peut alors extraire le numéro de téléphone de l'émetteur, ou encore le contenu du SMS.
#Programme :Réception de SMS avec Python 3
#Auteur: Christian Joseph
#date: 10/07/2020
#www.eagle-robotics.com
import RPi.GPIO as GPIO
import serial
import time
import binascii
ser = serial.Serial("/dev/ttyS0" , baudrate = 115200, timeout = 1)
ser.write(b'AT+CMGF=1(antislash)r') # mode texte
time.sleep(1)
ser.write(b'AT+CMGDA=(antislash)"DEL ALL(antislash)"(antislash)r') # efface tous les SMS
time.sleep(1)
reply = ser.read(ser.inWaiting())
print ("Attente de SMS entrant")
ser.reset_input_buffer()
a = 1
b = str(a)
c = 1
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if len(reply) > 0: # ATTENTION A L'INDENTATION ICI
ser.write(b'AT+CMGR=')
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(1)
reply = ser.read(ser.inWaiting())
reply2 = str(reply)
m = reply2.find('REC') # on recherche le mot REC ce qui signifie qu'un nouveau SMS est arrivé
if (m != -1):
print("Nouveau SMS")
print (reply)
nummer = reply2.split(',')
#Extraction du numéro de l'emetteur
if (c == 1):
numero2 = nummer[2].encode()
c = c + 1
else:
numero2 = nummer[1].encode()
print(numero2)
a = a + 1
b = str(a) #on incrémente la donnée pour le prochain sms
ser.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGF=1(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGS=')#Destinataire
ser.write(numero2) #ici on envoi un message automatique à l'émetteur du SMS
ser.write(b'(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'Merci pour votre message, nous vous recontacterons(antislash)r(antislash)n') #Message à envoyer
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'(antislash)x1A')
time.sleep(2)
else: #Attention à l'indentation
print("Aucun SMS") #Aucun SMS reçu
ser.write(b'AT+CMGR=') #SMS suivant si présent
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(3)
Dans ce programme, le contenu du SMS ainsi que le numéro de l'émetteur sont envoyés par SMS à un numéro Tiers. Cela peut être le numéro d'un service clientèle, administratif, ou Hotline, etc...
#Programme :Réception de SMS avec Python 3
#Auteur: Christian Joseph
#date: 10/07/2020
#www.eagle-robotics.com
import RPi.GPIO as GPIO
import serial
import time
import binascii
ser = serial.Serial("/dev/ttyS0" , baudrate = 115200, timeout = 1)
ser.write(b'AT+CMGF=1(antislash)r') # mode texte
time.sleep(1)
ser.write(b'AT+CMGDA=(antislash)"DEL ALL(antislash)"(antislash)r') # efface tous les SMS
time.sleep(1)
reply = ser.read(ser.inWaiting())
print ("Attente de SMS entrant")
ser.reset_input_buffer()
a = 1
b = str(a)
c = 1
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if len(reply) > 0: # ATTENTION A L'INDENTATION ICI
ser.write(b'AT+CMGR=')
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(1)
reply = ser.read(ser.inWaiting())
reply2 = str(reply)
m = reply2.find('REC') # on recherche le mot REC ce qui signifie qu'un nouveau SMS est arrivé
if (m != -1):
print("Nouveau SMS")
print (reply)
nummer = reply2.split(',')
#Extraction du numéro de l'emetteur
if (c == 1):
numero2 = nummer[2].encode()
c = c + 1
else:
numero2 = nummer[1].encode()
print(numero2)
a = a + 1
b = str(a) #on incrémente la donnée pour le prochain sms
ser.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGF=1(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGS=(antislash)"+33644757223(antislash)"'(antislash)r(antislash)n')#Destinataire
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(reply) #contenu du SMS reçu à envoyer
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'(antislash)x1A')
time.sleep(2)
else: #Attention à l'indentation
print("Aucun SMS") #Aucun SMS reçu
ser.write(b'AT+CMGR=') #SMS suivant si présent
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(3)
#Programme :Reception de SMS avec Python 2
#Auteur: Christian Joseph
#date: 10/07/2020
#www.eagle-robotics.com
import RPi.GPIO as GPIO
import serial
import time
import binascii
ser = serial.Serial("/dev/ttyS0" , baudrate = 115200, timeout = 1)
ser.write(b'AT+CMGF=1(antislash)r') # mode texte
time.sleep(1)
ser.write(b'AT+CMGDA=(antislash)"DEL ALL(antislash)"(antislash)r') # efface tous les SMS
time.sleep(1)
reply = ser.read(ser.inWaiting())
print ("Attente de SMS entrant")
ser.reset_input_buffer()
a = 1
b = str(a)
c = 1
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if len(reply) > 0: # ATTENTION A L'INDENTATION ICI
ser.write(b'AT+CMGR=')
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(1)
reply = ser.read(ser.inWaiting())
reply2 = str(reply)
m = reply2.find('REC') # on recherche le mot REC ce qui signifie qu'un nouveau SMS est arrivé
if (m != -1):
print("Nouveau SMS")
print (reply)
nummer = reply2.split(',')
#Extraction du numéro de l'emetteur
if (c == 1):
numero2 = nummer[2].encode()
c = c + 1
else:
numero2 = nummer[1].encode()
print(numero2)
a = a + 1
b = str(a) #on incrémente la donnée pour le prochain sms
#On enregistre le SMS dans un fichier texte appelé MessagesVisiteurs
f = open("/home/pi/Documents/SIM800/messages/MessagesVisiteurs", "a") #chemin d'accès au fichier
f.write(reply2)
f.write("(antislash)r(antislash)n")
f.close()
ser.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGF=1(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGS=(antislash)"+33644757223(antislash)"(antislash)r(antislash)n')#Destinataire
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(reply) #Message à envoyer
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'(antislash)x1A')
time.sleep(2)
else:
print("Aucun SMS") #Aucun SMS reçu
ser.write(b'AT+CMGR=') #SMS suivant si présent
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(3)
#Programme :Reception de SMS avec Python 2
#Auteur: Christian Joseph
#date: 10/07/2020
#www.eagle-robotics.com
import RPi.GPIO as GPIO
import serial
import time
import binascii
ser = serial.Serial("/dev/ttyS0" , baudrate = 115200, timeout = 1)
ser.write(b'AT+CMGF=1(antislash)r') # mode texte
time.sleep(1)
ser.write(b'AT+CMGDA=(antislash)"DEL ALL(antislash)"(antislash)r') # efface tous les SMS
time.sleep(1)
reply = ser.read(ser.inWaiting())
print ("Attente de SMS entrant")
ser.reset_input_buffer()
a = 1
b = str(a)
c = 1
while True: # ATTENTION A L'INDENTATION ICI
reply = ser.read(ser.inWaiting())
if len(reply) > 0: # ATTENTION A L'INDENTATION ICI
ser.write(b'AT+CMGR=')
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(1)
reply = ser.read(ser.inWaiting())
reply2 = str(reply)
m = reply2.find('REC') # on recherche le mot REC ce qui signifie qu'un nouveau SMS est arrivé
if (m != -1):
print("Nouveau SMS")
print (reply)
nummer = reply2.split(',')
#Extraction du numéro de l'emetteur
if (c == 1):
numero2 = nummer[2].encode()
c = c + 1
else:
numero2 = nummer[1].encode()
print(numero2)
a = a + 1
b = str(a) #on incrémente la donnée pour le prochain sms
#On enregistre le SMS dans un fichier texte appelé MessagesVisiteurs
f = open("/home/pi/Documents/SIM800/messages/MessagesVisiteurs", "a")
f.write(reply2)
f.write("(antislash)r(antislash)n")
f.close()
ser.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGF=1(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CNMI=2,1,0,0,0(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'AT+CMGS=')#Destinataire
ser.write(numero2) #ici on envoi un message automatique à l'émetteur du SMS
ser.write(b'(antislash)r(antislash)n')
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'Merci pour votre message, nous vous recontacterons(antislash)r(antislash)n') #Message à envoyer
time.sleep(1)
rep = ser.read(ser.inWaiting())
print(rep)
ser.write(b'(antislash)x1A')
time.sleep(2)
else: #Attention à l'indentation ici
print("Aucun SMS") #Aucun SMS reçu
ser.write(b'AT+CMGR=') #SMS suivant si présent
ser.write(b.encode())
ser.write(b'(antislash)r')
time.sleep(3)
#FIN DES PROGRAMMES
Pour l'envoi de MMS, nous avons enregistré une image en .jpg sur le raspberry. Nous utiliserons ici les paramètres APN MMS de la Poste Mobile. Si vous utilisez un autre opérateur, voici les données à remplacer dans le code:
SFR: CMMSCURL = http://mms1 ; CMMSPROTO = 10.151.0.1; APN = sl2sfr
ORANGE: CMMSCURL = http://mms.orange.fr ; CMMSPROTO = 192.168.10.200; APN = orange.acte
BOUYGUES: CMMSCURL = mmsbouygtel ; CMMSPROTO = 62.201.129.226; APN =mmsbouygtel.com
FREE MOBILE: CMMSCURL= mms.free.fr ; CMMSPROTO=0.0.0.0 ; APN = mmsfree
Vous pouvez consulter les autres Opérateurs sur ce site: https://blog.ariase.com/mobile/dossiers/apn-point-acces-reseau-smartphone
Tous les codes avec ses différents opérateurs sont disponibles dans notre Kit Raspberry Pi - SIM800
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=115200, timeout=1)
phone.write('AT(antislash)r(antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSINIT(antislash)r(antislash)n')
time.sleep(2)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSCURL=(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSCID=1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSPROTO=(antislash)"10.143.156.003(antislash)",8080(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
#phone.write('AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(antislash)r') #Envoi mms lent
phone.write('AT+CMMSSENDCFG=1,1,0,0,2,4,2,0(antislash)r') #Envoi mms rapide
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+SAPBR=3,1,(antislash)"CONTYPE(antislash)",(antislash)"GPRS(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+SAPBR=3,1,(antislash)"APN(antislash)",(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+SAPBR=1,1(antislash)r')
time.sleep(4)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+SAPBR=2,1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSEDIT=0(antislash)r') #ON EFFACE LE BUFFER
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSEDIT=1(antislash)r') #ACTIVATION MODE EDITION
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
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)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSVIEW(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSSEND(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write('AT+CMMSTERM(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
photo.close()
Code avec Python 3:
import serial
import RPi.GPIO as GPIO
import time
import binascii
#Activation du port série
phone = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=1)
phone.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write(b'AT+CMMSINIT(antislash)r(antislash)n')
time.sleep(2)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write(b'AT+CMMSCURL=(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write(b'AT+CMMSCID=1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
phone.write(b'AT+CMMSPROTO=(antislash)"10.143.156.003(antislash)",8080(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)
#phone.write(b'AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(antislash)r') #Envoi mms lent
Code avec Python 3:
#Programme :Envoi de MMS via photo prise par la caméra
#avec Python 3
#Auteur: Christian Joseph
#date: 30/03/2021
#www.eagle-robotics.com
import serial
import RPi.GPIO as GPIO
import time
import picamera
import os, sys
import binascii
camera = picamera.PiCamera()
camera.resolution = (256 , 256)
try: #prise de la photo et sauvegarde sur le bureau
camera.start_preview()
time.sleep(5)
camera.capture('/home/pi/Desktop/monimage.jpg') #photo sauvegardée sur le bureau
camera.stop_preview()
finally:
camera.close()
poids = os.stat('/home/pi/Desktop/monimage.jpg')
print(poids.st_size) #taille de la photo
phone = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=1)
phone.write(b'AT(antislash)r(antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSINIT(antislash)r(antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSCURL=(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSCID=1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSPROTO=(antislash)"10.143.156.003(antislash)",8080(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=3,1,(antislash)"CONTYPE(antislash)",(antislash)"GPRS(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=3,1,(antislash)"APN(antislash)",(antislash)"mmsdebitel(antislash)"(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=1,1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=2,1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=0(antislash)r') #on efface le buffer
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=1(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
ATcmd = 'AT+CMMSDOWN=(antislash)"PIC(antislash)",'+ str(poids.st_size) +',20000,(antislash)"monimage.jpg(antislash)"(antislash)r'
phone.write(ATcmd.encode())
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
photo = open ("/home/pi/Desktop/monimage.jpg", "rb")
OctetImage = photo.read(1) #Chargement de la Photo
while OctetImage :
phone.write(OctetImage)
OctetImage = photo.read(1)
time.sleep(3)
phone.write(b'AT+CMMSRECP=(antislash)"+33644757223(antislash)"(antislash)r') #numéro du destinataire
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSVIEW(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSSEND(antislash)r')
time.sleep(10)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=0(antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSTERM(antislash)r')
time.sleep(1)
photo.close()
Nous avons crée un fichier de contact sur une feuille de calcul sur windows et nous l'avons enregistré au format .csv à partir du logiciel gratuit open office. Il est aussi possible d'utiliser excel de Microsoft ou tout autre logiciel et d'enregistrer également le fichier au format .csv . Puis il vous suffira d'importer le fichier dans le Raspberry Pi avec une clé usb, de lancer notre script et le tour est joué.
Nous avons nommé notre fichier "Client.csv" et nous l'avons mis dans le dossier "Clients", lui même contenu dans le dossier "SIM800", lequel est contenu dans le dossier "Documents", lequel est dans le dossier "Pi", et pour finir lequel est dans le dossier "Home", selon le chemin d'accès suivant de notre Raspberry Pi: /home/pi/Documents/SIM800/Clients/clients.csv
Nous souhaitons envoyer notre image qui s'appelle "Robot. jpg" qui se trouve dans un dossier images et dont le chemin d'accès est le suivant: /home/pi/Documents/SIM800/images/robot.jpg
Nous souhaitons aussi envoyer un message texte avec notre MMS lequel se situe dans le dossier "Clients" également selon le chemin d'accès suivant: /home/pi/Documents/SIM800/Clients/message1
Les tailles des fichiers image et texte sont calculés automatiquement dans le script.
Vous aurez juste besoin de faire attention à la taille de votre titre qui doit correspondre au nombre de caractère de votre titre.
Exemple: Si notre Titre est: Paris est magique, alors sa taille est de 17 caractères (Oui Oui les espaces entre les mots comptent aussi!)
Pensez donc à bien définir la taille de votre titre à la commande ATcmd = 'AT+CMMSDOWN=(Antislash)"TITLE(Antislash)",17,10000.
#Programme :Envoi de MMS avec Python 3
#Opérateur: LA POSTE MOBILE
#Auteur: Christian Joseph
#date: 10/07/2020
#www.eagle-robotics.com
import serial
import RPi.GPIO as GPIO
import time
import binascii
import csv
import os, sys
with open('/home/pi/Documents/SIM800/Clients/clients.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print('nom:')
print(row['nom'])
print('prenom:')
print(row['prenom'])
print('numero:')
print(row['telephone'])
print('(Antislash)n')
phone = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=1) #baudrate: 9600 ou 115200
#redémarrer SIM800 après modification du Baudrate
poids = os.stat('/home/pi/Documents/SIM800/Clients/image1.jpg')
print(poids.st_size) #Taille de la photo
poids2 = os.stat('/home/pi/Documents/SIM800/Clients/message1')
print(poids2.st_size)#Taille du message
phone.write(b'AT(Antislash)r(Antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSINIT(Antislash)r(Antislash)n')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSCURL=(Antislash)"mmsdebitel(Antislash)"(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSCID=1(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSPROTO=(Antislash)"10.143.156.003(Antislash)",8080(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
#phone.write(b'AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(Antislash)r')#MMS Lent
phone.write(b'AT+CMMSSENDCFG=1,1,0,0,2,4,2,0(Antislash)r') #MMS Rapide
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=3,1,(Antislash)"CONTYPE(Antislash)",(Antislash)"GPRS(Antislash)"(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=3,1,(Antislash)"APN(Antislash)",(Antislash)"mmsdebitel(Antislash)"(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=1,1(Antislash)r')
time.sleep(2)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+SAPBR=2,1(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=0(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=1(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
ATcmd = 'AT+CMMSDOWN=(Antislash)"PIC(Antislash)",'+ str(poids.st_size) +',350000,(Antislash)"image1.jpg(Antislash)"(Antislash)r'
phone.write(ATcmd.encode())
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
photo = open ("/home/pi/Documents/SIM800/Clients/image1.jpg", "rb") #image à envoyer
OctetImage = photo.read(1)
while OctetImage :
phone.write(OctetImage)
OctetImage = photo.read(1)
time.sleep(3)
ATcmd = 'AT+CMMSDOWN=(Antislash)"TITLE(Antislash)",18,10000(Antislash)r'
phone.write(ATcmd.encode()) #Notre titre fait 18 caractères
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'Nouveau Bras Robot')
time.sleep(1)
ATcmd = 'AT+CMMSDOWN=(Antislash)"TEXT(Antislash)",'+ str(poids2.st_size) +',20000,(Antislash)"message1(Antislash)"(Antislash)r'
phone.write(ATcmd.encode())
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
message = open ("/home/pi/Documents/SIM800/Clients/message1", "rb") #Message à envoyer
OctetMessage2 = message.read(1)
while OctetMessage2 :
phone.write(OctetMessage2)
OctetMessage2 = message.read(1)
time.sleep(3)
#numero du destinataire
dest = 'AT+CMMSRECP=(Antislash)"'+row['telephone']+'(Antislash)"(Antislash)r'
phone.write(dest.encode())
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSVIEW(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSSEND(Antislash)r')
time.sleep(10)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSEDIT=0(Antislash)r')
time.sleep(1)
rep = phone.read(phone.inWaiting())
print(rep)
phone.write(b'AT+CMMSTERM(Antislash)r')
time.sleep(1)
photo.close()
time.sleep(10)
Pour toutes questions ou remarques relatives à ce post, n'hésitez pas à nous écrire à projet@eagle-robotics.com sans oublier les flatteries habituelles et sans lésiner sur les superlatifs bien entendu ("Oh Illustre Maître de la Robotique...etc etc...) sinon votre requête ne sera pas traitée...Maintenant à vous de voir si je plaisante... ou pas!