[Résolu] Problème commande AT GSM/GPRS Shield V2

Bonjour à tous,

J’ai récemment investi dans un Shield GPRS V2 (Model:SLD01098P) de Seeedstudio couplé à une UNO R3 dans le but de monter un projet domotique.

Mon problème vient du shield, en effet je n’ai aucun retour lorsque j’envoie une commande AT.

J’ai suivi le tuto de Seeedstudio à la lettre : http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0#Resource

J’ai utilisé ce sketch présent dans le lien :

//Serial Relay - Arduino will patch a 
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART 
 
#include <SoftwareSerial.h>
 
SoftwareSerial GPRS(7, 8);
unsigned char buffer[64]; // buffer array for data recieve over serial port
int count=0;     // counter for buffer array 
void setup()
{
  GPRS.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);             // the Serial port of Arduino baud rate.
 
}
 
void loop()
{
  if (GPRS.available())              // if date is comming from softwareserial port ==> data is comming from gprs shield
  {
    while(GPRS.available())          // reading data into char array 
    {
      buffer[count++]=GPRS.read();     // writing data into array
      if(count == 64)break;
  }
    Serial.write(buffer,count);            // if no data transmission ends, write buffer to hardware serial port
    clearBufferArray();              // call clearBufferArray function to clear the storaged data from the array
    count = 0;                       // set counter of while loop to zero
 
 
  }
  if (Serial.available())            // if data is available on hardwareserial port ==> data is comming from PC or notebook
    GPRS.write(Serial.read());       // write it to the GPRS shield
}
void clearBufferArray()              // function to clear buffer array
{
  for (int i=0; i<count;i++)
    { buffer[i]=NULL;}                  // clear all index of array with command NULL
}

La carte SIM est Free Mobile sans PINCODE, quand j’allume le shield elle se connecte bien au réseau (LED Power ON, LED NET clignote toutes les 3 secondes).

Pas de soucis lors de l’upload, mais une fois que je lance un terminal série (Celui de l’IDE, sscom32E ou en Putty) la seule info qui s’affiche est celle-ci : ÿÿÿÿÿÿÿÿ

Même en lancer la commande AT+IPR=19200, je n’ai aucun retour.

J’essaie de trouver une solution à mon problème depuis hier et voici un retour ce que j’ai essayé :

Problème d’alimentation. Testé avec une alimentation 12v externe 3,5amp. Résultat : aucun changement.
Problème de baudrate. J’ai testé tous les changements de baudrate possible. Résultat : seulement les caractères ÿÿÿÿÿÿÿÿ changent en d’autres caractères non lisibles.

J’ai aussi testé l’outil online http://m2msupport.net/m2msupport/module-tester/ il trouve le port COM, il s’y connecte, mais quand il tente une commande AT, il me retourne une erreur.

J’aimerai avoir votre avis, car je suis complètement perdu.

Merci d’avance.

bonjour,
déjà passe en 9600

 GPRS.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);             // the Serial port of Arduino baud rate

pense a bien mettre les bauds à la bonne valeur dans la console ide.
dans SoftwareSerial_Class.h
mettre
#define _SS_MAX_RX_BUFF 128 // RX buffer size

quel version ide?

Bonjour,

J'ai tout exécuté, le changement de baudrate, la taille du buffer. La seule chose que ça change c'est les caractères qui changent lorsque j'allume le shield : þþþþþþþþ

L'IDE est 1.0.6

BinBin:
Bonjour,

J'ai tout exécuté, le changement de baudrate, la taille du buffer. La seule chose que ça change c'est les caractères qui changent lorsque j'allume le shield : þþþþþþþþ

L'IDE est 1.0.6

bonjour
ça ça ressemble typiquement à une mauvaise valeur de baud qq part !
déjà est tu sur de la vitesse à laquelle ton module gsm discute ?
une solution simple pour vérifier avec un uno :

