GSM ne fonctionne pas

Bonjour,
Je travail toujours dans mon projet de trackeur GPS à distance. Et depuis hier (le 11 mai), je me suis attaqué à la partie de la communication.
Pour cela j’ai un arduino GSM Shield V2.
J’ai d’abord commencé par essayé le programme GSMScanNetworks:

// libraries
#include <GSM.h>

// PIN Number
#define PINNUMBER "040506"

// initialize the library instance
GSM gsmAccess;     // include a 'true' parameter to enable debugging
GSMScanner scannerNetworks;
GSMModem modemTest;

// Save data variables
String IMEI = "";

// serial monitor result messages
String errortext = "ERROR";

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.println("GSM networks scanner");
  scannerNetworks.begin();

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  // get modem parameters
  // IMEI, modem unique identifier
  Serial.print("Modem IMEI: ");
  IMEI = modemTest.getIMEI();
  IMEI.replace("\n", "");
  if (IMEI != NULL) {
    Serial.println(IMEI);
  }
}

void loop() {
  // scan for existing networks, displays a list of networks
  Serial.println("Scanning available networks. May take some seconds.");
  Serial.println(scannerNetworks.readNetworks());

  // currently connected carrier
  Serial.print("Current carrier: ");
  Serial.println(scannerNetworks.getCurrentCarrier());

  // returns strength and ber
  // signal strength in 0-31 scale. 31 means power > 51dBm
  // BER is the Bit Error Rate. 0-7 scale. 99=not detectable
  Serial.print("Signal Strength: ");
  Serial.print(scannerNetworks.getSignalStrength());
  Serial.println(" [0-31]");

}

mais impossible d’avoir une puissance de signal: voir image “erreur gms scan”

donc j’ai essayé de voir si le modem était reconnu avec le programme TestModem:

// libraries
#include <GSM.h>

// modem verification object
GSMModem modem;

// IMEI variable
String IMEI = "";

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start modem test (reset and check response)
  Serial.print("Starting modem test...");
  if (modem.begin()) {
    Serial.println("modem.begin() succeeded");
  } else {
    Serial.println("ERROR, no modem answer.");
  }
}

void loop() {
  // get modem IMEI
  Serial.print("Checking IMEI...");
  IMEI = modem.getIMEI();

  // check IMEI response
  if (IMEI != NULL) {
    // show IMEI in serial monitor
    Serial.println("Modem's IMEI: " + IMEI);
    // reset modem to check booting:
    Serial.print("Resetting modem...");
    modem.begin();
    // get and check IMEI one more time
    if (modem.getIMEI() != NULL) {
      Serial.println("Modem is functoning properly");
    } else {
      Serial.println("Error: getIMEI() failed after modem.begin()");
    }
  } else {
    Serial.println("Error: Could not get IMEI");
  }
  // do nothing:
  while (true);
}

Pareil, il ne recoonnait pas le modem: voir image “erreur test modem”

Alors j’ai décidé de paramétrer le système de Band avec le programme BandManagement, mais la encore il y a une erreur: voir image “erreur bandmanagement”

// libraries
#include <GSM.h>

// initialize the library instance
GSMBand band;

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // Beginning the band manager restarts the modem
  Serial.println("Restarting modem...");
  band.begin();
  Serial.println("Modem restarted.");

};


void loop() {
  // Get current band
  String bandName = band.getBand(); // Get and print band name
  Serial.print("Current band:");
  Serial.println(bandName);
  Serial.println("Want to change the band you’re on?");
  String newBandName;
  newBandName = askUser();
  // Tell the user what we are about to do…
  Serial.print("\nConfiguring band ");
  Serial.println(newBandName);
  // Change the band
  boolean operationSuccess;
  operationSuccess = band.setBand(newBandName);
  // Tell the user if the operation was OK
  if (operationSuccess) {
    Serial.println("Success");
  } else {
    Serial.println("Error while changing band");
  }

  if (operationSuccess) {
    while (true);
  }
}

// This function offers the user different options
// through the Serial interface
// The user selects one
String askUser() {
  String newBand;
  Serial.println("Select band:");
  // Print the different options
  Serial.println("1 : E-GSM(900)");
  Serial.println("2 : DCS(1800)");
  Serial.println("3 : PCS(1900)");
  Serial.println("4 : E-GSM(900)+DCS(1800) ex: Europe");
  Serial.println("5 : GSM(850)+PCS(1900) Ex: USA, South Am.");
  Serial.println("6 : GSM(850)+E-GSM(900)+DCS(1800)+PCS(1900)");

  // Empty the incoming buffer
  while (Serial.available()) {
    Serial.read();
  }

  // Wait for an answer, just look at the first character
  while (!Serial.available());
  char c = Serial.read();
  if (c == '1') {
    newBand = GSM_MODE_EGSM;
  } else if (c == '2') {
    newBand = GSM_MODE_DCS;
  } else if (c == '3') {
    newBand = GSM_MODE_PCS;
  } else if (c == '4') {
    newBand = GSM_MODE_EGSM_DCS;
  } else if (c == '5') {
    newBand = GSM_MODE_GSM850_PCS;
  } else if (c == '6') {
    newBand = GSM_MODE_GSM850_EGSM_DCS_PCS;
  } else {
    newBand = "GSM_MODE_UNDEFINED";
  }
  return newBand;
}

