SIM900 Power ON

Bonjour,j’ai réussi à mettre en place un programme simple sur mon arduino uno afind’envoyer un sms avec le module SIM900(http://imall.iteadstudio.com/im120417009.html). Le programme est le suvant:

#define DEBUG //  Mode debogage

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2,3);

void setup()
{
  SIM900.begin(2400);
  Serial.begin(9600);

  Serial.println("configuration par defaut");
  SIM900.println("ATZ"); // Pour remettre les configuration par defaut
  GetSIM900();
  
   Serial.println("affichage du numero des erreurs");
   SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
  GetSIM900();

  Serial.println("Code PIN");
  SIM900.println("AT+CPIN=1234"); // Code PIN
  GetSIM900();

  delay(20000); // Connexion au réseau

  #ifdef DEBUG
  Serial.println("Operateur");
  SIM900.println("AT+COPS?"); // Opérateur
  GetSIM900();
  delay(15000);

      //SET center number server needed for free provider
  Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");
  SIM900.print("AT+CSCA=\"+32475161616\"\r");
  GetSIM900();
  delay(15000); // Connexion au réseau

  Serial.println("Etat de la connexion au reseau :");
  Serial.println("La connexion est etablie si +CREG: 0,1");
  SIM900.println("AT+CREG?"); // Connexion au réseau
  GetSIM900();

  #endif

  Serial.println("Activation du mode SMS");
  SIM900.println("AT+CMGF=1"); // Activation du mode SMS
  GetSIM900();

  Serial.println("Envoi du numero de telephone");
  SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
  GetSIM900();

  Serial.println("Corps du message");
  SIM900.println("j'ai reussi a programmer le module gsm"); // Corps du message
  Serial.println("CTR+Z");
  SIM900.write(0x1A); // CTR+Z
  GetSIM900();
}

void loop()
{

}

void GetSIM900()
{
  delay(2000);
  
  if(SIM900.available())
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}

J’aimerai pouvoir maintenant mettre mon module en route avant d’envoyer le sms. Pour cela j’ai ajouter une commande mais cela ne fonctionne pas, est ce que quelqu’un aurait la solution. Un grand merci d’avance.

#define DEBUG //  Mode debogage

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2,3);

void setup()
{
  SIM900.begin(2400);
  Serial.begin(9600);

  Serial.println("configuration par defaut");
  SIM900.println("ATZ"); // Pour remettre les configuration par defaut
  GetSIM900();
  
   Serial.println("affichage du numero des erreurs");
   SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
  GetSIM900();

  Serial.println("Code PIN");
  SIM900.println("AT+CPIN=1234"); // Code PIN
  GetSIM900();

  delay(20000); // Connexion au réseau

  #ifdef DEBUG
  Serial.println("Operateur");
  SIM900.println("AT+COPS?"); // Opérateur
  GetSIM900();
  delay(15000);

      //SET center number server needed for free provider
  Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");
  SIM900.print("AT+CSCA=\"+32475161616\"\r");
  GetSIM900();
  delay(15000); // Connexion au réseau

  Serial.println("Etat de la connexion au reseau :");
  Serial.println("La connexion est etablie si +CREG: 0,1");
  SIM900.println("AT+CREG?"); // Connexion au réseau
  GetSIM900();

  #endif

  Serial.println("Activation du mode SMS");
  SIM900.println("AT+CMGF=1"); // Activation du mode SMS
  GetSIM900();

  Serial.println("Envoi du numero de telephone");
  SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
  GetSIM900();

  Serial.println("Corps du message");
  SIM900.println("j'ai reussi a programmer le module gsm"); // Corps du message
  Serial.println("CTR+Z");
  SIM900.write(0x1A); // CTR+Z
  GetSIM900();
}
 void SIM900power(){
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
}
void loop()
{
  SIM900power();
  delay(20000);
}

void GetSIM900()
{
  delay(2000);
  
  if(SIM900.available())
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}

bonjour,
tu veux quoi exactement?
allumer le gsm ou l'initialiser?
si c'est pour l'allumer

The pin 9 of Arduino interface is connecting to PWRKEY, and a high pulse with 400us wide can power on/off it.

donc, un truc de ce genre peut faire l'affaire

digitalWrite(9,HIGH);
delay(400);
digitalWrite(9,LOW);

C'est l'allumer et ce que tu me montre je l'ai mis dans mon programme mais ça ne va pas( regarde dans le 2ieme programme) je vais essayé de modifier les delay pour voir mais à mon avis le souci c'est que j'ai encore mis ça au mauvais endroit. Ce module commence sérieusement à me saouler et j'ai encore plein de chose à programmer dessus....

bonjour
là vous mettez des delay en ms pas en µs :grin:
essaie avec
delayMicroseconds(400)

si tu le mets après les instructions d'initialisation c'est normal :wink:
faut mettre l'instruction de mise en service avant l'initialisation.

ca revient au même que de vouloir démarrer une voiture en étant pas encore monté dedans (sauf si on a un démarrage à distance :wink: )

donc un test pour voir si le gsm répond, si oui, on fait rien, si non on active l'allumage.

EDIT :
tu as réaison Artouste, mais il veut initialiser avant l'allumage, donc l'autre l'envoie ballader :slight_smile:

