Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

commande à distance par gsm



  1. #1
    nesrine.15

    commande à distance par gsm

    je suis en train de faire un projet 'commande par gsm d'un automate programmable' le module GSM est un téléphone portable connecté avec PIC 18F6622 on a commencé par allumer une Led avant de commandee l'automate pour vérifier si le message est reçu.
    l'utilisateur envoie un SMS qui contient allumer au téléphone connecté au pic pour allumer cette Led à l'aide des commandes AT le pic reçoit ce message le lire puis activé le pin correspendant. j'ai fai le code mais ça n'a pas marché
    j'ai besoin de votre aide s'il vous plait
    voici le code:

    Code:
    //**** Declaration des variables
    
    
    char cmd="AT";
    char clip="AT+CLIP=1";
    char cmgf="AT+CMGF=1" ;
    char ata="ATA+21621489141" ;
    char cpms="AT+CPMS=TA" ;
    char cnmi= "AT+CNMI=2,1, 0,0,0" ;
    char cmgr="AT+CMGR=1" ;
    char cmgd="AT+CMGD=1" ;
    char all="allumer"  ;
    char num="+21621489141";
    char l_a="led_allumé";
    char d_e="dsl_erreur";
      //***reception des appels ***
    void reception_des_appels()
    {
    UART1_Write_Text(cmd);
    UART1_Init(9600);                     // initialisation du protocol USART  avec vitesse d'echange des données de 9600
    UART1_Write_Text(clip);        // initialiser le module GSM de manière à ce qu'il communique les
    UART1_Write_Text(ata)
    }
    
    
    //***reception du message***
    void reception_message()
    {
     UART1_Init(9600);
    Delay_ms(100);
    
    UART1_Write_Text(at);                          // Envoi de la commande AT
    UART1_Write(13);
    UART1_Write(10);                                // Code ASCII equivalent pour ENTRE
    delay_ms(1000);
    
    UART1_Write_Text(cmgf);                 // choisir le mode texte en positionnant en 1
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    
    UART1_Write_Text(cpms);              // la mémoire choisie est  la mémoire de la télephone
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    
    UART1_Write_text(cnmi);       // extraire touts  les message reçus : à vérifier
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
        }
    //***lecture du message****
    
    void lecture_message(){
    UART1_Write_Text(cmgr);               // la lecture du message de l'enplacement 1
    UART1_Write(13);
    delay_ms(1000);
    
    
    UART1_Write_Text(cmgd);             // supprimer le message dans l'emplacement 1
    UART1_Write(13);
    delay_ms(1000);
    }
          //emission message
    
    void Emission_Message(char X){    // X le contenu de notre message
    UART1_Write_Text(at);    // Envoi de la commande AT
    UART1_Write(13);    // Code ASCII equivalent pour ENTRE
    UART1_Write(10);    // Code ASCII equivalent pour (CTRL+H)
    delay_ms(1000);
    UART1_Write_Text(csms);   // Envoi de la commande "AT+CSMS" pour la selection de service de messagerie
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    UART1_Write_text(cmgf);   // Envoi de la commande "AT+CMGF=1" pour la selection du format du SMS le 1 pour le mode TEXT
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    UART1_Write_Text(cmgs);   // Commande pour l'envoi d'un SMS,en indiquant le numéro du destinataire
    UART1_Write(34);               // code ASCII de (")
    UART1_Write_text(num);
    UART1_Write(34);              // code ASCII de (")
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    UART1_Write_Text(X);  // le contenu de notre message
    UART1_Write(13);
    UART1_Write(10);
    delay_ms(1000);
    }
    //programme principale
    void main{
         char R;
        UART1_Init(9600);
        TRISD=0X00;
    
    PORTD.f0=0;
    reception des appels()
    Delay_ms(100);
     loop:
    reception_message();
    Delay_ms(100);
    
    lecture_message ();
    Delay_ms(100);
    
     if(UART1_Data_Ready())
     R=UART1_Read();
    
    if(R==all)
    PORTD.f0=1;
    X=l_a ;
     Emission_Message();
    else X=d_e;
    Emission_Message();
    goto loop
           }

    -----

    Dernière modification par gienas ; 15/03/2013 à 20h01. Motif: Ajouté les balises code obligatoires pour les programmes

  2. Publicité
  3. #2
    spown

    Re : commande à distance par gsm

    Bonjour/bonsoir et bienvenue sur FUTURA,

    C'est quel environnement ça ? et quel model de GSM ? Et qu'est ce qui marche pas exactement ? programme ou la connexion physique ( Donne ton schéma pour voir )

    Qu'est ce que tu comptes faire avec void reception_des_appels() ? et void reception_message() ?

    Pourquoi tu initialises USART plusieurs fois ? il te manque la commande " AT+CMGS=" ( pour envoyer un message )

    Note : faut ajouter les guillemets " avant et après le numéro de destination avec 0x22 en ASCII, puis par la suite "entrée= 0x0D" puis "ctrl+z = 0x1A"
    Dernière modification par spown ; 15/03/2013 à 19h40.

  4. #3
    nesrine.15

    Re : commande à distance par gsm

    merci
    le modem est sous forme d'un téléphone siemens c35i portable lié à un pic 18f6622

  5. #4
    nesrine.15

    Re : commande à distance par gsm

    les void_reception_message et appels sont des fonctions caar aprés dans le programme principale je vais juste faire "appel" pour ces fonctions

  6. #5
    nesrine.15

    Re : commande à distance par gsm

    Code:
    UART1_Write_Text(cmgs);   // Commande pour l'envoi d'un SMS,en indiquant le numéro du destinataire
    UART1_Write(34);               // code ASCII de (")
    UART1_Write_text(num);
    UART1_Write(34);              // code ASCII de (")

    voilà j'ai déja utiliser la commande AT+CMGS et les "
    Dernière modification par gienas ; 15/03/2013 à 20h02.

  7. A voir en vidéo sur Futura
  8. #6
    spown

    Re : commande à distance par gsm

    Mais je sais que c'est des fonctions. MAIS c'est quoi leur utilités pour toi ??

    tu veux allumer juste une led au début. Faut voir la logique de ton programme. Essaye de faire un ménage de ton code.
    Et pour la 2éme fois, pourquoi tu initialises le USART dans chaque appel de fonction ? (On initialise le protocole une seul fois dans le main )

    Et c'est quoi qui ne marche pas ? ( donne nous l'erreur de code , et un schéma si c,est possible pour voir si c'est SOFTWARE ou HARDWARE )

    Merci

  9. Publicité
  10. #7
    spown

    Re : commande à distance par gsm

    Relies bien ton code, ce que t'as utilisé c'est cmgs. Et non "AT+CMGS="

  11. #8
    nesrine.15

    Re : commande à distance par gsm

    écoutez j'ai aucune idée sur les commandes AT j'ai fait des recherches et touts pour avoir une idée sur ces commandes et sur le protocol UART concernat cmgs est une variable déclarée comme une chaine de caractère contenant AT+CMGS
    pour le schéma est un PIC 18F6622 connecté par au portable par RX et TX et des led pour le moment aprés il y aura les max232 et rs232 pour commander l'autmate
    ce que je veux pour le moment c allumer une led via sms

  12. #9
    nesrine.15

    Re : commande à distance par gsm

    vous avez raison ce n'est pas déclarée cmgs mais c ce j'ai fait c 'était pas copiée c ça

  13. #10
    nesrine.15

    Re : commande à distance par gsm

    j'ai utilisé ces fonction pour faciliter la programmation car aprés ça va devenir trés compliqué avec l'automate

  14. #11
    Ridezebigone

    Re : commande à distance par gsm

    bonjour,

    ta séquence fonctionne t'elle à partir d'un terminal de PC ? Pour apprendre les commandes AT, ça sera intéressant pour toi de le faire "manuellement" à partir d'un PC...
    pour la mise au point, je ferai également en sorte de pouvoir observer les messages que j'envoie au modem pendant que mon logiciel tourne (en mettant un fil en 'espion' sur le TX du Pic vers le PC, attention à respecter les niveau TTL/ RS232)

    tu travailles à l'aveugle, pas étonnant que tu galères un peu...
    tu peux diviser tes tempos par 10... tu gagneras du temps à l'éxécution, le modem ne mets pas 1s pour répondre

    tu n'as pas moyen d'intégrer le CRLF dans tes chaines? avec '\r\n' ça ne marcherai pas?

    ta condition if(R==all) ne marchera pas à mon avis, les comparaisons de chaine ce n'est pas aussi simple en C... tu utilises quel compilo?

  15. #12
    HULK28

    Re : commande à distance par gsm

    Bonsoir,

    si ça ne fonctionne pas ça n'a rien d'étonnant, tes commandes ne correspondent pas à ce que tu as déclaré en haut de programme.
    Quels sont les messages d'erreurs après compilation?
    Car il doit y en avoir à regarder ton code.
    Par exemple ça:
    Code:
    UART1_Write_Text(at);                          // Envoi de la commande AT
    comme at n'est pas déclaré....
    Tout est bien qui finit.

  16. Publicité
  17. #13
    HULK28

    Re : commande à distance par gsm

    Et aller mettre un goto là dedans...
    Tout est bien qui finit.

  18. #14
    spown

    Re : commande à distance par gsm

    Est ce que tu lis tout ce que je t'écris. ?? Est ce que tu corriges ce que je t'ai fait remarque ?

    T'as aucune idée sur les AT puis le protocole USART ( déjà ton pic intègre juste de USART pas de UART , bref c'est kifkif )?!! . Et tu te lance à taper des lignes de code en s'attendent à un miracle pour que la led s'allume ?!! ( désoler mais ça marchera pas comme ça )

    Ce que je te suggère, c'est de faire un petit programme d'abord au début pour faire marcher le USART

    C'est très simple : Pic ==> Max232 ( DB9 ) ==> PC, Puis, tu peux utiliser HyperTerminal si t'es sur Xp pour communiquer avec le PIC juste par UART/USART

    Exemple de code: Si ton pic reçoit le caractère "v" il renvoi le caractère "O" afin que tu puisses le voir sur l'HyperTerminal ( je pense que tu sais faire ça en C ? )

    Si la communication est bien établi, Là tu implantes ton module. Ensuite tu déclares les chaines "AT" NÉCESSAIRES. Et faire une simple condition en mode connecté pour allumer la pin désirée. ( enlèves void reception_des_appels() et void reception_message(). qui servent absolument à rien )

    Je confirme que tu peux pas comparer une chaîne avec une simple condition "if (..==..)"

    Soit tu utilises la fonction strcmppgm2ram ( mais ça dépend de ton compilateur ) ou un simple tableau avec indice (pointeur) qui se boucle pour vérifier char par char.

    Voila essaye de s'avancer un peu, et si t'as des erreurs de code fait un simple copier/coller ici.

    Cordialement

Sur le même thème :

Discussions similaires

  1. commande à distance par gsm
    Par nesrine.15 dans le forum Électronique
    Réponses: 6
    Dernier message: 19/02/2013, 14h20
  2. Commande par GSM
    Par commandodez dans le forum Électronique
    Réponses: 81
    Dernier message: 28/12/2011, 11h27
  3. commande à distance par GSM
    Par maxence1983 dans le forum Électronique
    Réponses: 4
    Dernier message: 02/05/2011, 23h21
  4. Commande par gsm
    Par dipoko dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 20/09/2009, 15h26
  5. commande par GSM
    Par DuComte dans le forum Électronique
    Réponses: 2
    Dernier message: 06/04/2008, 17h34