Meilleures ventes

View All

Facebook Timeline

Appels, SMS et MMS avec le module SIM900 et Arduino

Posted On: mai 20, 2020

Seen by: 363

Categories: GSM/GPRS

Author: Christian Joseph

Tags: Sim900 , Arduino Mega , GSM , GPRS , MMS , appels , Arduino , carte SD , Micro SD , SMS

INTRODUCTION:

Le SIM900 est un module GSM/GPRS, lequel combiné à une carte Arduino ou Raspberry Pi permet d'emettre ou de recevoir des appels téléphoniques, des SMS, et des MMS avec des images stockées dans une carte SD ou micro-SD.

Le SIM900 est utilisé dans des applications de contrôle à distance, de domotique, et aussi de sécurité.

Présentation du module:

SIM900 Pinout

Descrption arrière Sim900

Etape 1: Liste des composants

Etape 2: Shémas de câblage

Arduino SIM900 wiring

ARDUINO MEGASIM900
TX2RX
RX2TX
GNDGND

ARDUINO MEGAMODULE SD
GNDGND
5VVCC
50MISO
51MOSI
52SCK
53CS

Il faut impérativement installer la carte SD ou micro SD et la carte SIM avant la mise sous tension. Il est préférable que le code Pin de la carte SIM soit désactivé, mais il est possible de dévérouiller le code Pin avec le programme Arduino. A la mise sous tension, il faut appuyer au minimum 2 secondes le "Switch ON/OFF" du module SIM900. Si le code Pin est désactivé, la" Led état réseau" clignote toutes les 3 secondes au bout d'un moment, dès que le module SIM900 a terminé son initialisation; autrement dès que le code Pin est desactivé via le programme Arduino, la led clignote toutes les 3 secondes, ce qui signifie que le module SIM900 est bien connecté au réseau mobile.

Etape 3: Programme Arduino

Le programme suivant permet de tester les fonctions du module SIM900, comme l'envoi des MMS (ici avec carte SIM Laposte mobile!), et une carte SD ou micro-SD contenant l'image à envoyer.

Une fois le programme téléchatgé dans le carte Arduino, il faut ouvrir le Terminal Arduino afin de lui envoyer les commandes servant à activer les différentes fonctions du module SIM900: 1,2,3,4,5,6,7,8,9,d,p,s

Il faut aussi remplacer "(antislash)" par son symbole clavier, étant donné que l'éditeur Blog ne le prend pas en compte.(il le considère comme du code html!)

/*
Projet: APPELS SMS MMS avec SIM900 et Carte SD
Auteur: Christian Joseph
Board: Arduino Mega 2560
Date: 20 May 2020
Website: https://www.eagle-robotics.com
*/

#include "SD.h"

#define PWR 31
#define CS 53

File dataFile;
int i;
unsigned char data=0;
String message = "Bonjour à tous";

void setup()
{
pinMode(PWR,OUTPUT);
pinMode(CS,OUTPUT);
Serial.begin(9600);
Serial2.begin(115200);
digitalWrite(PWR,LOW);
delay(10);
digitalWrite(PWR,HIGH);
delay(10);

if (!SD.begin(CS)) Serial.println("initialisation non reussie!");
else Serial.println("initialisation ok.");
}

void loop()
{ //Entrer des valeurs depuis le moniteur série pour activer les fonctions du SIM900:
//1,2,3,4,5,6,7,8,9,d,p,s
if(Serial2.available())
{
while(Serial2.available())
{
data=Serial2.read();
Serial.write(data);
}
data=0;
}

if(Serial.available())
{
data=Serial.read();
}
if(data=='p')
{
Serial2.print("AT+CPIN=1234(antislash)r"); //Faire le code Pin carte SIM si activé
// Si code Pin désactivé, ignorer// Mettre le code pin à la place de 1234 si différent
}
if(data=='1')
{
Serial2.print("AT+CGMI(antislash)r"); // Identification du fabricant
}
if(data=='2')
{
Serial2.print("AT+CGMM(antislash)r"); //Identification du modèle
}

if(data=='3')
{
Serial2.print("AT+CGMR(antislash)r"); //Version du Firmware
}

if(data=='4')
{
Serial2.print("AT+CGSN(antislash)r"); //Numéro IMEI
}

if(data=='5')
{
Serial2.print("ATD+33644757223;(antislash)r"); //Appels (ATD+numero à appeler)
}

if(data=='6')
{
Serial2.print("ATH(antislash)r"); //Racrocher un appel
}

if(data=='7') //Envoyer un SMS
{
Serial2.println("AT");
delay(500);
Serial2.print("AT+CMGF=1(antislash)r"); //Activation mode Texte
delay(500);
Serial2.println("AT+CMGS=(antislash)"+33641363164(antislash)""); //Numéro du destinataire
delay(500);
Serial2.print(message);//Message à envoyer
//Serial2.print("bonjour ceci est mon message"); //2eme methode pour envoyer un message
delay(500);
Serial2.write((char)26); //Envoi du message
}

if(data=='8')
{
Serial2.print("AT+CMGR=1(antislash)r"); //Lire message
}

if(data=='9')
{
Serial2.print("AT+CMGD=1,0(antislash)r"); //Effacer un message
}
if(data=='d')
{
Serial2.print("ATDT(antislash)r"); //Décrocher un appel
}

if(data=='s') sendMMS(); //Envoyer un MMS
data=0;
}

void sendMMS() //Envoi de MMS avec paramètre APN La poste mobile
//Regarder sur le site des opérateurs pour les paramètres APN, MMSCURL, CMMSPROTO
{
Serial2.println("AT+CMMSINIT");
delay(1000);//100
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSCURL=(antislash)"mmsdebitel(antislash)"(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSCID=1(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSPROTO=(antislash)"10.143.156.003(antislash)",8080(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSSENDCFG=6,3,0,0,2,4,1,0(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+SAPBR=3,1,(antislash)"CONTYPE(antislash)",(antislash)"GPRS(antislash)"(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+SAPBR=3,1,(antislash)"APN(antislash)",(antislash)"mmsdebitel(antislash)"(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+SAPBR=1,1(antislash)r");
delay(4000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+SAPBR=2,1(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSEDIT=1(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSDOWN=(antislash)"PIC(antislash)",6651,20000,(antislash)"pic777.jpg(antislash)"(antislash)r"); //Chargement de l'image "pic777.jpg" de taille 6651 octets stockée dans la carte SD
//20000 représente le temps qu'on laisse au système pour télécharger l'image

delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}

dataFile=SD.open("pic777.jpg"); //Téléchargement de l'image depuis la carte SD ou micro SD vers mémoire du SIM900
i=0;
if(dataFile)
{
while(dataFile.available())
{
data=dataFile.read();
if(data<0x10) Serial.print("0");
Serial.print(data,HEX);
i++;
if((i%40)==0) Serial.println();
Serial2.write(data);
}
dataFile.close();
}
else
{
Serial.println("error opening test.jpg");
}

delay(1000);
Serial2.print("AT+CMMSRECP=(antislash)"+33644757223(antislash)"(antislash)r"); //Numéro du destinataire du MMS
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSVIEW(antislash)r");
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSSEND(antislash)r"); //Envoi du MMS
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSEDIT=0(antislash)r");
delay(100);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
Serial2.print("AT+CMMSTERM(antislash)r"); // Fin du MMS
delay(1000);
if(Serial2.available())
{
while(Serial2.available()) Serial.write(Serial2.read());
}
}Sim900 Terminal Arduino

Pour toute question relative à ce tutoriel, ou si vous désirez obtenirt le code complet, n'hésitez pas à nous contacter à projet@eagle-robotics.com.