Raspberry Pi connecté à un SIM800L

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

Mis à jour le 14 février 2021 - 20 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 !

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.

Capture d'écran de l'interface de discussion de RaspiSMS.
RaspiSMS intègre toute l’interface nécessaire aussi bien à la gestion de contact, qu’à l’envoi de SMS individuels, qu’à la création de campagnes de diffusion.

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 !

4/5 - (40 votes)
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 Installer un serveur web sur votre Raspberry (Apache + PHP + MySQL) Bien choisir vos accessoires pour les Raspberry Pi 3 et 2 Installer un serveur Minecraft sur votre Raspberry Pi !
20 commentaires
Besoin d'aide ? Vous la trouverez plus vite sur notre forum.

  1. DDE dit :

    Merci pour ce tuto.
    C’est presque parfait, mais j’ai vraiment galéré…

    J’ai suivi scrupuleusement en utilisant un Raspberry Pi Zero W et un module Sim800L (https://www.amazon.fr/gp/product/B07RHLP45T/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1).

    J’ai du passer une bonne demi-journée à chercher pourquoi ça ne fonctionnait pas :
    Quand je mettais le code PIN, le module retournait juste un « OK » mais il ne prenait pas en compte le code PIN.
    J’ai changé de carte SIM, j’ai modifié et enlevé la capacité. J’ai testé la tension à 4.3V, j’ai essayé de l’abaisser en rajoutant une résistance de 220Ohoms, mais c’était encore pire. Et puis j’ai essayé avec le 5V direct, sans la diode, en gardant le condensateur. Et là, MIRACLE ! Tout fonctionnait !
    Ca a l’air stable dans le temps (testé sur quelques heures).
    .
    Peut-être est-ce spécifique au PI Zero W…
    A suivre.

    Merci encore pour le tuto

    1. Bonjour,
      il est tout à fait possible que cela soit du au Raspberry Pi Zero, lequel a un peu moins de peps que le Pi classique. Si la tension était à 4.3V en sorti de diode ça devrait être bon théoriquement puisque le module est censé fonctionner entre 3.7 et 4.2 V, mais entre les normes constructeur et le fabriquant chinois…

  2. serge Robert dit :

    Bonsoir cher membre Raspberry Pi FR

    je suis entrain de vouloir réaliser un projet dans le volet médical en concevant un appareil suivant :

    appareil avec un module RFID + MODULE GSM + ECRAN.

    j’aimerais avoir le listing de l’ensemble des accessoires a acheter et comment le mettrent en liens.

    l’appareil devrait recevoir des fichier PDF provenant dune application mobile ,tel type de communication devrais je utiliser.

    merci.

    1. Bonjour,
      pour trouver de l’aide sur un projet de ce type, le mieux est encore de demander de l’aide sur le forum.. Si vous avez la possibilité d’une connexion internet, alors il sera probablement plus facile d’externalisé l’aspect GSM en utilisant par exemple un service SaaS d’envoi de SMS, comme RaspiSMS.

  3. Raphael dit :

    Bonjour, j’ai bien suivi le tuto, sur deux cartes différentes (pensant à un défaut de fabrication), cependant j’arrive toujours à « sim not inserted », bien que la sim soit dans le bon sens (4.4V de tension). C’est une SIM Free, j’ai lu que le module était 2G, mais j’ai du mal à comprendre comment elle pourrait être refusée.

    AT+CPIN?
    +CME ERROR: SIM not inserted

    1. Sûr à 100% que la SIM est bien dans le bon sens ? En général les problèmes d’alimentation créent plus des messages incohérents, des redémarrage intempestifs et des terminaux bloqués que ce type d’erreur. Le fait que le module soit 2G ne pose à priori pas de problème, ce réseau étant encore supporté en France.

      Pour ce cas particulier je pense que vous trouverez plus facilement de l’aide sur le forum.

  4. Kenneth dit :

    3AT+CPIN?3 après avoir clicqué qur ENTREE il m’affiche « ERROR »
    Que Dois-je faire SVP?

    1. Bonjour, avec un message d’erreur aussi général difficile effectivement de savoir dans quelle direction aller ^^. Vous devriez regarder dans la documentation sur les commandes AT, il existe une commande (je ne sais plus laquelle) qui permet de définir le niveau de détails et de verbosité sur les erreurs, utiliser cette commande pour activer l’affichage complet des erreurs, cela pourrait vous aider à en savoir plus sur la nature exact de l’erreur.

  5. Ced dit :

    Pourquoi faire simple quand on peut faire compliqué :-))

    Vous avez juste à brancher un module SIM800C USB prémonté avec antenne et c’est tout !!
    https://raspberry-pi.fr/recommends/gsm-sim800-usb/

    Remplacez /dev/serial0 par /dev/ttyUSB0 et voilà :-))

    1. Bonjour, tout simplement parce-que je n’avais encore jamais vu ce type de modèles à des prix correctes, mais effectivement cette solution semble intéressante !

  6. Darneth dit :

    Bonjour,
    Je suis débutant dans le monde électronique et je dois réaliser un travail regorgeant certains des équipements énumérés dans ce tutoriel.
    Le seul souci c’est au niveau d’acquisition des équipements…j’aimerais savoir si un autre condensateur d’une autre caractéristique pourrait faire la tache du condensateur que vous avez mentionné dans ce tutoriel…car c’est vraiment difficile de trouver cet équipement j’ai parcourru toutes les boutiques disponibles dans le pays.
    Merci encore et excellent comme tutoriel

    1. Bonjour,
      oui sans problème, n’importe quelle condensateur électrolytique un peu puissant fonctionnera.

  7. Mickael dit :

    Bonjour,
    J’ai réalisé le même montage (seule différence j’ai un condensateur 100µF 50V). Cependant le SIM800L envoie « OVER-VOLTAGE POWER DOWN ».
    Avez-vous une idée du problème ?
    D’avance merci !

    1. C’est un cas que je n’ai jamais rencontré mais qui semble apparaître quand on alimente le module SIM800L avec plus de 4.4V. Normalement on considère qu’une diode provoque une chute de tension d’environ 0.6V à 0.7V, donc avec une alimentation de 5V on est censé arriver juste dans les clous. Tu peux éventuellement tenter de mettre une deuxième diode en série, ce qui devrait cette fois faire tomber la tension d’environ 1.4V, ce qui pour le coup nous amène à 3.6V à partir d’une tension de 5V, ce qui devrait être suffisant pour le SIM800L.

  8. JF dit :

    Bonjour !
    j’ai pas mal galéré avec un module SIM800l EVB version 2.0. qui a 7 pins :
    Reset | GND | SIM_RXD | SIM_TXD | VDD | GND | 5v
    Le module s’éteignait et se rallumait tout le temps … problème d’alimentation 🙁

    En déconnectant l’antenne le module restait allumé. Comme il ne pouvait rien capter il ne devait pas essayer de se connecter au réseau donc pas de pic de courant, donc pas de reboot …

    La solution :
    le +5v du rasperry va sur le +5v du module avec un condensateur de 470µF (entre le +5v et GND)

    Mais aussi le +5v du rasperry va sur le VDD du module, avec un autre condensateur de 470µF (entre VDD et GND)

    Et la plus aucun soucis, tout a fonctionné directement !
    Peut-être à préciser en bas du tuto pour ceux qui n’ont pas exactement le même module que vous 😉

    En espérant que ça puisse aider quelqu’un et un grand Merci pour ce tuto !!

    JF

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

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

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