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

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

papybricol:
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)

Pas con du tout de supprimer le code PIN, je vais essayer ça !

Maltar:
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 ^^

J'y suis arrivé avec un capteur différent. Si tu veux je te file le code...

Volontier ^^ Tu utilise qu'elle GPRS ?

Moi j'ai celui la : http://www.evola.fr/product_info.php/shield-gprs-p-183

attention la library gogprs est bugguées. Il manque plein de gestion d'état réseau. J'avais commencé a créer des patchs puis cela m'a gavé d'avoir a re controler tout le protocole AT.
La version 1.0.4 de l'ide arduino a une library gsm. bien trop lourde pour moi, mais pour qui code pas cela ira très bien.

Bonsoir,

La librairie GSM ( construite pour le shield officiel Arduino) n'est pas compatible avec le shield Seeeduino ( source discussion du wiki Seeeduino). Rien d'étonnant, les modules GSM y étant différents.

fred133084:
attention la library gogprs est bugguées. Il manque plein de gestion d'état réseau.

"manque" ? Il y en a aucun :grin:
Moi je code mes commandes AT à la main avec la doc constructeur à côté, c'est tellement plus simple que d'utiliser une librairie ...

1 Like

Maltar:
Volontier ^^ Tu utilise qu'elle GPRS ?

Moi j'ai celui la : http://www.evola.fr/product_info.php/shield-gprs-p-183

J'utilise la même que toi !
Je t'ai envoyé le code mais je suis pas sur que tu l'ai reçu... et je suis pas sur de t'avoir envoyé le bon :roll_eyes:
Je le mettrais ici ce soir pour être sur que tu l'as !

Hello, can you help me ?
I have a shield (sim900 seeedstudio) and i would like to have a program to control servo motor from my mobile by sending an sms. I'd like for example when I send it off or I motor rotates 90 ° and returns to its original position off. But I do not go out with the program if someone can help me .. :confused:
thank you :slight_smile:

J'ai retrouvé le bout de code qui marche (je crois), il faut enlever la partie relay.
Je l'avait un peu optimisé mais je le trouve plus.
Seul inconvénient, en dessous de la température de consigne, tu reçois 1 sms/sec ]:smiley: .

forum.ino (9.27 KB)