[Tuto] Module GSM SIM800L – Prise en main

Le module GSM SIM800L est l’un des plus petits modules GSM du monde avec une taille de 2.2 cm x 1.8 cm. C’est un module puissant qui démarre automatiquement et recherche automatiquement le réseau. Il inclut notamment le Bluetooth 3.0+EDR et la radio FM (récepteur uniquement). Il vous permettra d’échanger des SMS, de passer des appels mais aussi, et c’est nouveau, de récupérer de la data en GPRS 2G+. Ainsi vous pourrez faire transiter des données sur une très longue distance, si par exemple la radio FM ou le Bluetooth ne vous suffit plus.

Librairies : SoftwareSerial.h

Matériel : Arduino, SIM800L, carte SIM, diode 1N4007, jumpers, breadboard

Datasheets : SIM800L | At command

Montage :

Ce module nécessite une alimentation entre 3,4V et 4,4V. L’alimentation 5V de l’Arduino ne lui convient donc pas. Pour contrer ce problème d’alimentation, on ajoute une diode 1N4007 entre le 5V de l’Arduino et le pin VCC du SIM800L. Le SIM800L nécessite un pic de courant d’environ 2A. Le reste du branchement est détaillé ci-dessous. La pin reset doit être relié au 3,3v de l’arduino.

untitled-2
20161003_1223291

Il faut également insérer votre SIM dans le compartiment prévu à cet effet sur le module, comme montré dans la photo ci-dessous. Le sens d’insertion de la carte SIM dans le module à son importance. La carte SIM doit être une micro SIM.

SIM800L

Les AT commands (Commandes Hayes)

Les commandes AT sont définies dans la norme GSM 07.07.AT est l’abréviation de ATtention. Ces 2 caractères sont toujours présents pour commencer une ligne de commande sous forme de texte (codes ASCII). Les commandes permettent la gestion complète du module.

On peut utiliser ces commandes directement dans le moniteur série. Il suffit de compiler, téléverser le programme ci-dessous et d’ouvrir le moniteur série. Vous n’avez plus qu’à entrer les différentes commandes AT pour effectuer ce que vous désirez.

Vous pouvez envoyer ou recevoir des SMS, passer ou recevoir un appel, récupérer des données HTTP en entrant directement dans le moniteur série les commandes nécessaires.

// Connect VCC to +5V
// Connect GND to Ground
// Connect RXD (data into SIM800L) to Digital 8
// Connect TXD (data out from SIM800L) to Digital 7
#include <SoftwareSerial.h>
SoftwareSerial sim800l(7, 8); // RX, TX

void setup() {
 Serial.begin(9600);
 sim800l.begin(9600);
}

void loop(){
 if (sim800l.available())
 Serial.write(sim800l.read());

 if (Serial.available()) {
 while(Serial.available()){
 sim800l.write(Serial.read());
 }
 sim800l.println();
 }
}

Le code PIN

Il se peut que votre carte SIM soit verrouillée à l’aide d’un code PIN. Vous devrez entrer à chaque fois votre code pour déverrouiller votre carte. Ajouter les lignes de commandes suivantes avant le setup() et remplacer les XXXX par votre code PIN.

// Code PIN de la carte SIM

String SIM_PIN_CODE = String( "XXXX" );

Puis, ajoutez dans la boucle setup():

sim800l.print("AT+CPIN=");
sim800l.println( SIM_PIN_CODE );

1er test : Lancer le module et récupérer son IMEI

On peut utiliser les AT commandes pour obtenir l’IMEI. La commande AT+GSN récupère l’IMEI de votre module. Vous pouvez ainsi vérifier que ce que vous obtenez est bien l’IMEI inscrit sur votre module.

On peut trouver dans le logiciel de l’Arduino un programme qui va nous permettre d’afficher l’IMEI de la SIM800L dans le moniteur série. Ce programme se trouve dans Fichier > Exemples > GSM > Tools > TestModem.

Les principales commandes de test :

ATISIM800 R13.08Statut du modem
AT+CREG+CREG : 0,5Statut du réseau.

1er indice : 0 -> GSM

2ème indice : 0 -> pas de réseau

5 -> réseau ok

 

 

AT+CPIN ?+CPIN READYPas de code PIN nécessaire
AT+CSQ+CSQ : <rssi>,<ber>Intensité du signal.

<rssi> : received signal strength indication.

<ber>: bit error rate (%)

0 -> less than 0,2%

AT+COPS ?+COPS : <mode>,<format>,<opérateur>Affiche l’opérateur sélectionné

