Meilleures ventes

View All

Facebook Timeline

Appels, SMS et MMS avec Raspberry Pi , le SIM800, le SIM800C ou SIM900 et Python

Posted On: juil. 10, 2020

Seen by: 2976

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.

1. Présentation:

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 et micro SIM 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.

Sim900-Raspberry-Pi-wiring

La Connection est plutôt simple avec 3 fils comme lors du tutoriel avec Arduino:

SIM900RASPi 4
GNDGND
RXGPIO15
TXGPIO14

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:

SIM800C pour Raspberry Pi 4 et 3

Module SIM800C pour le Raspberry Pi 4

SIM800 V2.3 - pour Raspberry Pi

SIM800 V2.3 HAT pour Raspberry Pi 4 et 3

L'avantage des modules SIM800 et SIM800C est qu'ils ne nécessitent aucun cablâge 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. En cas de coupure momentanée du courant, les modules SIM800 et SIM800C redémarrent instantanément en même temps que le Raspberry Pi lors de la remise sous tension, tandis que le SIM900 nécessite l'appui sur son bouton ON/OFF pour redémarrer. Par contre le SIM900 à plus de fonctionnalité que les 2 autres modules, et intègre même l'envoi de Fax.

3.Programmation:

Alors avant de programmer, il faut d'abord activer le port série de votre Raspberry Pi:

  1. Ouvrez le terminal du Raspberry Pi
  2. Tapez la commande: sudo raspi-config
  3. Dans le menu qui apparaît allez sur 'Interfacing Options' + Entrée
  4. Ensuite sur 'Serial' + Entrée
  5. A la question 'would you like a login shell to be accessible over serial', vous mettez 'non' + Entrée
  6. A la question 'would you like the serial port hardware to be enabled?', vous mettez 'oui' + Entrée 2 fois
  7. Puis vous redémarrez votre raspberry pi afin que les modifications soient prises en compte.

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=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')
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=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')
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) 

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.

ENVOI DE MMS:

Attention: Les modules SIM800, SIM800C et SIM900 ne sont pas configurés de base pour l'envoi de MMS en France. C'est pourquoi nous faisons la mise à jour du firmware de nos modules SIM800, SIM800C et  SIM900  afin de les rendre compatibles pour les MMS avec les réseaux France et Europe.


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

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

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(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(4)
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') #ACTIVATION MODE EDITION
time.sleep(1)
rep = phone.read(phone.inWaiting())
print (rep)



ATcmd = '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.


phone.write(ATcmd.encode())
time.sleep(1)

photo = open ("/home/pi/Desktop/mon-image.jpg", "rb")
dataphoto = photo.read(1)

while dataphoto:#Attention à l'indentation ici

                       phone.write(dataphoto)

                       dataphoto = photo.read(1)
time.sleep(3)


phone.write(b'AT+CMMSRECP=(antislash)"+33644757223(antislash)"(antislash)r')
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(1)
rep = phone.read(phone.inWaiting())
print (rep)

phone.write(b'AT+CMMSTERM(antislash)r')
time.sleep(1)

rep = phone.read(phone.inWaiting())
print (rep)

photo.close()



Dans notre pack Raspberry-SIM800 ou dans notre carte micro sd Raspbian-Eagle, vous pourrez retrouver toutes ces procédures réalisées ci-dessus, ainsi que les codes pour l'envoi de MMS à partir d'une photo prise par la caméra, ou encore l'envoi de MMS et SMS de manière automatique à une liste de contacts contenue dans un fichier csv. (voir photos ci-dessous).

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

Liste clients Raspberry pi

Liste clients

Pour toutes questions ou remarques relatives à ce post, n'hésitez pas à nous écrire à projet@eagle-robotics.com.