Arduino Uno + Shield GPRS + Carte SIM Free = ???

Oui la carte est activée sur le réseau.
Quand je remets la carte dans le téléphone, du coup, je reçoit en bloc tous les messages qui sont pas arrivés sur l'arduino.
Si j'appelle quand la carte est dans le shield, ça sonne, répondeur etc...
Mystère ]:slight_smile:

active le mode debug de gogprs
dans le fichier GoGprs.h change ceci

//#define GG_DEBUG
// Forward GPRS incomming serial data to the debug channel.
//#define GG_DEBUG_GPRS_SERIAL

en

#define GG_DEBUG
// Forward GPRS incomming serial data to the debug channel.
#define GG_DEBUG_GPRS_SERIAL

et indique dans le void setup() le centre de service Free Mobile: +33695000695

mySerial.println("AT+CSCA="+33695000695"");
delay(1000);

cela devrait te renvoyer un OK

Ça marche pas non plus ! :0 =(

Pachole:
Ça marche pas non plus ! :0 =(

ca aide pas beaucoup.
que dit le DEBUG? fait un copier coller.

tant qu'a faire donne le type de carte gprs et ton code, ca sera plus simple.

Dans mon code de base, je n'utilise pas GoGprs.
Pour le debug, j'ai pris le code de DrWax, avec tes recommandations mais dans ma console, rien ne s'inscrit.

#include <GoGprs.h>
#include <SoftwareSerial.h>
int ledPIN = 13;

#define PIN_CODE "1706"

SoftwareSerial mySerial(7, 8 );
GoGprs gsm = GoGprs(&mySerial);

void setup()
{
Serial.begin(19200);
gsm.begin( PIN_CODE );
mySerial.println("AT+CSCA="+33695000695"");
delay(1000);
pinMode(ledPIN, OUTPUT);
}

void loop()
{
gsm.execute();
if(gsm.isCallReady())
{
if(gsm.hasSms())
{
String phoneNr = gsm.smsCallee();
if(phoneNr.substring(0) == "+33615******")
{
digitalWrite(ledPIN, HIGH);
delay(10000);
digitalWrite(ledPIN, LOW);
}
if(phoneNr.substring(0) == "+33687******")
{
String msg = String( "Laisse tomber Maman.");
if( gsm.sendSms( phoneNr, msg ))
{
Serial.println( "Successfully replied "+msg+" to "+phoneNr );
}
else
{
Serial.println( "Reply "+msg+" to "+phoneNr+ "did failed!" );
}
}
if(phoneNr.substring(0) == "+3311111111")
{
String msg = String( "Tu aimes les films d'horreur ?");
if( gsm.sendSms( phoneNr, msg ))
{
Serial.println( "Successfully replied "+msg+" to "+phoneNr );
}
else
{
Serial.println( "Reply "+msg+" to "+phoneNr+ "did failed!" );
}
}
//Serial.println(phoneNr.substring(0));
gsm.clearSms();
}
else
{
//Serial.println("Pas de SMS");
}
}
delay(500);
}

normal

void setup()
{
Serial.begin(19200);
gsm.begin( PIN_CODE );
mySerial.println("AT+CSCA="+33695000695"");
delay(1000);
pinMode(ledPIN, OUTPUT);
}

mets ceci pour voir

void setup()
{
Serial.begin(19200);
mySerial.println("ATZ");
delay(1000);
mySerial.println("AT+CSCA="+33695000695"");
delay(1000);
gsm.begin( PIN_CODE );

pinMode(ledPIN, OUTPUT);
}

tu n'aurais pas des cavaliers sur le shield?
quelle carte gprs?

Si tu reçois tous les SMS quand tu remets la carte dans le téléphone c'est que la carte n'est pas reconnue sur le réseau dans le module GPRS
Je ne vois que 2 raisons possibles :

  • PIN
  • faux contact qui fait que le module GPRS ne voit pas ta carte SIM

@infobarquee:
c'est seeedstudio v1.4

@barbudor:
je pense plutôt à un problème comme ça mais quand j'appelle le numéro, ça sonne donc logiquement le PIN est bon (et puis je le vérifie :stuck_out_tongue: )
quand au mauvais contact... j'ai beau regarder, nettoyer, comparer avec une autre SIM, je vois pas.

Je me vois mal appeler Free et dire "allo ? ça marche pas dans mon shield GPRS" ]:smiley:

barbudor:
Si tu reçois tous les SMS quand tu remets la carte dans le téléphone c'est que la carte n'est pas reconnue sur le réseau dans le module GPRS
Je ne vois que 2 raisons possibles :

  • PIN
  • faux contact qui fait que le module GPRS ne voit pas ta carte SIM

autre solution le changement de 64 à 128 n'a pas été fait dans softwareserial, mais ca devrait le faire avec les autres.

mets ceci après le ATZ, ca te diras si la carte est insérée ou non

mySerial.println("AT+CSMINS=?");
delay(1000);
mySerial.println("AT+CSMINS=<");
delay(1000);

mySerial.println("AT+CSMINS=?");
delay(1000);
mySerial.println("AT+CSMINS=<");
delay(1000);

Rien d'affiché, ok pour le 128 dans SoftwareSerial

la led du shield clignote comment?
rapide ou lent toutes les 3s?

mets ton code avec les modifs, juste un truc, tu a relancé l'ide après avoir décommenté le DEBUG

#include <SoftwareSerial.h> //Librairie utilisée pour communiquer avec le shield GSM/GPRS
#include <OneWire.h> // Librairie pour la sonde

SoftwareSerial mySerial(7, 8);
#define RELAY_PIN 4
String msg = String("");
int SmsContentFlag = 0;
int DS18B20_Pin = 10;
OneWire ds(DS18B20_Pin);

String SIM_PIN_CODE = String( "1706" );
String TEL_NUM = String( "615******" );

void setup()
{
Serial.begin(19200);
Serial.println("");
Serial.println("Debut initialisation");
mySerial.begin(19200);
delay(100);
mySerial.println("ATZ");
delay(1000);
mySerial.println("AT+CSMINS=?");
delay(1000);
mySerial.println("AT+CSMINS=<");
delay(1000);
mySerial.println("AT+CSCA="+33695000695"");
delay(1000);
mySerial.println("AT"); // Envoi d'une commande pour configuration du debit automatique
delay(1000);
Serial.println("Liaison serie GSM etablie.");
mySerial.println("AT+IPR=19200"); // Mise en mémoire du débit
delay(1000);
Serial.println("Debit etabli sur le module GSM.");
mySerial.print("AT+CPIN="); // Envoi du code PIN retourne ERREUR si il est déjà présent (ce qui n'est pas grave...)
mySerial.println( SIM_PIN_CODE );
delay(1000);
Serial.println("Code PIN OK.");
mySerial.println("AT+CMGF=1"); // GSM en mode texte
Serial.println("Fin initialisation GPRS");
Serial.println("
");
pinMode(RELAY_PIN, OUTPUT);
Serial.println("Fin initialisation RELAY");
Serial.println("*****************************");
}

void loop()
{
char SerialInByte;

if(Serial.available())
{
mySerial.print((unsigned char)Serial.read());
}
else if(mySerial.available())
{
char SerialInByte;
SerialInByte = (unsigned char)mySerial.read();
// Si le message se termine par un alors traiter le message
if( SerialInByte == 13 )

{
// Stocke le caractère dans le buffer de message
ProcessGprsMsg();
}
if( SerialInByte == 10 ){ }
else

{
// Stocke le caractère dans la mémoire tampon réservé au message
msg += String(SerialInByte);
}
}
float temperature = getTemp();
Serial.println(temperature);

if (temperature < 1)
{
ProcessSMSFroid();
Serial.println("Relai fermé");
digitalWrite(RELAY_PIN, HIGH); //A verifier
}
}
float getTemp(){
//returns the temperature from one DS18B20 in DEG Celsius

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for (int i = 0; i < 9; i++) { // we need 9 bytes
data = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
//FONCTION QUI ENVOIE UN SMS EN CAS DE FROID DANS L'APPARTEMENT
void ProcessSMSFroid ()
{

  • Serial.print("Envoi SMS Froid");*
  • mySerial.println("AT+CMGF=1"); //On passe les messages en mode text*
  • delay(100);*
    _ mySerial.print( "AT+CMGS="+33615******"" ); // Envoi du numero de telephone à joindre_
  • delay(100);*
  • mySerial.println("Temperature inferieure a 1 degre"); // Contenu du message*
  • delay(100);*
  • mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi*
  • delay(100);*
  • mySerial.println();*
  • return;*
    }

// FONCTION QUI TRAITE LE SMS
void ProcessSms( String sms )
{
// Envoi le SMS sur le port console
Serial.print( "Traitement du SMS [" );
Serial.print( sms );
Serial.println( "]" );

// En fonction de l'ordre on effectue la commande vers la VERA simuler par l'envoi d'un SMS, permet aussi de tester la fonction d'envoi SMS
if( sms.indexOf("on") >= 0 )

  • {*
  • Serial.println( "Envoi repinse : chauffage allume" );*
  • //envoi du SMS de réponse*
  • mySerial.println("AT+CMGF=1"); //On passe les messages en mode text*
  • delay(100);*
  • mySerial.print( "AT+CMGS="+33" ); // Envoi du numero de telephone à joindre*
  • mySerial.print( TEL_NUM );*
  • mySerial.println(""");*
  • delay(100);*
  • mySerial.println("Chauffage allume"); // Contenu du message*
  • delay(100);*
  • mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi*
  • delay(100);*
  • mySerial.println();*
  • digitalWrite(RELAY_PIN, HIGH);*
  • return;*
  • }*

if( sms.indexOf("off") >= 0 )

  • {*
  • Serial.println( "Envoi reponse : chauffage eteint" );*
  • //envoi du SMS de réponse*
  • mySerial.println("AT+CMGF=1"); //On passe les messages en mode text*
  • delay(100);*
  • mySerial.print( "AT+CMGS="+33" ); // Envoi du numero de telephone à joindre*
  • mySerial.print( TEL_NUM );*
  • mySerial.println(""");*
  • delay(100);*
  • mySerial.println("Lumiere eteinte"); // Contenu du message*
  • delay(100);*
  • mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi*
  • delay(100);*
  • mySerial.println();*
  • digitalWrite(RELAY_PIN, LOW);*
  • return;*
  • }*

if( sms.indexOf("temp") >= 0 )

  • {*

  • float temperature = getTemp();*

  • Serial.println( "Envoi reponse : temperature" );*

  • //envoi du SMS de réponse*

  • mySerial.println("AT+CMGF=1"); //On passe les messages en mode text*

  • delay(100);*

  • mySerial.print( "AT+CMGS="+33" ); // Envoi du numero de telephone à joindre*

  • mySerial.print( TEL_NUM );*

  • mySerial.println(""");*

  • delay(100);*

  • mySerial.print("Temperature interieure de "); // Contenu du message*

  • mySerial.print( temperature );*

  • mySerial.println(" degres");*

  • delay(100);*

  • mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi*

  • delay(100);*

  • mySerial.println();*

  • return;*

  • }*

  • else*

  • {*

  • Serial.println( "Envoi reponse : Commande inconnue" );*

  • //envoi du SMS de réponse*

  • mySerial.println("AT+CMGF=1"); //On passe les messages en mode text*

  • delay(100);*

  • mySerial.print( "AT+CMGS="+33" ); // Envoi du numero de telephone à joindre*

  • mySerial.print( TEL_NUM );*

  • mySerial.println(""");*

  • delay(100);*

  • mySerial.println("Commande inconnue"); // Contenu du message*

  • delay(100);*

  • mySerial.println((char)26); // Envoi le code ASCII de Ctrl+z pour signaler la fin du message et l'envoi*

  • delay(100);*

  • mySerial.println();*

  • return;*

  • } *
    }

// FONCTION QUI DEMANDE AU SHIELD GPRS D'UTILISER LE MODE TEXT POUR LES MESSAGES
//*******************************************************************************************
void GprsTextModeSMS()
{
mySerial.println( "AT+CMGF=1" );
}
// FONCTION QUI LIT LA POSITION DU SMS
void GprsReadSmsStore( String SmsStorePos )
{
mySerial.print( "AT+CMGR=" );
mySerial.println( SmsStorePos );
}
// FONCTION QUI EFFACE LE CONTENU DE LA MEMOIRE TAMPON DES MESSAGES DU GPRS SHIELD
void ClearGprsMsg()
{
msg = "";
}

void ProcessGprsMsg()
{
// Le shield GPRS signale que sa connexion réseau mobile est établie
if( msg.indexOf( "Call Ready" ) >= 0 )

  • {*
    _ Serial.println( "*** Le Shield GPRS est enregistre sur le reseau mobile ***" );_
  • // On passe les SMS en mode texte*
  • }*

// Message non sollicité quand un SMS arrive
if( msg.indexOf( "+CMTI" ) >= 0 )

  • {*
    _ Serial.println( "*** SMS recu ***" );_
  • // Rechercher la position de la virgule dans le message complet (+CMTI: "SM",6)*
  • int iPos = msg.indexOf( "," );*
  • String SmsStorePos = msg.substring( iPos+1 );*
  • // Demande de lecture du SMS*
  • GprsReadSmsStore( SmsStorePos );*
  • // On efface le sms de la mémoire du module gsm pour ne pas le surcharger*
  • mySerial.print( "AT+CMGD=" );*
  • mySerial.println( SmsStorePos );*
  • }*

// Lecture du stockage SMS via l'UART (résultat de la requete GprsReadSmsStore)
if( msg.indexOf( "+CMGR:" ) >= 0 )

  • {*
  • // Le prochain message contiendra le contenu du SMS*
  • SmsContentFlag = 1;*
  • // Les ligne suivantes sont essentielle pour ne pas effacer le flag!*
  • ClearGprsMsg();*
  • return;*
  • }*
    // le message +CMGR précédent indiquait que le message suivant du Shield GPRS contient le corps du SMS
    if( SmsContentFlag == 1 )
  • {*
    _ Serial.println( "*** DEBUT DU SMS ***" );_
  • Serial.println( msg );*
    _ Serial.println( "*** FIN DU SMS ***" );_
  • ProcessSms( msg );*
  • }*
    // Toujours mettre le flag à 0
    ClearGprsMsg();
    SmsContentFlag = 0;
    }
    [/quote]
    Celui là je l'ai pas encore testé.
    Sinon, je redémarre à chaque nouveau code/modif

La diode clignote toutes les 3sec mais ne réagit pas quand j'appelle (ça réagit quand il y a la carte sim orange)

salut,
j'ai la même config que toi : shield gprs 1.4 de seeeduino + sim Free 2 euros.

je viens de tester a tout hasard et tout est ok chez moi. Les sms partent sans soucis, et les appels rentrant sont ok aussi (j'ai branché un casque).

moi j'ai rajouté le démarrage du shied automatiquement (pratique en cas de coupure de courant) :

pinMode(9, OUTPUT);
digitalWrite(9,HIGH);

j'ai trouvé ce pdf avec la liste des commandes AT :

si cela peut aider certains.

J'en conclus que ça vient de ma carte.
Je teste pour le moment avec une autre, de toute façon pour le montage final il me faudra un autre abonnement.

Merci Karma pour ces commandes que je cherchais !

Bonsoir,

Pachole:
Savez vous si les cartes sim de chez Free sont verrouillées ou si il faut passer par d'autres commande (?)

J'ai une carte Free à 2€ et un sheild gprs seeedstudio vers 2.0.
La carte a été désactivé dans un téléphone. ( donc pas de lecture du code pin nécessaire dans le programme)
Le code pin

Envoi et réception de SMS sans problème. (programme avec les commandes AT)

Pour savoir si la carte demande un code ou non : AT+CPIN?

Si ça retourne "SIM PIN" il faut entrer le code sim avec AT+CPIN=1234.
Si ça retourne "SIM PUK" c'est que la carte est bloqué (3 mauvais code pin successif)
Si ça retourne "READY" c'est que la carte est ok pour toute les commandes GSM.

(Si ça peut vous être utile)

Moi je n'arrive carrément pas à coder mon programme pour que mon gprs m'envoi un sms quand mon capteur LM35 dépasse 24 °C, si vous avez des idées ^^

Quel shield? Officiel arduino avec librairie GSM

ou Seeeduino, MChobby avec un module sim900, librairie softSerial et commande At
ou librairie GoGprs....

etc...