149 réflexions sur « [Tuto] Module GSM SIM800L – Prise en main »

  1. Bonjour.

    Je ne reçois aucun message du sim800l sur le port série.
    J’ai un arduino nano.
    Ma carte sim à un code pin.
    Une fois le sim800l alimenté, la led rouge clignote lentement (1sec allumé, 1sec éteint environ)

    J’ai essayé plusieurs commande, plusieurs programmes et plusieurs ports mais ça ne marche pas.
    Je ne comprends pas.

      • La commande AT ne répond pas.

        J’ai enlevé le code pin. Le module clignote rapide (1sec éteint) puis au bout de 30sec se stabilise en lent (3sec éteint, 0.5 allumé).

        La sim est dans le bon sens ^^

    • Bonjour,

      Je tiens juste à signalez à tout le monde que j’ai suivie le tutoriel et j’ai lu le code un peu aussi, copier coller c’est jamais bon surtout avec des Arduino !
      Le LN4007 est très important et suffisant.
      Sim800L
      Antenne poser
      RST sur 3.3v
      5v -> LN4007 -> 5v board
      Puce free simple 2€ sms sans code pin
      Arduino UNO

      Toutes les commandes passe sans problème.
      Tentez plus de désactiver le code pin pour les 1st test pour moi sa fous un bordel pas possible.

  2. VIO – this is the reference logic level for serial port of the module, the input voltage depends on the logical level of the microcontroller you use. If you use a 5V miccontroller like Arduino, you should have it be 5V, and a 3V logic microcontroller you should set it to 3V.

    Peu etre que mon arduino est en 3v et le module en 5v, ou le contraire.
    Et il n’y à pas de pin VIO sur mon module 🙁

    • Bonjour,

      Désolé de ce retard… Avez-vous bien suivie les indications d’alimentation ? Il faut absolument mettre une diode entre l’arduino et le VCC du SIM800L sinon le voltage sera trop élevé et votre module ne fonctionnera pas ! Vous pourriez également essayer avec un Arduino Uno

      Bonne journée !

  3. Bonjour
    j’essaye d’envoyer un sms avec le sim800l, mais pas moyen.
    La communication série avec le sim800l est OK.
    La saisie du code pin OK (renvoi « Call Ready »).
    Après, toutes les commandes qui devraient initier des appels ou des envois de SMS terminent en erreur. Par exemple la commande AT+CREG me renvoie « ERROR ».
    Une idée ?
    Merci.

      • J’ai résolu mon problème.

        En fait c’était lié à l’alimentation. Une diode donnait une tension supérieure à 4,3 V avec une alimentation 5V.
        Deux diodes en série donnait une tension correcte, mais au final, le SIM800L ne disposait pas d’une intensité suffisante.
        Avec un LM350 en régulateur à 4V à partir d’une tension 12V d’une alimentation ATX, tout fonctionne correctement.

        • Estou utilizando uma fonte de 5V 2A com dois diodos em série.
          Vou utilizar um fonte regulada para verificar.

          Quando vc utilizou os dois diodos, o seu modulo apresentava está funcionando normalmente e respondendo os comandos AT?

  4. Good afternoon, I’m having trouble sending sms
    My Sim800l apparently present is functioning normally.

    I tested the following AT commands

    AT
    – I received the response “OK”

    AT + CPIN? ** This check is SIM unlocked.
    – I received the answer “+ CPIN: READY” That means it is unlocked.

    AT + CREG? ** This is to verify that SIM is registered
    I received the reply “+ CREG: 0.2” What do you mean you’re not registered, however I’m not sure if that’s right, because usually I use the chip in the mobile device.

    AT + CSQ ** This check signal quality
    I received the answer “+ CSQ: 0.0”

    I’m trying to send the SMS to the unit, the serial arduino shows that the SMS was I sent, but it does not get any SMS on my device
    What is possibly occurring?

    thank you !!

    • Hello,

      Check your power supply, it was the problem for me. Eventually i used a LM350 on an ATX power supply to convert 12V to 4V, and voilà 🙂

      • Got it. I used a 5V supply 2A with two diodes in series.
        The module presented work properly, responding to AT commands, but it does not send SMS.

        The problem it is the source?

        • Yes, i’ve done the same thing before (2 diodes) and it was not working even with a big external power source.

          Now it’s working well with a external power source (ATX from computer) and a REGULATOR LM350T delivering 4 volts.

          I also succeed with two li-ion battery in parallal, 2×18650, but be carefull… Only one wasn’t sufficient.

          So I really think that the power source is the problem.

          • It really seems that the problem was with the source.
            Supplies the module with one of those adjustable sources of laboratory and he funcinou perfectly, sending mensgens.
            I will now do what you told me. Use the ATX power supply with LM350.
            I only have one doubt, in the LM350 configuration, it uses a potentiometer to set the correct output voltage?
            Really, thank you for your help

          • I used the LM350 with two resistors, one of 470ohms between the ADJ pin and the ground, one other of 220ohms between the ouput and the ADJ pin and condos of 0.1uF on the input and the output to the ground.

            No need to use a potentiometer.

  5. bonjour, je n’ai aucune réponse des commande AT et le testmodem de gsm me repond
    Starting modem test…ERROR, no modem answer.
    Checking IMEI…Modem’s IMEI: 0
    J’ai varié la tension de 3V a 4,4V ? aucun changement
    Le sim800l clignote chaque seconde ?
    y a t’il un arduiniste qui peu m’aider.. merci d’avance
    G.S

  6. Bonjour,

    j’essai en vain depuis plusieurs jour je faire marcher la sim800l

    brancher sur une alim de labo a 4.1v
    des que je mes le code pin elle reboot

    voici les commande rentrer

    AT
    OK
    AT+CBC
    +CBC: 0,88,4106 –> tension

    OK
    AT+CSQ
    +CSQ: 3,0

    OK
    AT+CPIN=0000
    OK

    +CPIN: READY

    Call Ready
    \0x00 –> reboot

    je communique avec un convertisseur usb ftdi232 en ttl 3.3v
    masse commune avec l’alim de labo
    je voulais savoir si un faible signal pouvais être la cause
    vu que avec un sim900 aucun probleme

  7. Quelqu’un a t’il réussi à se connecter à la DATA, moi je n’y arrive pas (avec Free). Il me renvoie ERROR aux commandes CSTT, CIFSR, CIPSTART…
    Sinon pour ce qui est des SMS y a pas de soucis !

    • Bonjour,

      tous d’abord mon problème de reboot est réglé, reprise des soudures des pin et tout est OK

      pour la DATA avec free pas de souci chez moi
      cdm : AT+CPIN=[votre code pin] -> perso j’ai désactivé mon code
      rep : +CPIN: READY

      cdm : AT+CGREG?
      rep : +CGREG:0.5 -> si pas de x.5 pas de reseau 3g

      cdm : AT+CGATT=1 -> on s’attache au resau 3g
      rep : ok
      — DEBUT CONFIG 3G —
      cdm : AT+CIPSHUT -> on se detach du pdp pour la config
      rep ;: OK

      cdm : AT+CIPMUX=0 -> connexion simple ip
      rep : OK

      cdm : AT+CIPSRIP=0 -> config de la réponse simple ip
      rep : OK

      cdm : AT+CSTT= »free », »Free » -> « APN », »USER » -> information trouvée sur les forum free pour l’USER
      rep : OK

      cdm : AT+CIICR -> connexion a la 3G
      rep : OK

      cdm : AT+CIFSR -> on demande l’ip pour verifier que l’on est bien connecté
      rep : +CIFSR xxx.xxx.xxx.xxx -> ip attribué
      — FIN CONFIG 3G —

      — ENVOI DE REQUETE GET —

      cdm : AT+CIPHEAD=1 -> affiche rep serveur
      rep : OK

      cdm : AT+CIPSTART= »TCP », »http://www.exemple.com », »80″ -> connection au serveur
      rep : CONNECT

      cdm : AT+CIPSEND -> init de l’envoi
      rep : >

      requete :
      GET /index.php?essai=cool%2Bje%2Bsuis%2Bsim%2B800%2Bet%2Bje%2Bsurf%2Bsur%2Ble%2Bnet HTTP/1.1\r\n
      Host:www.exemple.com\r\n\r\n
      ctrl+z pour envoyer ou char 26 ou hexa 0x1a

      rep : SEND OK

      rep : +IPD,HTTP/1.1 200 + du blabla mais le 200 pour OK du serveur

      cdm : AT+CIPCLOSE -> on ferme la connexion
      rep : OK

      cdm : AT+CIPSHUT
      rep : OK

      voici chez moi sa marche en espérant que cela t’aide
      vivant en pleine campagne avec un CSQ de 7 maxi ça marche

      bon test

      • Ca marche aux petits oignons tes commandes, un grand remerciement à toi !
        Moi pour le CSQ j’ai 24,0 à Lyon centre.

        En parlant de problème de reboot mon module se plaignait (au reset, en 115 kbauds) des problèmes de tension. Le coup de la diode ne convenait pas avec l’alim à 5,1 au lieu 5,0 volts (ce qui fait 4.4 volts, donc du coup trop).

        • Euh je dis une bêtise, il disait qu’il rebootait mais j’en ai déduit que c’était un problème d’alim en voyant les signaux à l’oscillo.

  8. Bonsoir,

    Concernant le câblage du module SIM800L, la sortie RST est relié au reset de l’Arduino ou à une broche I/O et reseter par le soft ?
    Merci pour votre aide.
    @+
    Pascal

    • Je ne connais pas l’Arduino mais la broche RST du SIM800L n’a pas besoin d’être connectée (il y a un résistance de pull-up interne). Cette broche n’est vraiment nécessaire qu’en cas du plantage du micro-logiciel du SIM800, pour reprendre la main sans couper le courant.

  9. Bonjour,
    Merci pour ce tuto très utile, par contre mon module clignote vert 3 fois toute les 30 secondes. Les commandes At ne marche pas du tous.
    Merci de votre aide.

  10. Bonjour,

    Je crois que c’est une carte free mobile que tu as là. Le module fonctionne bien avec tous les opérateurs ?
    Un pic de consommation de 2A ? C’est pas un peu beaucoup ?
    Une batterie ne tiendra pas longtemps (style telephone portable) non ?
    Il existe d’autres module qui consomme moins ?

    Cordialement,

  11. Bonjour,
    J’ai le module SIM800L EVB qui est bien connecté au 5v de l’arduino comme dans la video suivante: https://www.youtube.com/watch?v=-okAX7ZoGDk
    J’ai bien le flash toutes les 3 secondes donc la communication est bien reconnue.
    Par contre il ne repond pas à la commande AT.
    Je precise que j’utilise un sketch qui va bien et je dialogue via le moniteur serie de l’arduino. Pas eu de soucis auparavant avec d’autre module sim tel que le SIM900.
    Merci beaucoup pour votre aide.

  12. En fait c’était bien un problème de niveau car le TX et le RX étaient inversé!
    Désormais ca marche nikel!
    J’envoie bien des SMS sur mon tel!
    Pour l’alimentation j’ai utiliser le 5V de l’arduino mais j’ai alimenté ce dernier par une batterie lithium via la prise jack.
    Je précise que j’ai le module SIM800L EVB qui comporte 7 pins dont une « 5V »…
    En tout cas merci pour vos retour super rapide.

    • Content pour toi que sa marche

      je post le problème avec mais premier test sa peut servir à d’autre
      vitesse en baud mal definie
      pas d’envoi de après les commande

    • Bonjour,
      J’ai le même module sim800l EVB acheté sur Amazon
      https://www.amazon.fr/Sim800l-Module-Micro-Quadri-bande-Arduino/dp/B01FK3OPQ6
      j’arrive à envoyer des commande AT mais le module ne se connecte à aucun réseau !
      AT

      OK

      Call Ready

      SMS Ready

      ATI

      SIM800 R14.18

      OK

      AT+CREG?

      +CREG: 0,2

      OK

      AT+COPS ?

      +COPS: 0

      OK

      J’ai utilisé deux carte sim free et bouyg, je l’ai aussi alimenté en 5v d’une alimentation labo, une alimentation 5v 3A d’un chargeur et le 5v de l’arduino uno et toujours la même chose. Pourtant les deux carte sim en question fonctionne parfaitement sur mon téléphone !

      Des proposition SVP ?

  13. Bonjour,
    à mon tour de vous exposer mon soucis :
    Sim800L avec Arduino UNO. Carte SIM SFR de mon smartphone.

    Alimentation du SIM800 par un acu LiIon don bonne tension 2A OK.

    La comm fonctionne AT OK, ATI donne SIM800.

    AT+CPIN? dit +CPIN SIM PIN

    AT+CPIN=1365
    donne OK
    +CPIN READY
    Call OK
    SMS Ready

    La Led clignotte une ou 2 fois lentement et revien au rythme rapide.

    Un nouveau AT+CPIN? redonne +CPIN SIM PIN

    On dirait que le PIN ne tient pas ????

    Le pire c’est que hier dans les mêmes conditions j’ai réussi à entrer dans l’envoi d’un SMS (Probleme de Ctrl Z)

    un AT+COPS? donne +COPS 0

    S’il vous plait Au secours ???

    • Salut,
      La tension nominale de ton accu c’est 3,6V ? Si c’est le cas surveille à l’oscilloscope la tension d’alim (règle le déclencheur un peu en dessous de la tension à vide). Le constructeur recommande 4,0V, si besoin tu peux utiliser un rehausseur de tension à découpage.

  14. Merci David,
    effectivement un accu LiIon c’est pas assez. des fois ça marche, des fois pas.
    J’ai utilisé un Lipo 3700mAh 30C, pour l’instant ça marche. lol

    SMS ok
    Call ok

    Par contre ce qui m’intéresse c’est la fonction GET Http et pour l’instant c’est pas gagné.

    Amicalement

    Pierrick

    • Moi aussi j’ai fait des essais avec une alim non régulée et ça merdait à fond, même avec une capa de 30.000 µF faillait régler précis. C’est pour ça que certains modules intègrent un régu. Le mieux c’est encore un régu qui peut monter / descendre la tension, comme ça la tension et l’affaissement de la l’alim n’ont plus d’importance.

      Joue bien !

    • Hello !

      Ca a vraiment l’aire d’être le même en effet.
      Pour l’instant je n’ai noté que l’option GPRS Class 10 possible.

      Bonne journée !

  15. Bonjour,

    Merci beaucoup pour le tuto, qui m’a permis de me familiariser avec le module.

    J’ai mis beaucoup de temps à arriver à faire marcher mon montage (très simple) pour deux raisons, que je partage ici en espérant que cela fera gagner du temps aux autres :
    + il y a il me semble une erreur dans le commentaire du code sur le branchement des bornes RX et TX du SIM800L. En effet, selon moi, il ne faut pas lire :
    // Connect RX (data into SIM800L) to Digital 7
    // Connect TX (data out from SIM800L) to Digital 8
    mais bien l’inverse :
    // Connect RX (data into SIM800L) to Digital *8*
    // Connect TX (data out from SIM800L) to Digital *7*

    En effet, il semble qu’il y ait interversion dans le code entre les bornes RX/TX du SIM800L et les bornes RX/TX de l’Arduino (qui sont logiquement croisées), et que le premier argument de la création d’un objet de classe SerialSoftware soit la borne RX de *l’Arduino*, et le second argument la borne TX.

    Par ailleurs, j’ai une carte Mega2560, et sur ces cartes, il est précisé ailleurs que seuls les ports 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 peuvent être utilisés comme borne RX. Pour les possesseurs de Mega2560, il faut donc plutôt par exemple utiliser les bornes 10 et 11 que 7 et 8.

    Peut-être pouvez-vous mettre à jour le tuto, par ailleurs fort utile, pour éviter à d’autres de tels désagréments.

    Merci.

  16. Hello,

    Lorsque j’utilise le programme présenté sur cette page et que je passe la commande AT+CPIN=XXXX en passant par le Serial Monitor de l’IDE Arduino, tout fonctionne pour le mieux.

    Par contre si je rajoute dans le setup() du programme :
    sim800l.print(« AT+CPIN= »);
    sim800l.println( « XXXX » );

    Le terminal me retourne le caractère ÿ et si tente de passer la commande
    AT+CMGF=1
    dans le Serial Monitor, j’ai en retour ERROR au lieu d’un OK…

    Est-ce que quelqu’un aurait la solution à ce problème ?

    • Bonjour,
      Vérifier votre tension d’alimentation
      Vous avez une sim800l en 5volts ?
      N’oubliez pas qu’il vous faut une alim. Avec une intensité pouvant aller jusqu’à 2 amperes
      Vérifier aussi vos connectiques

      • Oui j’ai une SIM 800L EVB (en 5V). Par contre il est vrai que je l’alimente via le port usb de mon PC. Malgré tout est-ce que cela peut vraiment expliquer ce problème ? Pourquoi j’arrive à le faire fonctionner via la console série de l’IDE et non en passant les commandes directement dans le code ?

      • Je viens d’essayer en utilisant un chargeur de 5v2a sur l’arduino et je n’ai pas plus de résultat. Faut-il alimenter la carte SIM800L EVB en direct ?

        • Bonjour,
          De souvenir la nano ne peut fournir que 50ma
          J’ai eu le même problème au début
          Mais avec un régulateur bousteur de 3 amperes direct à la sim800 et gnd en commun plus de problème sauf en 3g mais avec un réseau très faible

          Voir aussi si elle est en ttl 3.3v ou 5v

          J’ai vue aussi sur des forum anglais des problèmes de firmware avec les réseaux européen mais si ça marche direct en terminal il n’y a pas de raison que ça ne fonctionne pas

          Voici un site qui ma beaucoup aidé au début http://m2msupport.net/m2msupport/at-command/
          Il regroupe les commandes AT

          Avec Arduino attendez vous la réponse des commandes AT avant d’en envoyer une deuxième

          Voir aussi le buffer de réception

  17. Bonjour

    Pouvez vous me dire quelles lignes de cde je peux mettre dans mon sketch pour verifier que le reseau est ok avant l envoie d un sms ? While ? At+creg?

    Merci d avance

    • bonjour,

      voici ce que j’utilise

      [code]
      Serial.println(F(« Connexion au reseau en cours … »)); // Attente du reseau
      while((command_AT(« AT+CREG? », « +CREG: 0,1 », 1000) || command_AT(« AT+CREG? », « +CREG: 0,5 », 1000)) == 0 );

      /*
      ==============================================
      === Fonction d’interogation de commande AT ===
      ==============================================
      */
      int command_AT(char* ATcommand, char* attente_reponse, unsigned int timeout){
      gsm_serial.listen();
      uint8_t result = 0;
      uint8_t COUNT_GSM = 0;
      char GSM_REPONSE[MAX_SIZE_GSM];
      unsigned long TIME_DEBUT_REQUETE;
      delay(100);
      // Envoi des commandes AT
      gsm_serial.println(ATcommand);
      TIME_DEBUT_REQUETE = millis();

      do{
      // Cette commande vérifie s’il y a des données disponibles dans le tampon.
      //Ces données sont comparées avec la réponse attendue.
      if(gsm_serial.available() > 0){
      GSM_REPONSE[COUNT_GSM] = gsm_serial.read();
      COUNT_GSM++;
      // Comparaison des données
      if (strstr(GSM_REPONSE, attente_reponse) != NULL){
      result = 1;
      break;
      }
      }
      // Attente d’une réponse.
      }while((result == 0) && ((millis() – TIME_DEBUT_REQUETE) <= timeout));

      Serial.println(GSM_REPONSE); //Cette ligne permet de debuguer le programme en cas de problème !
      memset(GSM_REPONSE, 0, sizeof(GSM_REPONSE)); //on vide la variable
      return result;
      }
      [/code]

      si ça peut vous aidez

      • Super merci , les 2 premières lignes de commandes sont parfaites pour moi
        mais comment je dois déclarer  » command_AT » pour que ça soit pris en compte sans erreur dans la vérification de mon sketch?
        J’utilise un Arduino Nano et sim 800L avec logiciel Arduino1.6.9
        Je pense qu’il faut une librairy ou déclarer avant le setup…?

        • void setup{
          while((command_AT( » AT+CREG? « ,  » +CREG: 0,1 « , 1000) || command_AT( » AT+CREG? « ,  » +CREG: 0,5 « , 1000)) == 0 );}

          void loop{
          blabla
          }

          /*
          ==============================================
          === Fonction d’interogation de commande AT ===
          ==============================================
          */
          int command_AT(char* ATcommand, char* attente_reponse, unsigned int timeout){
          gsm_serial.listen();
          uint8_t result = 0;
          uint8_t COUNT_GSM = 0;
          char GSM_REPONSE[MAX_SIZE_GSM];
          unsigned long TIME_DEBUT_REQUETE;
          delay(100);
          // Envoi des commandes AT
          gsm_serial.println(ATcommand);
          TIME_DEBUT_REQUETE = millis();

          do{
          // Cette commande vérifie s’il y a des données disponibles dans le tampon.
          //Ces données sont comparées avec la réponse attendue.
          if(gsm_serial.available() > 0){
          GSM_REPONSE[COUNT_GSM] = gsm_serial.read();
          COUNT_GSM++;
          // Comparaison des données
          if (strstr(GSM_REPONSE, attente_reponse) != NULL){
          result = 1;
          break;
          }
          }
          // Attente d’une réponse.
          }while((result == 0) && ((millis() – TIME_DEBUT_REQUETE) <= timeout));

          Serial.println(GSM_REPONSE); //Cette ligne permet de debuguer le programme en cas de problème !
          memset(GSM_REPONSE, 0, sizeof(GSM_REPONSE)); //on vide la variable
          return result;
          }

          • merci, quand je compile ca me met une erreur : error: expected ‘)’ before ‘;’ token
            exit status 1
            stray ‘\342’ in program
            sur la ligne: }while((result == 0) && ((millis() – TIME_DEBUT_REQUETE) <= timeout));

            je n'arrive pas a trouver pour debuger….

            merci beaucoup d'avance davidomo

      • bonjour,

        en effet première fois que j’ai ce type d’erreur
        c’est a cause de l’encodage du site que remplace certain caractere pour je pense éviter les injections sql

        donc sur votre ligne : while((result == 0) && ((millis() – TIME_DEBUT_REQUETE) <= timeout));
        il faut supprimer le moins (entre millis() et TIME_DEBUT_REQUETE) et le retaper

        voici le résultat de la compilation :

        Les options de compilation ont été modifiées, tout sera recompilé

        Le croquis utilise 5 420 octets (16%) de l'espace de stockage de programmes. Le maximum est de 32 256 octets.
        Les variables globales utilisent 488 octets (23%) de mémoire dynamique, ce qui laisse 1 560 octets pour les variables locales. Le maximum est de 2 048 octets.

          • faite attention au buffer de reception

            voici le commentaire que je m’étais gardé dans mes codes
            //ATTENTION il faut augmenter le tampon de reception SoftwareSerial.h #define _SS_MAX_RX_BUFF 256
            de même pour serial.h

            fichier dans (pour ubuntu) /home/#votre nom utilisateur/.arduino15/packages/arduino/hardware/avr/1.6.17/libraries/SoftwareSerial/src/
            different celon votre version
            sous windaub : c:\users\votre session\Documents\arduino\librairies\

            sinon sa bug

            bon test

          • Ok parce que tu fais appel a une library serial.h aussi ?
            Parce que moi je dois mettre une valeur a la place de MAX_size_gsm sinon il me dit que la valeur n est pas déclaré ?
            J ai bien remplacé 256 dans le fichier SoftwareSerial.h.

          • ok désolé je ne l’avait pas vu

            MAX_SIZE_GSM est une variable que j’avais mis en place de façon a pouvoir changer de config par carte sd sans avoir a flasher a chaque test

            remplacer la par un int en dessous de 256 pour éviter de saturer le buffer
            char GSM_REPONSE[200]; //buffer de réponse pour réserver de la mémoire

            désolé mais il y avait 2 ans que je n’avais pas remit le nez dedans mes premier essai sur sim900 (que je trouve plus stable d’ailleurs que la sim800)

  18. Merci je pense que je vais me diriger vers se modele aussi le 900, je n arrive pas a avoir du reseauavec le 800 la reponse +creg ne passe jamais a 5 et le sms n est pas recu..
    Merci beaucoup pour vos renseignements

    • bonjour,

      javais aussi se problème au debut mais avec une bonne alim stabilisé c’était mieux
      après il y a le ttl en 3.3v en général
      alors que avec sim900 je n’est jamais eu aucun souci et une bonne reception ce qui n’est pas gagné dans ma campagne

  19. bonjour, je suis débutant dans la construction des codes pour réaliser un projet qui se résume comme suit: conception et réalisation d’un système de supervision d’un camion frigorifique, le cahier des charges est basé sur le contrôle de la température dans la remorque frigorifique pour l’instant ;
    j’utilise/
    carte sim800l, carte arduino uno, module gps, et un capteur de température type tm35,
    svp quelqu’une personne peut m’aide.

  20. Bonjour,

    Alors j’ai suivi le tuto mais j’ai un soucis d’alimentation sous j’ai une tension trop basse soit trop haute je n’arrive pas a réguler. Le code se deroule bien mais les sms ne parte pas.

    Afin de voir les message j’ai du passer en baud rate a 115200

    J’ai mit une diode 1N4007

    Avez vous une idée ?

    Merci d’avance

    • salut,
      ton problème d’alimentation,il me semble mème problème, la puce n’est pas détecté , avant de vous répondre, j’ai essayé de résoudre le problème d’alimentation, mais j’ai pas pu, malheureusement, je souhaite de nous trouve quelqu’un nous aide.

    • salut,
      enfin après plusieurs choix des alimentations pour avoir une alimentation entre 3.7v et 4.2 v,et un ampérage d’environ 2A, j’ai utilisé une batterie d’un portable LENOVO, et le problème est résolu.

  21. Bonjour,
    je travaille sur le sujet gestion d’énergie domestique , et j’utilise l’arduino comme une unité de contrôle , j’ai besoin de code qui permet d’affricher une alerte SMS (j’utilise le modem SIM900) , quand la valeur seuil est atteinte (la valeur seuil pour la partie capteur est de 1,5mv )

  22. Bonjour !
    J’aimerais savoir comment ca marche avec un raspberry pi? Je souhaite réalisé une application web en php sur un raspberry qui permettrais l’envoie de sms mais le code que vous avez mis au dessus n’est pas pareil pour un raspberry ?

    Merci bonne continuation

  23. sur une photo en tête de cet article les fils jaune et gris sont inversés entre TX et RX. J’avais reproduit ce montage et ça ne fonctionnait pas.

  24. Bonjour,

    J’ai un module sim 800L EVB, je sais qu’il marche (testé avec une autre librairie).
    Cependant quand je téléverse le programme, que j’ouvre le moniteur série et que je tape des commandes comme AT, rien ne se passe… quand j’appuie sur entrer, ce que j’avais écris disparait et rien ne s’écrit dans le moniteur…

    L’arduino et le moniteur sont tous les deux en 9600 bauds.
    Qu’est-ce que j’ai loupé ?

    Merci de votre aide…

    Cordialement,

          • Bonjour Ansyth,
            La il à pas un soucis de Console COM5 mais plus un problème de démarrage du module pour commencer.

            Ansyth.
            Normalement quand le module SIM se lance une LED verte ou rouge clignote sur le module environ 6x ensuite passe à un clignotement continuelle de 1.
            Si le module clignote en continue entre 6x et 9x c’est que soi le module est en erreur par une commande, sois tu es en over ou under POWER.

            Sache que le module ne s’allimente pas sur le PIN 3.3V mais sur le PIN 5V.
            Ton PIN sur le 5V dois être mis en parallèle avec une diode 1N4007 ou autre le but étant d’avoir une allimentation en 3.7V sans sa tu seras over ou under power.

            Fait déjà uniquement un branchement + et – voir si ton module s’allume.
            Si il ne s’allume pas alors tu as un soucis de branchement.

          • J’ai regardé l’autre tuto, essayé plusieurs codes, je n’ai toujours rien… c’est bizarre…

            Quand j’appuie sur entrer, je vois bien que la led TX de l’arduino s’allume mais c’est tout….

          • M’a question peut paraître bête mais on ne sais jamais
            Avez vous croisé RX TX
            Et gnd commune si plusieurs alim

    • bonjour
      j’ai déjà travaillé sur cette carte (sim800L), j’ai trouvé bcp des problèmes est surtout sur l’alimentation, la meilleur des choses pour fonctionner cette carte pour communiquer avec le moniteur série est d’utiliser une vitesse de 115200,

  25. Oui il faudrait répondre au question…. Sa ne sert à rien d’initialiser des codes, tuto si déjà le module ne démarre pas j’ai vu que tu avais dit que le module ne démarre pas.

    Explique toi ?

  26. Bon je pose mon problème alors.
    Bonjour,

    J’arrive bien à allumer le module pour ma part j’ai bien mis en place un code permettant de lire le texto en 1ere position et de le supprimer ensuite.

    Cependant sois je comprend mal le code et la lecture des données sur les ports séries, sois je suis noob ce qui est surement le cas je débute en C.

    En faite mon but et de vouloir lire un texto de le mettre en mémoire et ainsi d’y faire des actions par exemple mon 1er test serais de vouloir allumer une LED via un SMS « led_on ».

    Pourriez-vous m’aidez SVP ?

  27. Bjr, je rencontre quelques difficultés sur le sim800l (rouge), avec carte sim free à 2€ sans PIN. J’ai branché un batterie 3,7v Li on ensuite un adaptateur 5v 2A avec diode + condensateur au bornes de VCC/GND. Et enfin j’ai essayé avec une alim de labo stabilisé et j’ai tjr le même résultat :

    AT
    OK
    AT+CBC
    voltage ok entre 3,75 et 4,2 suivant l’alime utilisé

    AT+CSQ
    … 7,0 ou 12,0 ou 19,0 suivant l’endroit ou je me trouve.

    AT+COPS=?
    sfr … bouygues… orange…
    Au moment de l’accroche réseau le module semble « rebooté »…
    SI je force via la commande AT+COPS=1,2,20815 => idem
    La commande me renvoie : ERROR

    J’ai acheté un 2ème module et c exactement la meme chose. Pas d’accroche réseau…
    Y-a t-il qqchose de particulier pour se connecter au réseau ?
    Comment puis-je résoudre mon problème ?
    Merci

  28. Bonjour à tous

    j’utilise le module sim800L EVB platine couleur bleu.
    Pour une utilisation Europe, il faut flasher le module en suivant le mode opératoire de ce même tuto. Il faut la version : 1418B05SIM800L24
    Pour info !!!!! Il n’y a aucun soucis d’alimentation, c’est 5V (j’utilise un 7805 en amont) et pas du 4,2 ou 4.7….
    Ce module ne consomme pas 2A!!.. j’ai câlé une alimentation 5v 800mA, ça marche très bien. Je descens jusqu’à 500mA, là c’est pas bon.
    Pas de bricolage de mise à niveau des tensions de TX et RX (pas de diode ou de résistances !!
    Par contre, une très bonne liaison du signal RX_TX, les câbles « dupont » induisent pas mal de parasite. Suivant, une petit câble blindé récupéré dans un vieux PC
    Voilà, pas de soucis particulier. j’en ai 12 en services sur des NAno
    Arduino47

  29. Bonjour,

    Le montage avec mon Arduino Nano fonctionne bien en ce sens :
    Les commandes AT répondent bien :
    AT : OK
    ATI : SIM800L blablabla

    Mais la partie communication semble problématique :
    AT+CPIN? : Error

    Et en augmentant le niveau de log AT+CMEE=2
    La réponse est SIM CARD NOT INSERTED ?

    Pourtant, il y en a bien une… J’ai essayé avec 2 cartes SIM (bouygues, SFR, PIN désactivé pour les 2)

    Est-ce une incompatibilité de carte SIM (2G only par exemple ?) ou y aurait-il une autre cause probable ?
    (Le montage passe par une alimentation stabilisée, pas de problème de saturation ed courant…)

  30. Bonjour,
    j’avais exactement le même problème, commande AT ok, mais pas de connexion.
    J’ai un peu honte de l’avouer, mais si cela m’est arrivé, d’autres étourdis comme moi peuvent se faire avoir. Contrairement aux supports habituels où on enfonce la carte SIM le coté biseauté au fond du support, (qui sert en même temps de détrompeur), ici le biseau est à l’extérieur. On le voit très bien sur la photo (mais je n’avais pas prêté attention à ce détail CAPITAL. Du coup on peut mettre la carte SIM dans tous les sens. Dans le bons sens, miracle ça mAAAAAAAArche…
    Enfin après avoir copieusement insulté et maudit certains asiatiques, je vais battre ma coulpe et pratiquer quelques ascèses, pour me faire pardonner.

    avant:
    at+cpin?
    ERROR
    après:
    AT+CPIN?
    +CPIN: READY

    AT+COPS?
    +COPS: 0,0, »Orange F »
    OK
    Curieux c’est une carte free à deux euros (mais ça fonctionne)…

    at+gmr
    Revision:1418B05SIM800L24
    (possibilité d’avoir cette info avec le QR code sur le chip SIM800L)

    AT+CMGF=1
    OK

    puis
    AT+CMGL= »ALL »
    +CMGL: 1, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:03:38+08″
    Test

    +CMGL: 2, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:21:31+08″
    Miracle
    OK

  31. Bonjour,
    j’avais exactement le même problème, commande AT ok, mais pas de connexion.
    J’ai un peu honte de l’avouer, mais si cela m’est arrivé, d’autres étourdis comme moi peuvent se faire avoir. Contrairement aux supports habituels où on enfonce la carte SIM le coté biseauté au fond du support, (qui sert en même temps de détrompeur), ici le biseau est à l’extérieur. On le voit très bien sur la photo (mais je n’avais pas prêté attention à ce détail CAPITAL. Du coup on peut mettre la carte SIM dans tous les sens. Dans le bons sens, miracle ça mAAAAAAAArche…
    Enfin après avoir copieusement insulté et maudit certains asiatiques, je vais battre ma coulpe et pratiquer quelques ascèses, pour me faire pardonner.

    avant:
    at+cpin?
    ERROR
    après:
    AT+CPIN?
    +CPIN: READY

    AT+COPS?
    +COPS: 0,0, »Orange F »
    OK
    Curieux c’est une carte free à deux euros (mais ça fonctionne)…

    at+gmr
    Revision:1418B05SIM800L24
    (possibilité d’avoir cette info avec le QR code sur le chip SIM800L)

    AT+CMGF=1
    OK

    puis
    AT+CMGL= »ALL »
    +CMGL: 1, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:03:38+08″
    Test

    +CMGL: 2, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:21:31+08″
    Miracle
    OK

  32. Bonjour,
    j’avais exactement le même problème, commande AT ok, mais pas de connexion.
    J’ai un peu honte de l’avouer, mais si cela m’est arrivé, d’autres étourdis comme moi peuvent se faire avoir. Contrairement aux supports habituels où on enfonce la carte SIM le coté biseauté au fond du support, (qui sert en même temps de détrompeur), ici le biseau est à l’extérieur. On le voit très bien sur la photo (mais je n’avais pas prêté attention à ce détail CAPITAL. Du coup on peut mettre la carte SIM dans tous les sens. Dans le bons sens, miracle ça mAAAAAAAArche…
    Enfin après avoir copieusement insulté et maudit certains asiatiques, je vais battre ma coulpe et pratiquer quelques ascèses, pour me faire pardonner.

    avant:
    at+cpin?
    ERROR
    après:
    AT+CPIN?
    +CPIN: READY

    AT+COPS?
    +COPS: 0,0, »Orange F »
    OK
    Curieux c’est une carte free à deux euros (mais ça fonctionne)…

    at+gmr
    Revision:1418B05SIM800L24
    (possibilité d’avoir cette info avec le QR code sur le chip SIM800L)

    AT+CMGF=1
    OK

    puis
    AT+CMGL= »ALL »
    +CMGL: 1, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:03:38+08″
    Test

    +CMGL: 2, »REC READ », »+336xxxxxxxx », » », »18/10/20,03:21:31+08″
    Miracle
    OK

  33. Oups j’ai eu exactement le même problème avec une carte similaire. J’avais mis la SIM dans le mauvais sens. C’était pourtant indiqué au début de l’article, mais on a l’habitude le mettre les SIM le coté biseauté au fond du support, ce qui sert de détrompage. Ici on peut mettre la carte dans tous les sens. il n’est pas habituel est que le coté biseauté soit à l’extérieur. (comme indiqué sur le dessin).

  34. Oups j’ai eu exactement le même problème avec une carte similaire. J’avais mis la SIM dans le mauvais sens. C’était pourtant indiqué au début de l’article, mais on a l’habitude le mettre les SIM le coté biseauté au fond du support, ce qui sert de détrompage. Ici on peut mettre la carte dans tous les sens. il n’est pas habituel est que le coté biseauté soit à l’extérieur. (comme indiqué sur le dessin).

  35. J’ai eu le même problème, tout est rentré dans l’ordre lorsque j’ai mis la SIM dans dans le bon sens. C’est à dire le biseau vers l’extérieur. Il n’y a pas de détrompage dans le support de la SIM.

  36. bonjour, j’ai eu presque tous les problèmes que vous décrivez.
    1 je mettais la carte SIM à l’envers (pas habitué à voir le coté biseauté à l’extérieur).
    2 L’alimentation chutait pendant l’établissement de la communication. Résolu en plaçant un condensateur de 2200µf sur l’alimentation.
    3 Je n’avais pas supprimé le code pin.
    4 j’ai appris à lire, et respecter scrupuleusement les instructions.
    5 Miracle! Ça fonctionne.

  37. attention au numero de telephone du serveur free
    meme si at+Cops=? vous dit orange
    si vous etes chez free
    il faut mettre ce numero
    GPRS.println(« AT+CSCA=\ »+33695000695\ »\r »);
    sinon ca ne marche pas et a chaque relance , dans le setup, car a pres coupure alim, le numero d’orange est remis en memoire

  38. Ping : [Tuto] Trianguler la position avec le SIM800L (Arduino) | Letmeknow

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *