Raspberry Pi connecté à un SIM800L

Comment brancher et utiliser un module GSM SIM800L avec le Raspberry Pi (sans batterie).

Mis à jour le 26 septembre 2020 - 5 Commentaires - , , , ,

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.
Un kit comme celui-ci contient tout ce dont vous aurez besoin.

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 :

  1. Brancher le VDD du SIM800L à un GPIO fournissant du courant sur le Raspberry.
  2. Connecter le GND du SIM800L à un GPIO GND sur le Raspberry.
  3. Relier le TXD du SIM800L au RXD du Raspberry.
  4. Relier le RXD du Raspberry au TXD du SIM800L.
  5. 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.

Batterie lithium ion dans un téléphone.
À la base le SIM800L est censé s’intégrer dans des téléphones avec une batterie…

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.

Des diodes 1N4007 en gros plan
La diode 1N4007, probablement la plus connue et utilisée.

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 !

Un tas de condensateurs.
Les condensateurs on en trouve partout, de toutes les formes, de toutes les tailles.

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.

Montage avec un SIM800L et un Raspberry.
Le montage complet permettant de connecter un SIM800L à un Raspberry Pi.

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 !

Partager
Newsletter
Auteur :
Raspberry Pi FR
Rejoignez la communauté Raspberry Pi
Un ordinateur à 35€ déjà vendu à 10 millions d'exemplaires
ACHETEZ LA NOUVELLE RASPBERRY PI 4
Tutoriels en rapport
Installer un media-center avec OSMC sur votre Raspberry Pi ! RaspiSMS 2.0, envoyer des SMS par internet avec la Raspberry Pi Bien choisir vos accessoires pour les Raspberry Pi 3 et 2 Installer un serveur web sur votre Raspberry (Apache + PHP + MySQL) Envoyer, gérer et recevoir des SMS avec la Raspberry Pi
5 Comments
Besoin d'aide ? Vous la trouverez plus vite sur notre forum.
  1. vVDB dit :

    La 2G va bientôt disparaitre en Suisse, en France se serait la 3G. a moyen terme 2G et 3G vont probablement s’arrêter pour faire de la place sur les fréquences basses à la 5G.
    Ce module est-il 2G et 3G ?
    Un module 4G existe-t-il pour ne pas avoir de problème dans peu de temps ?

    1. Salut, à priori une partie de la série des SIM7000, notamment la SIM7000e sont compatibles 3G et 4G.

      Après en France SFR au moins a indiqué que son réseau GSM sera supporté au moins jusqu’en 2030, Orange parle de 2025 officiellement. En Suisse Sunrise propose le support de la 2G jusqu’en 2022 à priori. Après il faudra voir si des fournisseurs autres proposent la 2G.

      On notera quand même la bêtise absolue de supprimer une technologie certes ancienne, mais qui offre une couverte à 99% du territoire et une faible consommation énergétique, juste au moment ou justement l’IoT commence à se développer…

      Dans l’absolu je pense qu’une fois une date officielle de fin de support du réseau 2G un peu officialisée, les fabricants chinois vont passer sur une puce 4G et refaire un équivalent de l’actuel module SIM800L.

  2. Cem dit :

    Salut, peut-on utiliser le SIM800L comme modem, pour avoir une connection internet en 2g, pour envoyer des relevées de température dans une BDD sur un server distant par exemple ?

    1. Salut, oui c’est possible. Le SIM800L supporte toute la stack TCP/IP donc on pourrait faire une connection MySQL direct, mais cela me semble très complexe. Sinon plus simplement il est possible de faire des appel HTTP directement, donc par exemple déclencher une API à distance pour enregistrer les données. Il faut regarder pour ça du coté des fonctionnalités GPRS de la carte.

      Ça c’est du coté des solution avec « juste » le SIM800L et le Pi. Ce qui a l’avantage de pouvoir être adapté pour à peu prêt n’importe quel micro-contrôleur, donc potentiellement quelque chose qui consommera beaucoup moins qu’un raspberry.

      Maintenant pour quelque chose de plus souple, tu peux utiliser un Pi et le logiciel PPP qui permet de faire une connexion internet via une connexion série, il est alors possible de transformer le SIM800L en modem.

  3. REBOULET dit :

    Excellent, un investissement sur une présentation qui a du relief

Partager
Inscription à la Newsletter
Inscrivez-vous à la Newsletter.
Vous avez aimé cet article ?
Inscrivez-vous et restez informé !