Library GSM avec le shield SIM 900

Bonjour,

J'ai vu que le sujet a été traité plusieurs fois, mais malgré cela je n'y arrive pas !
J'ai un shield SIM 900 qui fonctionne bien avec les commandes AT (appel ...) via le moniteur série.
Par contre quand je veux utiliser la bibliothèque GSM rien à faire pas d'erreur mais cela se bloque.
J'ai pensé à un problème de vitesse j'ai essaye 9600 et 19200 rien à faire.
J'ai essayé la Library SIM900 mais rien de plus;
Si quelqu'un à une idée.

Merci

pourquoi vous embêtez avec la librairie - peut-être votre firmware n'est pas 100% compatible... écrivez vos fonctions puisque les commandes AT fonctionnent...

Bonjour,

Compte-tenu de ma (faible) expérience perso avec un Modem Sim 800; je confirme :

  • J'avais une situation géographique ou la couverture réseau étant aléatoire, le fonctionnement avec la bibliothèque n'était pas satisfaisant.
  • En utilisant directement les commandes AT, j'ai pu obtenir un fonctionnement bien robuste avec un petit peu de "sueur" mais une occupation en mémoire programme réduite de moitié.

PS : Si votre sim 900 communique avec l'arduino, tout va bien dans la mesure ou le Sim900 communique aussi avec la borne GSM.

Serge .D

Merci
J'ai commencé à tout écrire avec les commandes AT cela fonctionne mais je n'arrive pas à gérer le retour du SIM900 !
Si quelqu'un à un bout de code ... Sur le net j'ai récupéré des exemples mais les infos du SIM900 comme la lecture des SMS ne remontent pas.

Voila ce que j'utilise pour l'instant, Essayer d'en prendre des morceaux :

Voir s'il y a des SMS dans la carte Sim :

    gsm.println("AT+CMGF=1");//mode texte 
    MESSAGE("OK",2000);Serial.println(reponse);  
    gsm.print("AT+CMGL=");gsm.print('"');gsm.print("ALL");gsm.println('"');
       if (MESSAGE("+CMGL:",10000))
          { Serial.println("LIRE SMS");
            lcd.setCursor(0,0);lcd.print("Leture des SMS");                   
            LIRE_SMS("SMS");
          }
        else  
          {Serial.println("* Rien lu *"); 
           lcd.setCursor(0,1);lcd.print("Rien lu  ");   
          }

Fonction MESSAGE pour obtenir une réponse du modem à une requête :

A optimiser, par ex le return de la fonction

boolean MESSAGE(String attente, unsigned int timeout) 

{ //unsigned long t0;
  t0 = millis();
  reponse="";//if (affiche) lcd.setCursor(0,ligne);
  while (millis() - t0 < timeout)
  {
    while(gsm.available()) reponse.concat(char(gsm.read()));
    if (reponse.indexOf(attente)>0)
      {        // Lit encore 100 ms le port serie  
       delay (100); 
       while(gsm.available()) reponse.concat(char(gsm.read()));
       break;
      }   
  } 
  if (reponse.indexOf(attente)>0) return true;
         else return false;
}

Serge .D