Comment brancher et utiliser un module GSM SIM800L avec le Raspberry Pi (sans batterie).
Le SIM800L est un modem GSM/GPRS très utilisé en électronique en raison de son prix très faible et de sa large disponibilité. C’est un moyen abordable d’envoyer des SMS avec un Raspberry Pi ou un Arduino, de se connecter en 3G ou d’implanter un GPS.
Pourtant, il est presque impossible de trouver des explications satisfaisantes sur son utilisation et particulièrement sur son branchement.
Dans ce tutoriel nous allons donc voir comment brancher et alimenter un SIM800L depuis un Raspberry (notez que cela fonctionne aussi pour un Arduino), sans alimentation externe ni batterie !
Le matériel nécessaire pour brancher votre SIM800L à votre Raspberry.
Nous rentrerons dans les détails et les explications plus loin dans ce tutoriel, mais sachez que pour relier un SIM800L à un Raspberry un peu de matériel est nécessaire. Ainsi, vous aurez besoin :
- D’un module SIM800L.
- Un fer à souder pour assembler votre SIM800L si elle ne l’est pas déjà.
- D’une breadboard, d’un condensateur 5 V, 100 µF ou plus, d’une diode 1N4007, de câbles Dupont. Vous pourriez achetez chaque élément seul, mais vous devriez en fait acheter des dizaines de condensateurs et diodes juste pour amortir les frais de port. Je pense donc que le plus simple est de prendre un kit d’électronique comme celui-ci qui contient tout ce que nous venons de citer.
Bien entendu, vous devrez également disposer d’un Raspberry avec raspbian installé et d’une carte SIM avec un abonnement. À noter, la carte SIM doit-être au format micro sim. Si la votre est d’un format plus petit (nano), il vous faudra un adaptateur.
Maintenant, passons aux explications et à la pratique.
Pas le temps ou l’envie de lire les explications ? Passez directement à la partie « En pratique… ».
La théorie, comment utiliser un SIM800L avec un Raspberry Pi ?
Le SIM800L est un modem. C’est lui qui se charge de s’enregistrer auprès du réseau de votre opérateur, etc. Globalement il se comporte comme un téléphone que vous pourriez contrôler directement depuis votre Raspberry.
Pour pouvoir contrôler le SIM800L, depuis le Raspberry, vous allez devoir fournir une alimentation au premier et connecter physiquement et logiciellement les deux en utilisant un port TTL, plus souvent appelé port ou interface série.
À partir de là vous pourrez contrôler le SIM800L en envoyant sur le port série des commandes dites Hayes – on parle en fait plus souvent de commandes AT – qui sont des commandes spécifiques aux fonctions d’un modem. Par exemple, envoyer un SMS, entrer un code PIN, vérifier l’état du réseau, et bien d’autres choses encore !
En théorie, pour utiliser un SIM800L avec le Raspberry Pi vous devez donc faire comme ceci :
- Brancher le VDD du SIM800L à un GPIO fournissant du courant sur le Raspberry.
- Connecter le GND du SIM800L à un GPIO GND sur le Raspberry.
- Relier le TXD du SIM800L au RXD du Raspberry.
- Relier le RXD du Raspberry au TXD du SIM800L.
- Envoyer et recevoir des données avec des commandes AT sur le port série.
Seulement voilà, tout ça c’est la théorie, mais vous allez voir qu’en pratique les choses sont un peu plus compliquées…
La réalité, pourquoi est-il difficile de brancher un SIM800L ?
Si la théorie semble simple, en réalité vous trouverez assez peu de tutoriels sur internet vous expliquant comment utiliser le SIM800L avec un Raspberry. Pire, vous trouverez essentiellement des tutoriels incorrects qui, au mieux, rendront votre installation complètement instable, au pire, abîmeront votre SIM800L.
Mais alors, comment se fait-il qu’il n’y ait pas plus de ressources de qualité disponibles pour un module si connu ? Parce-que le SIM800L est particulièrement difficile à alimenter et sensible.
Un module conçu pour les téléphones et les batteries.
À l’origine le SIM800L a été conçu pour être utilisé dans des téléphones par des constructeurs. Son utilisation en électronique grand public est bien plus récente et n’a pas du tout été envisagée par le fabricant.
Conséquence de son utilisation au sein de téléphones, le module est pensé pour être alimenté avec des batteries lithium-ion, lesquelles proposent des tensions d’environ 3,6 à 3,7 volts. Cette particularité va nous poser un premier problème, car en électronique numérique on utilise généralement 3,3 volts ou 5 volts, mais pas 3,6 volts.
Un module gourmand en énergie.
Second problème, le SIM800L effectue des opérations radio qui demandent de gros pics de courant très ponctuels. Typiquement les opérations en cause sont l’enregistrement sur le réseau de l’opérateur, l’envoi de messages, etc. Si durant ces phases le module n’obtient pas le courant nécessaire son comportement devient complètement imprédictible, allant du message d’erreur au redémarrage en passant par la perte de réseau.
Il se trouve hélas que les alimentations de façon générale et les ports GPIO du Raspberry Pi en particulier ont beaucoup de mal à répondre à ce genre de pics de consommation.
En fait, la quantité d’énergie consommée est si grande et sur une si courte durée qu’utiliser des câbles d’alimentation trop longs et trop fins peut suffire à faire planter le module ! C’est d’ailleurs typiquement le cas si vous branchez plusieurs câbles Dupont en série.
Rassurez-vous, nous allons vous expliquer comment résoudre ces deux problèmes !
En pratique, comment alimenter un SIM800L directement depuis un Raspberry ?
Nous avons donc vu que deux problèmes se posent à nous pour alimenter un SIM800L depuis un Raspberry : une tension incompatible et des pics de consommation électrique.
Pour commencer, nous allons nous attaquer au problème de tension.
Diminuer la tension fournie par le Raspberry Pi.
Si on lit la datasheet, c’est-à-dire la fiche technique, du SIM800L, on voit que le constructeur indique une tension d’alimentation comprise en 3,4 et 4,4 volts, avec une tension optimale de 4 volts.
Le Raspberry Pi lui peut fournir deux tensions, 3,3 et 5 volts. Nous devrions donc augmenter un peu notre tension ou la diminuer.
Éliminons la première possibilité qui est trop compliquée à mettre en œuvre et penchons-nous sur la deuxième. Nous cherchons donc un moyen fiable, simple et très peu cher de diminuer une tension d’au moins 0,6 volts, sans diminuer l’intensité du courant (ampères). Coup de chance, il se trouve qu’il existe un composant électronique qui fait exactement ça, et qu’en plus ce composant est tellement répandu qu’absolument tous les électroniciens le connaissent : la diode.
Les diodes sont principalement connues pour laisser passer le courant dans un seul sens. Mais une de leur caractéristique est également de provoquer une chute de tension, laquelle est estimée pour les diodes au silicium à 0,7 volts.
Il nous suffit donc d’insérer une diode au silicium, nous prendrons une 1N4007, entre le GPIO 5 volts de notre Pi et le PIN VDD (alimentation) de notre SIM800L. Et voilà, nous avons une tension de 4,3 volts, juste ce qu’il nous faut.
Fournir une source de courant pouvant répondre aux pics de consommation.
Maintenant que nous avons résolu notre problème de tension, reste notre problème de pics de consommation. Cette fois il nous faudrait un composant nous permettant de « stocker du courant » et de le fournir de façon très rapide quand le SIM800L en a besoin. Là encore coup de chance, ça existe et ça s’appelle un condensateur !
Les condensateurs sont utilisés dans de nombreux cas, mais l’une des utilisation les plus connues est la stabilisation d’alimentation. Ils se chargent quand il y a trop de courant et se décharge quand il en manque.
Nous allons donc insérer un condensateur électrolytique (on prendra au minimum un 100 µF 5 V, si on a plus en µF ou en volts aucun problème) en parallèle des pins VDD et GND de notre SIM800L.
Le montage complet.
Maintenant que nous avons résolu nos problèmes, voyons à quoi ressemble notre montage complet avant de tout tester en envoyant un SMS.
Pour maintenir tous nos composants en place et les relier entre eux nous allons utiliser une breadboard et des câbles Dupont.
Voici donc le schéma de branchement final, le fil rouge va au VDD, le noir au GND.
Quelques remarques concernant le montage :
- Effectuez les branchement Raspberry éteinte et non branchée, ne la branchez qu’après avoir tout vérifié et être sûr que votre montage est bon.
- Prenez bien garde à brancher le condensateur le plus près possible des pins VDD et GND du SIM800L, idéalement comme sur le schéma.
- Le condensateur est un composant polarisé, il doit être branché dans un sens précis, anode sur le VDD, cathode sur le GND. La cathode est marquée par une bande blanche sur le coté.
- Comme le condensateur, la diode est un composant polarisé, là encore la cathode est marquée par une bande blanche.
Une fois le montage terminé vous allez pouvoir insérer la carte SIM dans l’emplacement prévu sur le SIM800L.
Faîtes bien attention au sens, ce n’est absolument pas intuitif. Vous devez rentrez la carte coté contacts contre le circuit imprimé, le coin coupé en biais vers l’ouverture (il dépasse un peu). Si vous rentrez la carte à l’envers vous aurez une erreur type SIM not inserted
en utilisant le module.
Une fois le montage fini, allumez votre Raspberry Pi, nous allons pouvoir tester en envoyant un SMS !
Envoyer votre premier SMS depuis le Raspberry avec un SIM800L.
Pour finir ce tutoriel, nous allons envoyer un premier SMS pour vérifier que tout fonctionne. Nous n’irons pas plus loin quant à l’utilisation du SIM800L, sachez néanmoins qu’il propose beaucoup d’autres fonctionnalités. Pour une utilisation plus poussée reportez-vous au guide des commandes AT pour la SIM800.
Pour commencer, vous allez devoir suivre notre tutoriel pour activer le port série du Raspberry Pi. Une fois que vous aurez fini d’activer le port série nous pourrons nous connecter à la SIM800L via le port série.
Pour cela, ouvrez une connexion sur /dev/serial0
avec minicom en utilisant la ligne de commande ci-dessous :
sudo minicom -b 115000 -o -D /dev/serial0
Tapez la commande AT
(souvent la premières ligne ne s’affiche pas quand on tape, c’est normal) puis faites un retour à la ligne pour valider. Vous devriez avoir un message de réponse OK
.
Maintenant nous allons vérifier que la carte SIM est bien débloquée (le code PIN est entré). Pour cela tapez la commande AT+CPIN?
. Si la carte est débloquée vous devriez avoir une réponse :
+CPIN: READY
OK
Si vous avez une réponse comme celle ci-dessous c’est que vous devez entrez le code PIN de votre carte.
+CPIN: SIM PIN
OK
Pour cela utilisez la commande AT+CPIN=0000
en remplaçant 0000
par votre propre code PIN. Vous devriez alors avoir une réponse sous la forme :
AT+CPIN=0000
OK
+CPIN: READY
SMS Ready
Call Ready
C’est bon, vous êtes connecté au réseau de votre opérateur. Il ne nous reste plus qu’à envoyer un SMS. Pour cela utilisez les commandes AT+CMGF=1
pour activer le mode texte (ça nous permet d’écrire le SMS dans un format compréhensible pour un humain), puis AT+CMGS="+33612345678"
en remplaçant +33612345678
par le numéro auquel vous souhaitez envoyer le SMS.
Un caractère >
va apparaître, tapez votre SMS puis une fois que vous avez fini, faîtes Ctrl+Z
.
Au final vous devriez avoir quelque chose de la forme suivante :
AT+CMGF=1
OK
AT+CMGS="+33612345678"
> Mon premier SMS avec un SIM800L
+CMGS: 29
OK
Et voilà, vous avez envoyé votre premier SMS avec un Raspberry Pi et un SIM800L !
Comme vous pouvez le constater l’usage au quotidien directement avec les commandes AT n’est pas forcément très pratique, mais rassurez-vous, des logiciels existent pour vous simplifier la vie, et nous en parlerons d’ailleurs très prochainement dans un autre tutoriel !
Aller plus loin avec RaspiSMS pour envoyer des SMS depuis un Raspberry Pi.
Dans ce tutoriel vous avez découvert comment utiliser un module SIM800L pour envoyer des SMS depuis un Raspberry Pi.
Si cette initiation peut vous permettre d’enrichir de petits projets amateurs, elle risque néanmoins de rapidement atteindre ses limites. En effet, dans un cadre plus large ou plus professionnel, vous aurez probablement besoin d’une interface complète pour gérer vos messages et vos contacts, ainsi que d’une architecture plus robuste et moins sujette aux pannes.
Et bien sachez que depuis plusieurs années nous développons RaspiSMS, un logiciel libre pour l’envoi et la réception de messages par internet.
Grâce à RaspiSMS, vous pouvez intégrer simplement l’envoi de SMS par internet au sein de vos projets, qu’ils soient amateurs, associatifs ou professionnels. RaspiSMS est open source, et vous pouvez choisir entre l’héberger vous même, ou bien utiliser notre offre SaaS, pour une solution stable et moins contraignante.
Vous pouvez utilisez RaspiSMS avec un module SIM800L en auto-hébergement, ou bien en mode SaaS avec un téléphone Android qui servira de relais entre votre opérateur est RaspiSMS. Vous pouvez même utiliser un opérateur professionnel comme OVH pour l’envoi de gros volumes de SMS. Et vous pouvez passer de l’un à l’autre en quelque minutes, sans modifier le reste de votre infrastructure !
Lire l'article complet : Comment brancher et utiliser un module GSM SIM800L avec le Raspberry Pi (sans batterie).