Donc j’ai simplifié au max en mettant le tout en amont des commandes et ça ne marche quand même pas, il ne faut déclarer la pin avant ou quelques chose comme ça ?

#define DEBUG //  Mode debogage

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2,3);

void setup()
{

  digitalWrite(9, HIGH);
  delayMicroseconds(400);
  digitalWrite(9, LOW);
  delay (20000);
  
  Serial.println("configuration par defaut");
  SIM900.println("ATZ"); // Pour remettre les configuration par defaut
  GetSIM900();
  
   Serial.println("affichage du numero des erreurs");
   SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
  GetSIM900();

  Serial.println("Code PIN");
  SIM900.println("AT+CPIN=1234"); // Code PIN
  GetSIM900();

  delay(20000); // Connexion au réseau

  #ifdef DEBUG
  Serial.println("Operateur");
  SIM900.println("AT+COPS?"); // Opérateur
  GetSIM900();
  delay(15000);

      //SET center number server needed for free provider
  Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");
  SIM900.print("AT+CSCA=\"+32475161616\"\r");
  GetSIM900();
  delay(15000); // Connexion au réseau

  Serial.println("Etat de la connexion au reseau :");
  Serial.println("La connexion est etablie si +CREG: 0,1");
  SIM900.println("AT+CREG?"); // Connexion au réseau
  GetSIM900();

  #endif

  Serial.println("Activation du mode SMS");
  SIM900.println("AT+CMGF=1"); // Activation du mode SMS
  GetSIM900();

  Serial.println("Envoi du numero de telephone");
  SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
  GetSIM900();

  Serial.println("Corps du message");
  SIM900.println("j'ai reussi a programmer le module gsm"); // Corps du message
  Serial.println("CTR+Z");
  SIM900.write(0x1A); // CTR+Z
  GetSIM900();
}

void loop()
{
}

void GetSIM900()
{
  delay(2000);
  
  if(SIM900.available())
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}

Petrus036:
Donc j'ai simplifié au max en mettant le tout en amont des commandes et ça ne marche quand même pas, il ne faut déclarer la pin avant ou quelques chose comme ça ?

oui dans le setup

pinMode(9, OUTPUT);

J'ai maintenant cela mais il s'allume toujours pas.

  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  delayMicroseconds(400);
  digitalWrite(9, LOW);
  delay (20000);

Petrus036:
J'ai maintenant cela mais il s'allume toujours pas.

  pinMode(9, OUTPUT);

digitalWrite(9, HIGH);
  delayMicroseconds(400);
  digitalWrite(9, LOW);
  delay (20000);

essaye de passer le delai à 450/500 , avec les tolerances 400 est peut etre en limite basse

J’ai mis un delay de une seconde et ça à marcher ( ne touchons plus à rien)
Un grand merci, c’est déjà un problème en moins sur ma liste :slight_smile:
Donc si un jour quelqu’un consulte ce topic voila le code pour allumer en envoyer un sms avec un module SIM900

#define DEBUG //  Mode debogage

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2,3);

void setup()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay (20000);
  
  Serial.println("configuration par defaut");
  SIM900.println("ATZ"); // Pour remettre les configuration par defaut
  GetSIM900();
  
   Serial.println("affichage du numero des erreurs");
   SIM900.println("AT+CMEE=1"); // Pour afficher le numero de l'erreur
  GetSIM900();

  Serial.println("Code PIN");
  SIM900.println("AT+CPIN=1234"); // Code PIN
  GetSIM900();

  delay(20000); // Connexion au réseau

  #ifdef DEBUG
  Serial.println("Operateur");
  SIM900.println("AT+COPS?"); // Opérateur
  GetSIM900();
  delay(15000);

      //SET center number server needed for free provider
  Serial.println("envoi de la commande: AT+CSCA=\"+32475161616\"");
  SIM900.print("AT+CSCA=\"+32475161616\"\r");
  GetSIM900();
  delay(15000); // Connexion au réseau

  Serial.println("Etat de la connexion au reseau :");
  Serial.println("La connexion est etablie si +CREG: 0,1");
  SIM900.println("AT+CREG?"); // Connexion au réseau
  GetSIM900();

  #endif

  Serial.println("Activation du mode SMS");
  SIM900.println("AT+CMGF=1"); // Activation du mode SMS
  GetSIM900();

  Serial.println("Envoi du numero de telephone");
  SIM900.println("AT+CMGS=\"+32471469547\""); // Envoi du numéro de téléphone
  GetSIM900();

  Serial.println("Corps du message");
  SIM900.println("j'ai reussi a programmer le module gsm"); // Corps du message
  Serial.println("CTR+Z");
  SIM900.write(0x1A); // CTR+Z
  GetSIM900();
}

void loop()
{
}

void GetSIM900()
{
  delay(2000);
  
  if(SIM900.available())
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}

Petrus036:
J’ai mis un delay de une seconde et ça à marcher ( ne touchons plus à rien)
Un grand merci, c’est déjà un problème en moins sur ma liste :slight_smile:
Donc si un jour quelqu’un consulte ce topic voila le code pour allumer en envoyer un sms avec un module SIM900

tant mieux si ça a fini par tomber en marche :grin:
mais intellectuellement je regarderais quel est le delai mini
en faisant par dichotomie , ça ne prend pas pas trop de temps
1000 OK
OK PAS OK
500 —> 250 ou 750 ---->