Envoi de sms depuis un module de developpement A9G pudding

Et oui! encore un article sur l’envoi de SMS! Cette fois nous allons le faire depuis un module A9G pudding. J’espère que ce sera le deuxième dans une série sur ce module. Mon projet est de faire un système de suivi GPS avec enregistrement du tracé sur une carte SD et envoi à la demande de la position par sms.

Je reprend là où j’ai laissé l’article précédent (
https://www.twiggotronix.com/fr/a9g-pudding-module-de-developpement/ ) qui explique comment mettre en place le sdk et uploader notre premier programme.

J’ai créé un repo sur github où vous pourrez trouver le code relatif à cet article :
https://github.com/twiggotronix/a9g-pudding-sms

J’avoue que je me suis grandement inspiré des exemples de démo qui sont plutôt bien faits. Ce code va envoyer un sms au démarrage du module pour signaler qu’il est en route et puis renvoyer le contenu des messages qu’il reçoit.

Configuration

La seule configuration est celle du numéro de téléphone qui va recevoir les messages. Il suffit de dupliquer le fichier include/app_main_example.h, le renommer en include/app_main.h et renseigner le numéro de téléphone (j’ai pas essayé d’autres formats mais ça marche bien avec le format “+336XXXXXXXX”). Cette manipulation permet d’ignorer le fichier dans git.

vous pouvez compiler et uploader le code comme ça et vous devriez recevoir un message contenant ” Ready and able! “.

Evénements

Nous pouvons savoir quand le module est enregistré sur le réseau et pret à communiquer (ou non en cas d’erreur) grâce aux événements. A chaque événement, la fonction EventDispatch est appelé avec un objet contenant des informations décrivant ce qu’il c’est passé (dans la boucle while de la tâche principale ). Par exemple, lorsque l’id de l’événement correspond à la constante API_EVENT_ID_NETWORK_REGISTER_SEARCHING , cela signifie que le module est en train de chercher le réseau. Vous pouvz trouver la liste des événements possibles dans /include/api_inc/api_event.h. l’événement

void EventDispatch(API_Event_t* pEvent)
{
    
    switch(pEvent->id)
    {
        case API_EVENT_ID_NO_SIMCARD:
            Trace(10,"!!NO SIM CARD%d!!!!",pEvent->param1);
            break;
       ....
    }
}

Note: Au moment où je pensais avoir quelque chose de stable, le module a arrêté de communiquer correctement… En ajoutant un cas dans le switch, j’ai pu voir que j’avais une erreur d’enregistrement sur le réseau ( API_EVENT_ID_NETWORK_REGISTER_DENIED ). Je ne suis pas sûr mais j’ai l’impression que cette erreur est venue du fait que mon antenne c’est détachée du module qui s’est mis à remarcher depuis…

Envoi de messages

Pour envoyer un message j’ai créé la fonction SendSMS (j’ai juste extrait la partie du code qui gère l’envoi dans la demo sms) qui prend en paramètre uint8_t message[] et l’envoi au numéro paramétré.

void SendSMS(uint8_t message[])
{
    uint8_t* unicode = NULL;
    uint32_t unicodeLen;
 
    Trace(1,"sms start send UTF-8 message");
 
    if(!SMS_LocalLanguage2Unicode(message,strlen(message),CHARSET_UTF_8,&unicode,&unicodeLen))
    {
        Trace(1,"local to unicode fail!");
        return;
    }
    if(!SMS_SendMessage(PHONE_NUMBER,unicode,unicodeLen,SIM0))
    {
        Trace(1,"sms send message fail");
    }
    OS_Free(unicode);
}
 
SendSMS("Ready and able!");

Réception des messages

Lors de la réception de l’événement API_EVENT_ID_SMS_RECEIVED on peut récupérer le contenu du message dans l’attribut pParam2 (pEvent->pParam2). Dans mon code, la fonction messageRecieved récupère le contenu et le renvoi par sms. Vous pouvez aussi récupéré le numéro qui a envoyé le sms reçu dans l’attribut pParam1 (qui contient les entêtes du message) mais ça demande un peu plus de travail pour l’extraire de la chaîne de caractères. N’hesitez pas à nous dire comment vous vous y prendrez!

void messageRecieved(uint8_t* content)
{
    char buffer[200];
    snprintf(buffer, sizeof(buffer), "Message received : %s", content);
    Trace(1, buffer);
    SendSMS(buffer);
}

void EventDispatch(API_Event_t* pEvent)
{
    switch(pEvent->id)
    {
        case API_EVENT_ID_SMS_RECEIVED:
            Trace(2,"received message");
            uint8_t* content = pEvent->pParam2;

            Trace(2,"message header:%s",header);
            Trace(2,"message content length:%d",contentLength);
            messageRecieved(content);            
            break;
    }
}

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>