Go Down

Topic: Arduino Uno + Shield GPRS + Carte SIM Free = ??? (Read 7704 times) previous topic - next topic

infobarquee


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

Pachole

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


infobarquee

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?

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
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 ?

Pachole

@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  :P )
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"  ]:D

infobarquee


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



Pachole


Quote

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


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

infobarquee

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

Pachole

Quote

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



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

Pachole

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)

fred133084

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

fred133084

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.

Pachole

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 !

papybricol

#28
Apr 07, 2013, 11:16 pm Last Edit: Apr 08, 2013, 12:24 pm by papybricol Reason: 1
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)
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

skywodd

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)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up