Le module GSM/GPRS SIM900 donne à un montage le moyen de communiquer par le réseau mobile : envoyer un SMS d’alerte, recevoir un ordre par SMS, ou transmettre des mesures par GPRS. Une carte SIM suffit — ni box, ni réseau local, ni couverture Wi-Fi à proximité. C’est le module des alarmes, des compteurs isolés et des automates installés loin de tout.
La carte porte un module SimCom SIM900 soudé et blindé, un lecteur de carte SIM plein format, un connecteur d’antenne SMA et une liaison série TTL. Deux fils pour parler à l’Arduino, deux pour l’alimentation : tout le reste se fait en commandes AT, les mêmes depuis vingt ans et documentées partout.
À quoi ce module sert dans un montage
- Alerte par SMS — une détection, une coupure de courant, une porte ouverte : le montage envoie un message sur votre téléphone.
- Commande par SMS — vous répondez « ON » et le montage enclenche un relais, une pompe, un éclairage.
- Relevé par GPRS — températures, niveaux, compteurs envoyés vers un serveur, sans Wi-Fi sur place.
- Appel de notification — le module sait aussi appeler : utile quand un SMS tarde à être lu.
- Site isolé — atelier, champ, cave, local technique, chantier : là où aucun réseau local n’arrive.
Caractéristiques techniques
| Module | SimCom SIM900, soudé et blindé sur la carte d’extension |
|---|---|
| Réseau | GSM/GPRS 2G — le SIM900 est documenté en quadri-bande 850 / 900 / 1800 / 1900 MHz ; au Maroc, les bandes exploitées sont 900 et 1800 MHz |
| GPRS | Multi-slot classe 10, station mobile classe B, codages CS-1 à CS-4 |
| Débit de données | Jusqu’à 85,6 kbit/s en réception, 42,8 kbit/s en émission |
| Puissance d’émission | Classe 4 (2 W) en 900 MHz, classe 1 (1 W) en 1800 MHz |
| Commandes | AT — GSM 07.07 et 07.05, extensions SimCom, pile TCP/IP intégrée |
| Liaison série | TTL, compatible 3,3 V et 5 V — 9600 bps par défaut |
| Alimentation de la carte | 5 V continu, 1 A minimum : les pointes d’émission atteignent 2 A |
| Carte SIM | Support plein format, verrou coulissant |
| Antenne | Connecteur SMA femelle — l’antenne livrée s’y visse |
| Consommation au repos | Quelques milliampères ; environ 1,5 mA en veille avec la commande AT+CSCLK=1 |
| Température de service | −40 °C à +85 °C |
| Dimensions du module | 24 × 24 × 3 mm, 3,4 g |
Brochage et alimentation
VCC / 5V | Alimentation de la carte : 5 V continu, 1 A minimum. À prendre sur une alimentation dédiée, pas sur la broche 5 V de l’Arduino. |
|---|---|
GND | Masse du module. À relier à la masse de l’alimentation et à celle de l’Arduino : la même référence pour les deux. |
TXD | Sortie série du module → RX de l’Arduino, D10 dans l’exemple plus bas. |
RXD | Entrée série du module → TX de l’Arduino, D11. |
| Antenne | À visser sur le connecteur SMA avant la mise sous tension. |
| Carte SIM | À insérer dans son support, verrou poussé jusqu’au contact. |
Le croisement des deux lignes série est normal : la sortie de l’un va sur l’entrée de l’autre. C’est la première chose à contrôler devant un module qui reste muet, juste avant la vitesse de liaison. Sur plusieurs cartes de cette famille, la sérigraphie annonce deux jeux de broches série, l’un en 5 V et l’autre en 3,3 V : repérez celui qui correspond à votre microcontrôleur, la logique du module reste la même.
Alimentation : le point qui décide
Le module se contente de quelques milliampères au repos, mais il appelle jusqu’à 2 A par brèves impulsions pendant l’émission. Une source trop faible se traduit toujours par le même symptôme : le module redémarre ou perd le réseau au moment précis de l’envoi, et l’on croit à tort à un problème de code.
Deux règles suffisent. La première : une alimentation 5 V d’au moins 1 A, comme l’Alimentation 5 V 2A, plutôt que la sortie 5 V d’une carte alimentée par USB. La seconde : une masse commune entre cette alimentation, le module et le microcontrôleur, sans quoi la liaison série ne veut rien dire.
Si vous devez alimenter le montage sur batterie, ajoutez un condensateur électrolytique de 1000 µF au plus près du module : il fournit le courant des impulsions et la batterie ne voit plus que la moyenne.
Mise en service en quatre étapes
- La carte SIM — prépayée ou abonnée, mais surtout sans code PIN : le module ne saisit aucun code au démarrage. Un support mal verrouillé produit exactement le même symptôme qu’une carte absente.
- L’antenne — vissée sur le connecteur SMA avant la mise sous tension. Un module allumé sans antenne n’accroche rien, et l’antenne doit rester éloignée d’un plan métallique ou d’un boîtier fermé.
- L’alimentation — 5 V, 1 A minimum, masse commune avec l’Arduino.
- La liaison série —
TXDdu module versRXde l’Arduino,RXDdu module versTXde l’Arduino, à 9600 bps.
Ce que dit la LED d’état
| Clignotement lent | Environ 800 ms éteinte : le module cherche le réseau. Vérifiez la SIM, l’antenne et la couverture 2G. |
|---|---|
| Clignotement long | Environ 3 secondes éteinte : le module est enregistré sur le réseau, tout va bien. |
| Clignotement rapide | Environ 300 ms éteinte : une session GPRS est établie. |
Une LED rapide alors que la carte SIM est neuve et l’antenne en place signifie presque toujours une couverture 2G insuffisante à l’endroit du montage : c’est la seule cause qu’aucune correction de code ne peut lever.
Vérifier le module depuis un ordinateur
Avant d’écrire la moindre ligne de programme, la meilleure mise au point consiste à parler au module depuis un PC. Un convertisseur USB vers TTL suffit : sa ligne de réception sur le TXD du module, sa ligne d’émission sur le RXD, la masse en commun, et le module alimenté par son alimentation 5 V.
Ouvrez ensuite un terminal série à 9600 bps, avec renvoi chariot à la fin de chaque ligne :
ATdoit répondreOK. Sans ceOK, le problème est dans le câblage ou l’alimentation, pas dans le programme.AT+CPIN?répondREADYquand la carte SIM est lue correctement.AT+CSQdonne la qualité du signal : au-dessus de 10, l’installation est confortable.AT+CREG?répond1ou5quand le module est enregistré sur le réseau de votre opérateur.
Ces quatre commandes séparent à elles seules les trois familles de panne : matérielle, carte SIM, couverture réseau. Toute la mise au point du montage s’appuie ensuite dessus.
Mini-projet : allumer une lampe par SMS
Le montage tient sur une plaque d’essai : l’Arduino guette les SMS non lus, et un message contenant ON ou OFF bascule un module relais. C’est la commande à distance la plus simple à mettre en œuvre sur un site sans Internet.
Ce qu’il faut
| Le cerveau | Uno R3 + câble USB |
|---|---|
| La communication | Le module SIM900 de cette page, avec une carte SIM active |
| L’interrupteur | Module 1 relais 5 V |
| Le support | Plaque d’essai 830 points |
| Les liaisons | 10 × fil mâle-femelle |
| L’alimentation | Une alimentation 5 V d’au moins 1 A pour le module, masse commune avec l’Arduino |
Le câblage
Module GSM VCC | → alimentation 5 V (1 A minimum) |
|---|---|
Module GSM GND | → masse de l’alimentation et GND de l’Arduino |
Module GSM TXD | → Arduino D10 |
Module GSM RXD | → Arduino D11 |
Relais VCC | → Arduino 5V |
Relais GND | → Arduino GND |
Relais IN | → Arduino D7 |
La bobine du relais consomme quelques dizaines de milliampères : le 5 V de l’Arduino suffit largement de ce côté. Le module GSM, lui, garde son alimentation à part — c’est le seul à en avoir besoin.
Le programme
À téléverser sur la carte après avoir remplacé le numéro par le vôtre :
/*
* Lampe commandee par SMS - module GSM/GPRS SIM900
* Carte : Arduino Uno R3
* Montage : module relais sur D7, module GSM en liaison serie logicielle sur D10 et D11
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "SoftwareSerial.h"
const byte PIN_RELAIS = 7; // entree IN du module relais
const byte PIN_GSM_RX = 10; // RX de l'Arduino : recoit le TXD du module
const byte PIN_GSM_TX = 11; // TX de l'Arduino : envoie vers le RXD du module
const byte GUILLEMET = 34; // 34 = code ASCII du guillemet
const byte RETOUR = 13; // 13 = code ASCII du retour chariot
const byte SAUT_LIGNE = 10; // 10 = code ASCII du saut de ligne
const char NUMERO[] = "2126XXXXXXXX"; // votre numero, format international
SoftwareSerial gsm(PIN_GSM_RX, PIN_GSM_TX);
bool lampeAllumee = false;
// Envoie une commande AT, puis vide ce que le module a repondu.
void commander(const char *at) {
gsm.print(at);
gsm.write(RETOUR);
delay(300);
while (gsm.available() != 0) {
gsm.read();
}
}
// Envoie un SMS au numero enregistre plus haut (mode texte).
void envoyerSms(const char *texte) {
gsm.print("AT+CMGS=");
gsm.write(GUILLEMET);
gsm.print(NUMERO);
gsm.write(GUILLEMET);
gsm.write(RETOUR);
delay(1000);
gsm.print(texte);
gsm.write(26); // 26 = code ASCII de Ctrl+Z : envoi
delay(5000);
}
void setup() {
pinMode(PIN_RELAIS, OUTPUT);
digitalWrite(PIN_RELAIS, LOW); // lampe eteinte au demarrage
Serial.begin(9600);
gsm.begin(9600);
delay(10000); // le temps de s'enregistrer sur le reseau
commander("AT+CMGF=1"); // SMS en mode texte, plus simple que le mode PDU
}
void loop() {
// On demande la liste des messages non lus : AT+CMGL suivi de REC UNREAD.
String liste = "AT+CMGL=";
liste += (char)GUILLEMET;
liste += "REC UNREAD";
liste += (char)GUILLEMET;
gsm.print(liste);
gsm.write(RETOUR);
String reponse = "";
for (byte i = 0; i != 40; i++) { // 40 fois 100 ms : le temps de la reponse
while (gsm.available() != 0) {
reponse += (char)gsm.read();
}
delay(100);
}
Serial.println(reponse); // de quoi suivre ce qui se passe
int entete = reponse.indexOf("CMGL: ");
if (entete == -1) { // aucun message non lu
delay(5000);
return;
}
// Le corps du message suit la ligne d'entete du module.
int finEntete = reponse.indexOf(SAUT_LIGNE, entete);
if (finEntete == -1) { // reponse incomplete : on recommencera
delay(5000);
return;
}
int finCorps = reponse.indexOf(SAUT_LIGNE, finEntete + 1);
if (finCorps == -1) {
finCorps = reponse.length();
}
String corps = reponse.substring(finEntete + 1, finCorps);
corps.trim();
if (corps == "ON") {
lampeAllumee = true;
envoyerSms("Lampe allumee");
} else if (corps == "OFF") {
lampeAllumee = false;
envoyerSms("Lampe eteinte");
}
// Certains modules relais se declenchent sur un niveau bas : dans ce cas,
// remplacer HIGH par LOW et LOW par HIGH dans la ligne suivante.
digitalWrite(PIN_RELAIS, lampeAllumee ? HIGH : LOW);
// On efface les messages lus, sinon la memoire de la carte SIM se remplit.
String effacer = "AT+CMGDA=";
effacer += (char)GUILLEMET;
effacer += "ALL";
effacer += (char)GUILLEMET;
commander(effacer);
delay(5000);
}Comment ça marche
- La commande
AT+CMGLavec l’argumentREC UNREADdemande au module la liste des messages non lus. C’est plus simple à traiter que la notification spontanée : le programme garde la main et lit la réponse d’un bloc. - La réponse du module commence par une ligne d’en-tête, puis le texte du message. Le programme coupe à la ligne suivante plutôt que de chercher des guillemets : un message contenant lui-même des guillemets ne le trompe pas.
- Le corps du message est comparé à
ONetOFF, exactement. Un message quelconque est ignoré sans rien changer à l’état de la lampe. - Le module répond par un SMS au numéro enregistré dans le programme : on sait ainsi que l’ordre a été exécuté, même depuis une autre pièce.
- À la fin de chaque cycle, tous les messages sont effacés. Sans cela la mémoire de la carte SIM se remplit, et le module finit par refuser les nouveaux messages.
- Les caractères de commande sont écrits par leur code, comme le guillemet (34) et le retour chariot (13) : le programme ne contient aucun caractère d’échappement, et reste identique d’un éditeur à l’autre.
Prudence avec le relais. Le montage décrit ici convient à une charge en basse tension : une lampe 12 V, une bande de LED, un ventilateur. Les contacts du relais peuvent aussi couper du 230 V, mais cette partie doit être câblée avec des fils adaptés, un boîtier fermé et les précautions d’usage : ne la réalisez que si vous êtes à l’aise avec le secteur, et ne laissez jamais les contacts accessibles.
Variante : le module GSM SIM900A
La boutique référence aussi un Module GSM SIM900A, l’autre référence de cette famille. Le brochage, l’alimentation, les commandes AT et le programme de cette page s’y appliquent de la même façon ; c’est la couverture radio qui dépend de la référence du module, et il faut donc choisir celle qui correspond au pays d’installation.
Questions fréquentes
Mon module ne répond rien. Par quoi commencer ?
Trois causes, dans l’ordre : une alimentation qui ne fournit pas 1 A, un croisement des lignes série non respecté (TXD du module vers RX de l’Arduino), et une masse qui n’est pas commune entre l’alimentation et la carte. Contrôlez ensuite la vitesse, 9600 bps, et testez le module depuis un ordinateur avec un convertisseur USB-TTL : la commande AT doit répondre OK.
Faut-il une carte SIM particulière ?
Une carte prépayée ordinaire suffit pour les SMS, et un forfait avec données n’est nécessaire que pour le GPRS. Retirez la demande de code PIN depuis un téléphone avant de l’installer : le module ne saisit aucun code au démarrage. Une nano-SIM placée dans un adaptateur fonctionne, à condition que l’ensemble tienne fermement dans son support.
Ce module fonctionne-t-il hors du Maroc ?
Oui, dans tous les pays où la 2G est encore exploitée sur 900 ou 1800 MHz — l’Europe, une grande partie de l’Afrique et de l’Asie. C’est la couverture du réseau qui décide, pas le module : vérifiez auprès de l’opérateur que la 2G est bien active à l’endroit où l’installation doit vivre, car c’est la seule cause de panne qu’aucun réglage ne corrige.
Peut-on utiliser le GPRS plutôt que les SMS ?
Oui, le module dispose d’une pile TCP/IP intégrée : il ouvre une connexion de données et envoie ses mesures vers un serveur, exactement comme le ferait un module Wi-Fi. Cela demande une carte SIM avec données actives et un peu plus de code, mais le câblage reste celui de cette page.
Ce module sait-il téléphoner ?
Le circuit SIM900 gère aussi la voix, mais cette carte est faite pour les SMS et les données : elle n’a ni micro ni haut-parleur, et c’est l’usage que nous conseillons. Pour un interphone, mieux vaut un module prévu pour cela.
Combien de temps pour qu’un SMS parte ?
Comptez 5 à 20 secondes après la mise sous tension pour l’enregistrement sur le réseau, puis quelques secondes par message. Le programme attend 10 secondes au démarrage : si votre réseau est lent, augmentez ce délai, vous le verrez à la LED d’état qui passe au clignotement long.
À combiner avec
Le module a besoin d’une carte SIM, d’une antenne et d’une alimentation, et rien de tout cela ne vient de lui. Le relais intelligent par GSM est à considérer si vous préférez une solution prête à l’emploi, commandée par SMS sans écrire de programme. Pour les liaisons, les alimentations, les capteurs et le reste du montage, tout ce qui accompagne ce module se trouve dans la même catégorie que lui, et les deux fiches de cette famille — SIM900 et SIM900A — se complètent.










