Pages: 1 [2] 3   Go Down
Author Topic: Arduino Uno + Shield GPRS + Carte SIM Free = ???  (Read 5717 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 17
Posts: 1938
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ça marche pas non plus  !  smiley-mad smiley-cry

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Quote
#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); 
}

Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1938
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

mets ceci pour voir
Quote
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?
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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  smiley-razz )
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-twist
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1938
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Quote
mySerial.println("AT+CSMINS=?");
delay(1000);
mySerial.println("AT+CSMINS=<");
delay(1000);


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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

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

Offline Offline
Edison Member
*
Karma: 17
Posts: 1938
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


SoftwareSerial mySerial(7, smiley-cool;
#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 <CR> 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 << smiley-cool | 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;
 }


Celui là je l'ai pas encore testé.
Sinon, je redémarre à chaque nouveau code/modif
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

http://www.owen.ru/uploads/re_pm01_list_command.pdf

si cela peut aider certains.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Bretagne
Offline Offline
Full Member
***
Karma: 2
Posts: 196
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

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)
« Last Edit: April 08, 2013, 05:24:42 am by papybricol » Logged

...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: 1 [2] 3   Go Up
Jump to: