Arduino Mega / Sim800L : les commandes AT

Bonjour,

J’ai un module sim 800L EVB que j'alimente avec une batterie externe 5V, 2.4A: je sais qu’il marche puisque je l'ai testé avec une librairie: SIM908IDE100 où j'ai réussi à envoyer des messages et à en recevoir.
Pour ceux qui ne connaissent pas précisément le module, c'est un SIM800L avec un petit shield permettant de l'alimenter en 5V directement si j'ai bien compris.
Voici une photo:

Je cherche donc à communiquer avec mon GSM par commande AT mais c'est là que j'ai un problème.
J'utilise ce code là pour dialoguer:

#include <SoftwareSerial.h>
SoftwareSerial sim800l(10, 11); // RX, TX

void setup() 
{
 Serial.begin(9600);
 sim800l.begin(9600);
 Serial.println("Initialisation terminée");
}

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

 if (Serial.available()) 
 {
     sim800l.write(Serial.read());
 }
 delay(250);
}

(code que j'ai récupéré sur un autre site et que j'ai re-modifié un peu)

Cependant quand je téléverse le programme, que j’ouvre le moniteur série et que je tape des commandes comme la fameuse "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 et le moniteur est en LR & CR.
J'ai essayé plusieurs autres vitesses (19200, 57600 et 115200) et rien y fait !
J'ai remarqué que quand j’appuie sur entrer, je vois bien que la led TX de l’arduino s’allume mais c’est tout…

Qu’est-ce que j’ai loupé ?

Merci de votre aide…

Cordialement,

PS: j'ai déjà épluché pas mal de site web et j'ai peut-être une piste: le fait que les commandes que je tape puissent être zappé si l'arduino n'est pas pile en train de lire sur le moniteur quand je fais entrer. Probleme de buffer ?

salut,
on a presque les même étapes et j'ai le même problème aucun message reçu , j'ai utilise une carte Arduino Méga branché avec un module ethernet et un module GSM800L toujour le meme erreur
"ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp"
je ne sais pas c'est quoi le probléme

Il y a pas mal de tutos sur comment lire le contenu de la console série. Notamment celui de Nick Gammon. On peut adapter le premier exemple :

/*
Example of processing incoming serial data without blocking.

Author:   Nick Gammon
Date:     13 November 2011. 
Modified: 31 August 2013.

Released for public use.
*/

#include <SoftwareSerial.h>
SoftwareSerial sim800l(10, 11); // RX, TX

// how much serial data we expect before a newline
const unsigned int MAX_INPUT = 50;

void setup ()
  {
  Serial.begin (115200);
  sim800l.begin(9600);
  Serial.println("Initialisation terminée");
  } // end of setup

// here to process incoming serial data after a terminator received
void process_data (const char * data)
  {
  Serial.println (data);
  sim800l.write(data);
  }  // end of process_data
  
void processIncomingByte (const byte inByte)
  {
  static char input_line [MAX_INPUT];
  static unsigned int input_pos = 0;

  switch (inByte)
    {

    case '\n':   // end of text
      input_line [input_pos] = 0;  // terminating null byte
      
      // terminator reached! process input_line here ...
      process_data (input_line);
      
      // reset buffer for next time
      input_pos = 0;  
      break;

    case '\r':   // discard carriage return
      break;

    default:
      // keep adding if not full ... allow for terminating null byte
      if (input_pos < (MAX_INPUT - 1))
        input_line [input_pos++] = inByte;
      break;

    }  // end of switch
   
  } // end of processIncomingByte  

void loop()
  {
  // if serial data available, process it
  while (Serial.available () > 0)
    processIncomingByte (Serial.read ());
    
  // do other stuff here like testing digital input (button presses) ...
  if (sim800l.available())
   {
    Serial.write(sim800l.read()); 
   }
  }  // end of loop

Note que la console est réglée à 115200 bauds.

Salut,

Tu utilises la librairie SIM908IDE100, vue que il y a usage d'une carte arduino mega , il faut modifier le fichier GSM.ccp qui se trouve dans le dossier de la lib SIM908IDE100, voir ci-dessous et passer sur les Pins 50 et 51 et plus plus 10,11.

//De-comment this two lines below if you have the
//first version of GSM GPRS Shield
#define _GSM_TXPIN_ 2
#define _GSM_RXPIN_ 3

//De-comment this two lines below if you have the
//second version og GSM GPRS Shield
//#define _GSM_TXPIN_ 51
//#define _GSM_RXPIN_ 50

Ensuite dans mes exemples de le lib, il y a un fichier GSM_GPRS Library_AT, essai voir avec celui-ci si cela fonctionne mieux.
@+

Je ne connais pas du tout le Sim800L, mais j'ai vu dans la doc que le baud rate est réglable entre 1200bps et 115200bps. Qu'est-ce qui vous fait croire que le vôtre est réglé à 9600bps?

Il faut régler deux vitesses :

  • la vitesse de transfert entre le PC et carte arduino communication interface serie : via la commande Serial.begin(9600) ou autre jusqu'a 115200

  • la vitesse de transfert en carte arduino et le module SIM...., et la via la commande : sim8001.begin (9600) voir plus lentement , genre 4800 ou 2400, faire des essais en 2400 pour valider puis augementer si necessaire.