tu charge l'exemple blink (simplement pour etre sur qu'un programme n'utilise pas le serial)
et tu connecte TX/RX du GSM sur les pins 0 et 1 de l'uno (attention avec cette manip , le sens des pin 0 et de l'arduino est inversé)

et tu regarde avec le serial monitor à quelle vitesse tu lis des infos "compréhensibles"

Artouste:
bonjour
ça ça ressemble typiquement à une mauvaise valeur de baud qq part !
déjà est tu sur de la vitesse à laquelle ton module gsm discute ?
une solution simple pour vérifier avec un uno :

tu charge l’exemple blink (simplement pour etre sur qu’un programme n’utilise pas le serial)
et tu connecte TX/RX du GSM sur les pins 0 et 1 de l’uno (attention avec cette manip , le sens des pin 0 et de l’arduino est inversé)

et tu regarde avec le serial monitor à quelle vitesse tu lis des infos “compréhensibles”

Salut,

Si j’ai bien compris je connecte le pin0 de l’arduino (rx) sur le pin8 du shield (tx) et pin1 de l’arduino (tx) sur pin7 du shield (rx) ?

BinBin:
Salut,

Si j'ai bien compris je connecte le pin0 de l'arduino (rx) sur le pin8 du shield (tx) et pin1 de l'arduino (tx) sur pin7 du shield (rx) ?

considere là que le sens des fleches sur le uno sur les pins 0 et 1 sont inversés

Re,

En faisant comme tu m’as dis, j’ai réussi à lancer des commandes AT en 2400 bauds.

Par contre, quand je remets le shield sur l’Arduino, je n’y arrive plus.

BinBin:
Re,

En faisant comme tu m'as dis, j'ai réussi à lancer des commandes AT en 2400 bauds.

Par contre, quand je remets le shield sur l'Arduino, je n'y arrive plus.

recable maintenant comme au début
et passe gprs.begin à 2400

Artouste:
recable maintenant comme au début
et passe gprs.begin à 2400

C'est fait, mais ça ne marche pas :-/

les jumpers sont au bon endroit?
tu peux mettre une photo de la carte montée?

Les deux jumpers sont côté gauche (swserial), voici les photos :

c’est quoi tous ces cables?
tu devrais en avoir que 4
7-8 et 5v-gnd

tel que tu mets tes cables, tu utilise le rx/tx du nono, donc pas la peine d’essayer d’avoir quelque chose sur le serial console de l’ide.

teste ce petit code qui est dans les exemples de SoftwareSerial

#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8); // RX, TX

void setup()  
{
  // Open 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("gprs!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);

}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

infobarquee:
c’est quoi tous ces cables?
tu devrais en avoir que 4
7-8 et 5v-gnd

Tu as raison, je les ai mis pour rien.

tel que tu mets tes cables, tu utilise le rx/tx du nono, donc pas la peine d’essayer d’avoir quelque chose sur le serial console de l’ide.

J’ai testé 0/1 de la UNO sur 7/8 du shield et c’est la seule fois où j’ai pu mettre des AT command sans problème.

teste ce petit code qui est dans les exemples de SoftwareSerial

#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8); // RX, TX

void setup()  
{
 // Open 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(“gprs!”);

// set the data rate for the SoftwareSerial port
 mySerial.begin(4800);

}

void loop() // run over and over
{
 if (mySerial.available())
   Serial.write(mySerial.read());
 if (Serial.available())
   mySerial.write(Serial.read());
}

Code testé, j’ai bien gprs! qui s’affiche dans le monito

BinBin:
Tu as raison, je les ai mis pour rien.

J'ai testé 0/1 de la UNO sur 7/8 du shield et c'est la seule fois où j'ai pu mettre des AT command sans problème.

Code testé, j'ai bien gprs! qui s'affiche dans le monito

ça c'est normal
mais avec ma manip , tu a determiné que le gprs est en 2400 et là tu le déclare en 4800 = déjà change la ligne
mySerial.begin(4800);
par
mySerial.begin(2400);

