Échanger des sms avec son Arduino

Bonsoir,

Je suis en train de travailler sur un projet de classe de (télé-alarme). Le but du projet c’est l’envoi et la réception d’un SMS à l'aide d’un microcontrôleur auquel est connecté un téléphone GSM.
Donc pour ceci je dispose d’une carte ARDUINO MEGA 2560, d’un téléphone SAGEM myx5-2T et d’un SONY Ericsson K770i. Je possède le brochage du SONY mais pas du Sagem.

Après avoir fait des tests avec l’hyper-terminal, j’ai pu émettre des appels grâce à des commandes AT et aussi j'ai constaté que le Sagem accepte le mode test et PDU pour l’envoi et la réception des SMS par contre le Sony lui n’accepte que le mode PDU.

Ne maîtrisant pas le mode PDU pour envoyer un SMS, j’ai donc écrit le code que voici pour lancer l’appel avec les commandes AT qui seront transmisent par ma carte au Sony mais rien ne se passe.

void setup()
{
  Serial1.begin(9600); // initialisation de la liaison serie
}
void loop()
{
  Serial1.println ("AT"); // verifier si le téléphone fonctionne bien
  Serial1.println("AT+CMGF=0"); // mettre le telephone en mode PDU
  delay(2000); // pause de 2s
  Serial1.println("ATD92423008"); // compser le numero
  delay(5000); // pause de 5s
}

J'aimerais donc savoir pourquoi le portable ne réagit pas avec le code que j’ai écrit. Et si par hasard quelqu’un la déjà fait est-ce qu’il peut me guider sur le procédé qu’il a mit en œuvre pour avoir un bon résultat ?!

Merci.

Salut, alors quelques points, déjà, les cotes code !! ça aide à lire le code même si la il est très cour, après quelque point, déjà la fonction delay n'est pas terrible et je pense pas que ce soit une bonne solution !! Après, je connais pas trop les cartes GSM et encore moins directement raccordé dans un tel, mais bon !
Petit truc qui me tracasse, tu essaye d'appeler le : 92423008..... je pense pas qu'il soit attribué mais bon xD

Après ça je suis pas un pro de cette téchno donc je ne vais pas dire de conneries, ou du moins pas plus de conneries :grin:

Good Luck !

Skizo!

salut Skizo
merci de t’être intéressé
en fait je ne parle pas d'une carte GSM, mais plutôt d'un microcontrôleur qui est ARDUINO MEGA 2560 auquel je connecte un téléphone GSM qui est le Sony Ericsson K770i.

Oui j'avais bien compris, mais du coup le téléphone est alimenté quand tu fait tes test, ou tu est obligé de te connecté direct sur la partie GSM et l'alimenté toi même?

Skizoh,

Il y a des téléphones qui ont un port série et qu'on peut attaquer directement en commandes AT,

Bassinas, je n'y connais rien mais en googlant j'ai trouvé çà : Home - TimZaman.com

Mais c'est vrai que la plupart des exemples sont en mode Text et pas en PDU.

Sérieux? Oo c'est ding ça ! !

Merci pour l'info :slight_smile:

Skizo !

salut a vous
barbudor et skizoh et je vous remercie encore pour tout les informations que vous me donner j'ai enfin pu etablir la connection entrer le microcontrôleur et le téléphone mais pour ceci j'ai utiliser un Siemens C55, je peux donc composer les numéros que je veux avec ma carte arduino; mais pour l'envoi de SMS ça ne passe pas, car je ne maitrisse pas le mode PDU.
j'ai recour a cet adresse Home - TimZaman.com et aussi a celui ci :/Arduino%20hacked%20Ericsson%20T65%20mobile%20phone%20GSM%20remote%20control.htmmais en fait je n'y comprend pas grand chose est-ce qu'il n'existe pas un algorithme pour convertir le format test en PDU et vise versa?

Bonsoir,

essai : https://sites.google.com/site/marthalprojects/home/arduino/arduino-sends-SMS

Je ne peux pas t'aider plus :drooling_face:

Bonjour

je dispose d’une carte ARDUINO MEGA 2560, d’un téléphone SAGEM myx5-2T et d’un SONY Ericsson K770i. Je possède le brochage du SONY mais pas du Sagem.