Donc je voudrai être un peu plus éclairer, car la je suis totalement bloqué…
Merci d’avance pour vos futurs réponses et votre attention…

erreur gsm scan.PNG

erreur test modem.PNG

erreur bandmanagement.PNG

Bonjour

Vous alimentez comment votre GSM? Il faut une alim capable de fournir 2A en pic, 1A en régime d'usage (un simple USB de base sera limité à 500mA)

Cf la documentation

Power

It is recommended to power the board with an external power supply that can provide between 700mA and 1000mA. Powering an Arduino and the GSM shield from a USB connection is not recommended, as USB cannot provide the required current when the modem is in heavy use.
The modem can pull up to 2A of current at peak usage, which can occur during data transmission. This current is provided through the large orange capacitor on the board's surface.

Votre SIM sait se connecter à un réseau 2G?

Au lieu de poster des photos d'un message texte, copiez et collez juste Le texte... ce sera plus simple pour tout le monde :slight_smile:

Effectivement il est alimenter sur USB... Pouvez vous me donner une aide pour me permettre de fournir un courant assez fort pour alimenter la carte GSM?

Pour les images, j'étais obligé, vu que je suis dans une entreprise, je peux pas utiliser arduino iDE sur le même ordinateur ou je navigue sur internet.

Bonjour,

J'ai perso été confronté à un pB de Modem GSM alors que je ne connais pas grand-chose à la téléphonie mobile.

Mon pB est maintenant résolu, (grace à J-M-L) je m'autorise donc quelques remarques :

Il y a deux communications à vérifier;
-1 celle entre l'arduino et le modem par RS232
-2 celle entre le modem et le réseau

A mon avis, déja la 1 ne fonctionne pas; pB de connectique ; pB logiciel (configuration série) ou alimentation électrique ?
Donc la 2 ne risque pas de fonctionner.

La première étape sera de vérifier la 1; par ex en envoyant au modem une commande AT, il doit déjà répondre quelque chose.

Maintenant je laisse la parole aux spécialistes.

Serge .D

Merci de vos réponses, vous me donnez bien la voie vers laquelle il faut que je m'oriente.

J'ai beaucoup entendu parler des commandes AT, tu peux m'expliquer?

Merci d'avance pour ta/vos réponses!

Bonjour,
j'ai branché une pile 9V, sur le GND et le Vin. Mais même résultat. Je voulais vraiment comprendre les étapes à faire pour régler mes différents problèmes.

Merci d’avance

Julien

Pour moi,un schéma électrique de l'ensemble est nécessaire. (Schéma électrique et non représentation ou photo)
Le schéma doit être en relation étroite avec le programme.

Quand à la pile 9V, si c'est le petit modèle rectangulaire, je pense que c'est insuffisant pour assurer les pics d'intensité du modem.

Serge .D

aligote:
Pour moi,un schéma électrique de l'ensemble est nécessaire. (Schéma électrique et non représentation ou photo)
Le schéma doit être en relation étroite avec le programme.

Je ne comprend pas bien le therme schéma electrique?
Car pour moi avec le shield GSM version 2 de arduino, c'est exactement fait pour l'adapter directement à l'arduino UNO. J'ai peut-etre une demarche bête... Mais je prend tout les conseils et les corrections

Julien

Désolé, encore une fois,je ne suis pas le bon interlocuteur car mon projet (voir le lien fourni) n’utilise pas de shield GSM tout fait (Que je ne connais pas). J’emploie un modem Sim800 seul et j’ai du associer les composants nécessaires et faire la totalité du code correspondant “à la main”. (Je n’emploie pas de biblio toute faite)

J’ai juste noté que l’alimentation doit être capable de fournir des pics d’intensité de 2A.

A mon avis une pile 9V est sans doute un peu juste. D’autre part la connexion des masses doit être soignée.

Concernant le code, au début j’ai fait un petit programme pour vérifier le fonctionnement du modem avec le terminal arduino pour lire les réponses. (Voir sur le net ou il y plein d’exemples)

En voila des morceaux :

#include <SoftwareSerial.h>
int Txd = 2, Rxd = 3; // SIM800
SoftwareSerial gsm(Txd, Rxd);
// RX, TX : il faut relier Rx de l'Arduino au Tx du SIM800

Setup et loop :

void setup()
  { INIT();digitalWrite(RelaiPin,HIGH);
    INIT_MODEM();BUZZER(20);
    lcd.clear();lcd.print("Dialogue");
    delay(10000);
  }



void loop()

{   DIALOGUE();}

fonctions utilisées :

void INIT_MODEM()
  {gsm.begin(9600);Serial.begin(9600);  
   BUZZER(500);delay(2000);
  }

void DIALOGUE()
{
 if (gsm.available())
 Serial.write(gsm.read());

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

Serge .D