commande à distance par gsm
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

commande à distance par gsm



  1. #1
    invite7ddbd48e

    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 à 21h01. Motif: Ajouté les balises code obligatoires pour les programmes

  2. #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 à 20h40.

  3. #3
    invite7ddbd48e

    Re : commande à distance par gsm

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

  4. #4
    invite7ddbd48e

    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

  5. A voir en vidéo sur Futura
  6. #5
    invite7ddbd48e

    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 à 21h02.

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

  8. #7
    spown

    Re : commande à distance par gsm

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

  9. #8
    invite7ddbd48e

    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

  10. #9
    invite7ddbd48e

    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

  11. #10
    invite7ddbd48e

    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

  12. #11
    invite05fc252b

    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?

  13. #12
    invite5637435c

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

  14. #13
    invite5637435c

    Re : commande à distance par gsm

    Et aller mettre un goto là dedans...

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

Discussions similaires

  1. commande à distance par gsm
    Par invite7ddbd48e dans le forum Électronique
    Réponses: 6
    Dernier message: 19/02/2013, 15h20
  2. Commande par GSM
    Par invite05589de6 dans le forum Électronique
    Réponses: 81
    Dernier message: 28/12/2011, 12h27
  3. commande à distance par GSM
    Par invite50d6a215 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/05/2011, 00h21
  4. Commande par gsm
    Par invite082061e7 dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 20/09/2009, 16h26
  5. commande par GSM
    Par invite6c248c41 dans le forum Électronique
    Réponses: 2
    Dernier message: 06/04/2008, 18h34
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...