Voici le brochage Sagem 18 pins, nombreux téléphones dont le MY-X5-2 (pourquoi s'emm...der avec le mode PDU quand on peut faire en mode TEXTE ?)

Résultats satisfaisants avec un MyV-65 (envoi et réception de SMS, gestion horloge....)

(je rechercherai les petits programmes d'essais quand je serai sur le PC ou ils ont été testés.
j'utilisais un petit interpréteur de commandes légèrement modifié pour utiliser mon Sagem et non pas un shield
SmsCommand — MCHobby - Wiki)

çi joint le connecteur maison à partir d'un kit mains libres ( attention : UART 3V, pas 5V !!!)

Pour la mise au point du dialogue avec le téléphone j'utilisais Teraterm et son éditeur de macros.
Voici une macro d'envoi de SMS par Sagem MyV-65 , UART 3V à 57600 bauds

/* 
 envoi SMS par Sagem myV-65 et UART, 57600 bauds, 3 fils, 3V
 */

connect '/C=4'					; @ port COM4
timeout = 3

sendln ' AT'					; ya quelqu'un ?
wait   'OK'
mpause 500

sendln ' AT+CMGF=1'				; SMS en mode texte, ouf !!!
wait 'OK'
mpause 500

sendln ' AT+CPMS="MT"'			;  selection memoire pour SMS
wait 'OK'
mpause 500

sendln ' AT+CNMI=1,1,0,0,0'		; gestion reception, notification...
wait 'OK'
mpause 500

sendln ' AT+CMGS="+3363592XXXX"'	; envoi SMS au numéro....
wait '>'
sendln 'mon message test'#26		; texte en 'clair'..CTRL Z pour finir		
wait 'OK'

sendln 'AT+CCLK?'		;  What time is it please ?
wait 'OK'

sagem 18 pins.jpg

salut à tous

@al1fch Merci pour ta participation tu as raison le mode PDU est assez difficile et les connections avec ton Sagem ces trop cool
tu été vraiment ingénieux pour réussir cela moi mais continué les tests avec le siemens C55 et j'ai enfin pu envoyer le SMS en question, je me suis donc servi de la documentation de TIM ZAMAN a cette adresse Home - TimZaman.com et tout a très bien marché je vous remercie beaucoup pour vos conseils.
Mais a présent je cherche a optimisé en quelque sorte aller de l'avant j'aimerai savoir comment je peux a base de ma carte arduino
détecter et interpréter l'arrivé d'un SMS pour par exemple allumé une led.
Donc je parle de la réception de SMS avec ARDUINO en mode PDU, si vous avec un code pour cela ou encore des liens qui peuvent m'aider.
Merci je vais continuer mes essais et vous tenir au courant de mon évolution.

bonjour,
pourquoi ne pas vérifier le compteur des sms pour regarder si un nouveau est dans la boite?
j'ai plus la commande AT en tête.

Salut a tous
j’ai trouvé un code assez complexe pour l’envoi et la réception de SMS mais il est très lourd pour moi étant donné que je juste un débutant en GSM et en langage arduino comme dit précédemment j’ai déjà réussit l’envoi de SMS en mode PDU avec le téléphone SIEMENS C55 mais pour la réception j’ai de gros problèmes j’aimerai pouvoir détecter d’abord l’arrivé du SMS dans le téléphone connecté a mon arduino mais aussi interpréter le contenu et agir en conséquence ;
j’ai trouvé le code sur ce lien : /Arduino%20hacked%20Ericsson%20T65%20mobile%20phone%20GSM%20remote%20control.htm
Je l’étudie mais je ne comprend pas grand-chose voici le code
Code :

#include <SoftwareSerial.h> //Software Serial Port
#define RxD 7
#define TxD 8
#define pinOUT1 
SoftwareSerial ericssonSerial(RxD,TxD);
String phonenum="XYXYXYXYXY";
String phonePDU="YXYXYXYXYX";
String OUT1ON="0C31D98C067A56A931D0D309";
String OUT1OFF="0D31D98C067A56A931D0D36804";
String OUT1FAIL="09CF2A35063206934C";
String OUT1ONOK="0ACF2A35067A3A41CF25";
String OUT1OFFOK="0BCF2A35067A1A8DA0E712";
void setup()
{
 Serial.begin(9600);
 pinMode(RxD, INPUT);
 pinMode(TxD, OUTPUT);
pinMode(pinOUT1, OUTPUT);
 ericssonSerial.begin(9600);
 delay(500);
 Init() 
}
void Init(){ 
   while (send_command("AT&F",500) != "&F\r\r\nOK\r\n") {
     delay(1000);
   }
   Serial.println("Modem reset...");
   while (send_command("ATE=0",500) != "E=0\r\r\nOK\r\n") {
     delay(1000);
   }
   Serial.println("Echo Off...");
   while (send_command("AT+CLIP=1",500) != "\r\nOK\r\n") {
     delay(1000);
   }
   Serial.println("Caller ID enabled...");
   while (send_command("AT+CPMS=\"ME\"",500).indexOf("CPMS")==0) {
     delay(1000);
   }
   Serial.println("Phone Memory Selected for SMS...");
   while (send_command("AT+CNMI=,1",500) != "\r\nOK\r\n") {
     delay(1000);
   }
   Serial.println("New SMS Indication Activated...");
   Serial.println("Ready...");
}
String send_command(String at_cmd, int dly){
  String msg;
  char incomingByte;
  ericssonSerial.println(at_cmd);
  delay(dly);
  while (ericssonSerial.available() > 0) 
  {
    incomingByte = (ericssonSerial.read());
    msg = msg + incomingByte;
  }  
  //delay(1000);
  return msg;
}
void sendSMS(String num,String txt){
  String pduTxt;
  int pduLength; 
   pduTxt="0011000C9103"+num+"0000AA"+txt;  
   pduLength=(pduTxt.length()-2)/2;
   //Serial.println(pduTxt);
   //Serial.println(pduLength);
   ericssonSerial.print("AT+CMGS="+String(pduLength)+"\r");
   delay(5000);
   ericssonSerial.print(pduTxt);
   delay(5000);
   ericssonSerial.write(26);
   delay(1000);
}
void loop()
{
 char recvChar;
 String recvStr;
 int ringCount=0;
 String incSMS=0;
 while(1){
   recvStr=0;
   while (ericssonSerial.available()>0){
     recvChar = ericssonSerial.read();
     recvStr=recvStr+recvChar;
     //Serial.print(recvChar);
   }
   if (recvStr.indexOf("CLIP")>0){
     if (recvStr.indexOf(phonenum)>0) { 
      Serial.println(phonenum+" is calling...");
       ringCount=ringCount+1;
       recvStr=0;
       //Serial.println(ringCount);
     }else{
        while (send_command("AT+CHUP",700) != "\r\nOK\r\n"){
        delay(1000);
        }
        Serial.println("Unauthorized caller..");
     } 
   }
   if (ringCount==2){
       while (send_command("AT+CHUP",700) != "\r\nOK\r\n"){
         delay(1000);
       }
       digitalWrite(pinOUT1,HIGH);
       Serial.println("OUT1 ON...");
       //delay(5000);
       //digitalWrite(pinOUT1,LOW);
       //Serial.println("LED OFF...");
       ringCount=0;
       Serial.println("Sending SMS <OUT1 ON OK>.....");
       sendSMS(phonePDU, OUT1ONOK);
   }  
   if (recvStr.indexOf("CMTI")>0){
     Serial.println("SMS Received...");
     ericssonSerial.println("AT+CMGR=1");
     //delay(500);
   }
   if (recvStr.indexOf(phonePDU)>0){
     //Serial.print(recvStr);
     if (recvStr.indexOf(OUT1ON)>0){
       digitalWrite(pinOUT1,HIGH);
       Serial.println("OUT1 ON...");
       delay(1000);
       ericssonSerial.println("AT+CMGD=1");
       delay(1000);
       Serial.println("Sending SMS <OUT1 ON OK>.....");
       sendSMS(phonePDU,OUT1ONOK);
     } else if (recvStr.indexOf(OUT1OFF)>0){
       digitalWrite(pinOUT1,LOW);
       Serial.println("OUT1 OFF...");
       delay(1000);
       ericssonSerial.println("AT+CMGD=1");
       delay(1000);
       Serial.println("Sending SMS <OUT1 OFF OK>.....");
       sendSMS(phonePDU,OUT1OFFOK);
     } else {
         Serial.println("Invalid SMS...");
         delay(1000);
         ericssonSerial.println("AT+CMGD=1");
         delay(1000);
     }
   }
  
   if (recvStr.indexOf("CMGS")>0){
     Serial.println("Message Sent...");
   }   
   while (Serial.available()){
     recvChar = Serial.read();
     ericssonSerial.print(recvChar);
   }
 }
}

Si quelqu’un peu m’aider dans la compréhension de ce code le téléphone utilisé pour ce code est le ERICSSONT 65 il y’a aussi une vidéo sur you tube si vous taper ce nom : Arduino hacked Ericsson T65 mobile phone GSM remote control
Merci pour votre aide