Problème GSM Shield 2 SIM 900

Bonjour, je suis un élève de terminal.

Je dois faire un projet dans lequel je dois envoyer un message avec mon GSM. J'utilise un GSM Shield 2 SIM 900 ( https://store.arduino.cc/product/A000105 ) ainsi que l'équivalent d'un Arduino Uno: https://www.sparkfun.com/products/retired/11575 .

J'ai une carte SIM Free (abonnement 2€).

J'alimente mon Arduino en USB.

J'utilise la version arduino 1.0.5.

Le soucis: J'utilise l'exemple donné un tout petit peu modifié (j'y ai rajouté le code PIN, et quelques commandes dans le but de voir ou le programme bug):

//*
 SMS sender
 
 This sketch, for the Arduino GSM shield,sends an SMS message 
 you enter in the serial monitor. Connect your Arduino with the 
 GSM shield and SIM card, open the serial monitor, and wait for 
 the "READY" message to appear in the monitor. Next, type a 
 message to send and press "return". Make sure the serial 
 monitor is set to send a newline when you press return.
 
 Circuit:
 * GSM shield 
 * SIM card that can send SMS
 
 created 25 Feb 2012
 by Tom Igoe
 
 This example is in the public domain.
 
 http://arduino.cc/en/Tutorial/GSMExamplesSendSMS
 
 */

// Include the GSM library
#include <GSM.h>

#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

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("SMS Messages Sender");

  // connection state
  boolean notConnected = true;
  Serial.println("1");

  // 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;
      Serial.println("2");
    }else
    {
      Serial.println("3");
      Serial.println("Not connected");
      delay(1000);
    }
  }
  
  Serial.println("GSM initialized");
}

void loop()
{

  Serial.print("Enter a mobile number: ");
  char remoteNum[20];  // telephone number to send sms
  readSerial(remoteNum);
  Serial.println(remoteNum);
    
  // sms text
  Serial.print("Now, enter SMS content: ");
  char txtMsg[200];
  readSerial(txtMsg);
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);
  
  // send the message
  sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS(); 
  Serial.println("\nCOMPLETE!\n");
}

/*
  Read input serial
 */
int readSerial(char result[])
{
  int i = 0;
  while(1)
  {
    while (Serial.available() > 0)
    {
      char inChar = Serial.read();
      if (inChar == '\n')
      {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if(inChar!='\r')
      {
        result[i] = inChar;
        i++;
      }
    }
  }
}

Le problème est que mon code s'arrête (je pense) à: if(gsmAccess.begin(PINNUMBER)==GSM_READY)
Il m'affiche "Not Connected" puis plus rien. Comment faire pour avoir la suite du programme et surtout pourquoi?
Le code pin est bien le bon, et j'ai même essayer de le désactiver complètement. Rien n'y fait.

J'utilise la version arduino 1.0.5.

passez à la dernière version

le plus souvent les pb rencontrés viennent que l'alimentation du shield GSM n'est pas capable de fournir 2 ampères. vous l'alimentez comment?

Justement, en utilisant la dernière version, j'ai un problème avec if(gsmAccess.begin(PINNUMBER)==GSM_READY){

Au niveau de l'alimentation je mets le GSM sur mon Arduino, puis je branche mon Arduino en USB. La question est alors, puis-je brancher et l'USB ET une alimentation externe (type alimentation d'ordinateur 12 V), cela ne va-t-il pas endommager l'Arduino ou GSM si je branche les deux en même temps?

Faut lire la doc de votre shield mais là avec l'usb ca ne ça pas fonctionner

Ils disent que l'USB n'est pas suffisant, mais puis-je alors brancher en même temps que l'USB une alimentation externe (je dis bien en même temps).

Alors dans la doc ils disent

To upload sketches to the board, connect it to your computer with a USB cable and upload your sketch with the Arduino IDE. Once the sketch has been uploaded, you can disconnect the board from your computer and power it with an external power supply.

Donc ils ne semblent pas recommander les 2 en même temps.

Cela dit tout dépend de la qualité de votre carte arduino. Sur celles originales et celles de bonne facture on peut avoir en même temps sans problème l'USB et la prise jack.

Comme dit dans la doc

Power
The Arduino/Genuino Uno board can be powered via the USB connection or with an external power supply. The power source is selected automatically.
External (non-USB) power can come either from an AC-to-DC adapter (wall-wart) or battery. The adapter can be connected by plugging a 2.1mm center-positive plug into the board's power jack. Leads from a battery can be inserted in the GND and Vin pin headers of the POWER connector.
The board can operate on an external supply from 6 to 20 volts. If supplied with less than 7V, however, the 5V pin may supply less than five volts and the board may become unstable. If using more than 12V, the voltage regulator may overheat and damage the board. The recommended range is 7 to 12 volts.

En pratique sur les bonnes cartes (je pense que c'est le cas pour sparkfun) il y a un circuit comparateur de courant qui va regarder si la tension qui arrive par le jack est supérieure à environ 6.5v et dans ce cas basculer sur le jack. Prenez une alim 9V 2A et vous devriez être tranquille

La raison pour laquelle à mon avis ils recommandent de ne pas laisser l'usb c'est que si pour une raison ou un autre votre pc redémarre, alors la réactivation du bus USB va faire re-booter votre UNO ce qui n'est pas toujours souhaitable (et bien sûr pour ne pas être responsable si vous avez grillé votre clone chinois sur lequel ils ont fait l'économie de quelques centimes pour le circuit de protection bien conçu)

Bonsoir

En effet le comparateur de tension (seuil 6,6V) est présent sur la carte Uno Sparkfun signalée au début de ce fil de discussion. Schéma : Redboard (Uno) Sparkfun 2012.

Un second commutateur 5V / VIN (comparateur de tension , seuil 5,8V, nettement moins moins lisible ... et moins franc...que celui de la carte UNO !!) est également présent sur Arduino GSM SHIELD 2 en amont du régulateur de tension à découpage (inductance intégrée) alimentant le module GSM Quectel M10 (c'est pas un SIM 900) Schéma SHIELD GSM 2

Une alimentation extérieure délivrant "entre 700mA et 100mA" est ,je cite, recommandée. le gros condensateur orange permettant ,lui, de fournir les pics de 2A. source : Arduino - Home

Ailleurs il est proposé de passer d'une alim à l'autre un fois le téléchargement du code effectué !!

Pour moi avec l'alim 9V 2A conseillée par J-M-L on est en situation d'avoir une bonne commutation de tension sur les 2 cartes , autorisant ainsi la présence simultanée des deux câbles (USB et jack d'alim extérieure)
S'il y a des alimentations de laboratoire disponibles en classe il est possible de descendre jusque vers 7,5V 1A

.....En cas de doute tenace sur la commutation électronique des sources et donc de crainte persistante sur les risques de conflit il reste envisageable de relier carte 'Uno' et PC par un câble maison USB dépourvu de connection 5V (fil rouge). Le câble USB 'mutilé' permettant un échange d'infos avec le PC

Capture du 2017-01-07 23-48-44.png

Merci pour vos réponses, je vais essayer cela et je vous donnerai mes résultats.

Rebonjour,
J'ai essayé avec une alimentation externe et toujours aucun résultat, je reste bloqué à PINNUMBER.

Up

Bonjour,

Je fait Egalement joujou avec cette carte que je découvre.
Je suis loin d’être un spécialiste, mais a force de passer des soirées dessus on fini par avoir un début de connaissance...
La ligne que vous évoqué est l'emplacement du prgm ou notre ami arduino vérifie si le code PIN de la carte SIM correspond avec celui qui est indiqué dans le programme.

Dans la configuration que vous presentez, le code PIN a été (censé être) "" (voir début du code ""#define PINNUMBER "").

Dès lors deux possibilités:
soit mettre le code PIN de la SIM a "" (opération a faire avec un simple GSM)
soit indiquer le code PIN dans le programme a cet endroit ( entre les guillemets) #define PINNUMBER ""

en espérant vous avoir aidé...
Eric

Tout d'abord merci pour vos réponses.

Alors ça y est je progresse !

J'ai enlevé mon code PIN et le GSM arrive en effet à s'initialiser. Le programme pour recevoir (celui de l'exemple) marche. Cependant celui pour envoyer bloque. Il s'initialise mais il reste bloqué à

Serial.print("Enter a mobile number: ");
  char remoteNum[20];  // telephone number to send sms
  readSerial(remoteNum);
  Serial.println(remoteNum);

Il m'affiche bien d'entrer le numéro de téléphone, mais j'ai beau le rentrer en +33... ou en 06, rien n'y fait. Il n'arrive pas à passer à l'étape suivante.

J'ai branché l'alimentation en plus et toujours rien.