Artouste:
ça c'est normal
mais avec ma manip , tu a determiné que le gprs est en 2400 et là tu le déclare en 4800 = déjà change la ligne
mySerial.begin(4800);
par
mySerial.begin(2400);

C'est fait, j'ai toujours gprs! comme retour

BinBin:
C'est fait, j'ai toujours gprs! comme retour

bon ça doit être assez trivial
il faut procéder avec méthode :

  • Il se passe quoi lorsque tu envoie AT sur le serial monitor

  • Ton serial monitor est configuré avec quoi comme terminaison ?

  • ton GPRS est sur une breadboard ?

Artouste:
bon ça doit être assez trivial
il faut procéder avec méthode :

  • Il se passe quoi lorsque tu envoie AT sur le serial monitor

  • Ton serial monitor est configuré avec quoi comme terminaison ?

  • ton GPRS est sur une breadboard ?

Salut Artouste,

Si j'empile le shield sur la UNO, j'ai ces caractères bizarres qui s'affichent (voir 1er message)

Si je déporte le shield sur un breadbord en utilisant les pins 7/8 de la UNO pour le TX/RX ça bug.

Par contre si je déporte le shield et que j'utilise les pins 0/1 de la UNO sur les 7/8 du shield, en ayant uploadé Blink comme tu me l'as conseillé, je peux envoyer des AT command en 2400 bauds.

teste ce code avec tout sur le nono
évidemment, il faut que ton shield soit bien activé et clignote comme il faut avec le réseau
ca devrait te renvoyer des choses

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7,8);
void setup() {
 
  Serial.begin(19200);

  mySerial.begin(2400);

     mySerial.println("ATZ");
  delay(1000); 
     mySerial.println("AT+CMGDA=\"DEL ALL\"");
  delay(1000);
  mySerial.println("ATSO?");
  delay(1000);
  mySerial.println("ATSO=1");
  delay(1000);
}   

void loop() {
}

infobarquee:
teste ce code avec tout sur le nono
évidemment, il faut que ton shield soit bien activé et clignote comme il faut avec le réseau
ca devrait te renvoyer des choses

#include <SoftwareSerial.h>

SoftwareSerial mySerial(7,8);
void setup() {

Serial.begin(19200);

mySerial.begin(2400);

mySerial.println(“ATZ”);
 delay(1000);
    mySerial.println(“AT+CMGDA=“DEL ALL””);
 delay(1000);
 mySerial.println(“ATSO?”);
 delay(1000);
 mySerial.println(“ATSO=1”);
 delay(1000);
}

void loop() {
}

salut IB
ça devrait renvoyer “des choses” où ?
a part le serial.begin , serial n’est pas utilisé ailleurs

tester ça peut etre ?

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7,8);
void setup() {
 
  Serial.begin(19200);

  mySerial.begin(2400);

     mySerial.println("ATZ");
  delay(1000); 
     mySerial.println("AT+CMGDA=\"DEL ALL\"");
  delay(1000);
  mySerial.println("ATSO?");
  delay(1000);
  mySerial.println("ATSO=1");
  delay(1000);
}   

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

Bonsoir,

Si je peux me permettre et si j’ai bien compris le problème :
FT232 Tx0 et RX0 vers GPRS pins 7 et 8 en direct ça fonctionne (à 2400b/sec)
FT232 Tx0 et RX0 vers ATmega328 puis vers GPRS pins 7 et 8 ça ne fonctionne plus.
Pour que ATmega 328 laisse passer les données il lui faut bien un programme, une librairie ?
Le problème doit être logiciel.
Tester les cartes empilées maintenant. Les connexions sont bonnes.

#include <String.h> n’est pas nécessaire dans ce cas ?
Après l’initialisation des ports, il ne faut pas un délai ?

En télécommunications, on réalise souvent des boucles pour tester les différents tronçons
en les cumulant ?
Ne serait t’il pas possible de boucler 7 et 8 sur l’Arduino ? (sans le shield)
La commande AT retournerait au moniteur.