[ Accueil ] [ CONTACT ] [ PLAN du Site ] [ RCNV ] [ Publications ] [ Chantiers Bateaux ] [ Technique Modélisme ] [ Electronique ] [ Radios Vintage ] [ Multi-Switch ] [ Vrac ] [ Astuces ] [ Liens ] [ Base ] [ Compteur ]
 

         ... rgl

 

Gestion d'Envoi et

de Réception de SMS

 avec Module GSM/GPRS

(c)2018  R.LEGAT 

 

SOMMAIRE:

01 -  Introduction - Présentation - Généralités

02 - Modifications recommandées aux kits à base de la puce Neoway M590E

03 - Carte SIM et opérateurs gratuits

04 - Désactivez le code PIN de votre carte SIM !

05 - Contrôle des modules GSM / SMS / GPRS - Port UART

06 - Test du module avec une interface USB/Serial

07 - A propos du SIM800L

08 - Télécommande à SMS

09 - Programme de télécommande

10 - Programme Alarme 4 zones

  

      Introduction - Présentation - Généralités

Dans le courant de cette étude, nous allons nous intéresser à deux modules disponibles pour à peine quelques cents, sous forme de modules complet ou en simple kit DIY (Do It Yourself) à souder !
Le NEOWAY M590E et le SIM800L...

Il sont apparemment souvent issus du marché du recyclage des anciens GSM.
Ils utilisent la bande de communication 2
G qui semble cependant voué à une mort programmée dans certaines régions du Globe...
Mais en attendant... amusons-nous sans nous ruiner.

Que pouvons-nous envisager de développer comme projet avec ces modules ?

L'idée première a été de m'intéresser à un système d'alarme qui transmettrait un SMS vers un GSM, et qui préciserait, par exemple, la nature du problème ou la zone en alarme.

  Exemples: "Effraction au hangar nr 3", "Incendie dans cuve nr 02", "surchauffe du moteur 04", ...

Nous chercherons également à commander une action à distance par envoi d'un SMS spécifique.  http://a110a.free.fr/SPIP172/article.php3?id_article=162

  Exemples: "Ventilo 03 = ON", ...


             Deux kits différents, mais totalement compatibles, à base de la Puce Neoway M590E pour moins de 2 euros !

  
                                                              Un autre module prêt à l'emploi à base du SIM800L

      Modifications recommandées sur le Kit :  NEOWAY M590 / M590E

Pins Out du Neoway M590 / M590E

Schéma d'usage

Schéma du kit

Avant de se lancer tête baissée dans l'utilisation des modules à base du Neoway 590E présentés ci-dessus, une petite lecture du Data Sheet de cette puce nous apprend qu'il serait incertain voir même très imprudent de le mettre sous tension sans avoir préalablement procédé à quelques modifications !

En effet, pour produire un kit simple, rapide à souder et très peu onéreux, quelques précautions parfois indispensables semblent avoir été négligées !

Ainsi, afin d'optimiser le fonctionnement de ces kits et modules en toutes circonstances et conditions d'utilisation, quelques adaptations sont nécessaires et expliquées juste après.

ALIMENTATION

Un des nombreux points en commun de ces puces est la tension d'alimentation.
Il est indiqué une tension d'alimentation comprise entre 3,8V et 4,2V mais on recommande une tension de l'ordre de 3,9 Volts.

 

Cependant, afin de "rendre compatible" ces kits avec la plupart des MCU alimentés en 5V (Arduino, Picaxe, ...) et pour produire des kits à prix très réduit, les concepteurs ont imaginé alimenter ces modules en 5 volts mais en placant alors une diode en série sur la pin d'alimentation de la puce.

La diode induisant une chute de tension moyenne de 0,7 volt on avoisinerait ainsi environ 4,3 volts pour alimenter la puce en régime normal.

  

 

 

Ce procédé peu élégant présente cependant un problème majeur !

En effet, en phase d'émission, la puce va provoquer un pic de consommation de l'ordre de 2 Ampères !

A ce moment, par l'augmentation du courant la traversant, la diode chutrice va voir sa différence de potentiel augmenter et faire chuter d'autant la tension d'alimentation de la puce.

Cette chute soudaine de tension suffit souvent à faire "décrocher" le système et interrompre la communication avec le réseau !

Modifications prescrites:
 

Afin de garantir un système stable, il est ainsi recommandé de supprimer diode chutrice et la remplacer par un strap conducteur.

Le circuit devra alors être alimenté par une alimentation stabilisée externe de 3,9 à 4V. et pouvant délivrer sans broncher des demandes sporadiques de 2A.

Il est en outre recommandé d'ajouter deux condensateurs de filtrage en parallèle à C1.

A noter également que le condensateur C1, livré d'origine, peut être remplacé par une capacité de valeur plus importante.
C'est elle qui va jouer le rôle de tampon lors des pics d'appel des  2 Ampères induits lors des phases d'émission.

 
         Exemple d'une alimentation à base du régulateur ajustable LM317 (1,5A )
        On peut également utiliser un LM350, full compatible, mais qui délivre 3A.

 Afin de calibrer exactement la tension de sortie, R2 sera remplacée par une résistance ajustable.

                               

       Site de calcul de ce type d'alimentation réglable :

      http://diyaudioprojects.com/Technical/Voltage-Regulator/

 

 

Si la tension d'alimentation est trop faible, le module risque de ne pas démarrer.
Si la tension est trop élevée ou s'il y a une décharge de tension au démarrage, le module peut être endommagé de façon permanente.
Enfin, assurez-vous que votre alimentation puisse fournir au moins 2 A de courant.

 NIVEAUX D'ENTREES

Le point qui me parait vraiment le plus préoccupant est assurément la recommandation faite sur la limitation des tensions à appliquer à l'entrée RX du circuit M590E !
Malheureusement on ne peut constater que rien n'a été prévu à ce sujet sur ces kits !

Et suivant la tension d'alimentation du MCU utilisé (3.3V ou 5V) les adaptations devront même être différentes et particulièrement soignées !

Je vais donc reprendre ici les spécifications précisées dans le DataSheet de cette puce...
( Petite parenthèse préalable, je ne peux que vous conseiller de toujours lire les DataSheets des composants que vous comptez utiliser ! )

La tension d'entrée maximale sur tous les ports I/O du M590E V1 ne peut pas dépasser 3,1 V,

Travaillant au niveau logique CMOS de 2,8V, la valeur typique d'entrée sera même de 2,8V !

Avec l'usage d'un Microcontrôleur, la tension de sortie d'E / S provenant du MCU alimenté en 3,3 V risque de dépasser largement  ces 3,1 V !
Et dans le cas d'un MCU travaillant en 5 Volts, comme le Picaxe, il faudra évidemment prendre encore d'avantage de précautions.

Dans ce cas de surtension, les broches E / S du M590E peuvent être endommagées si les signaux E / S d'un tel MCU sont connectés au port E / S de ce système 2.8 V.
Pour rectifier ce problème, il va falloir prendre des mesures pour adapter les niveaux.

Si l'UART est interfacé avec une MCU travaillant avec des niveaux logiques de 3,3 V, voire 5 V, il est recommandé d'ajouter un circuit de décalage de niveau à l'extérieur du module !

Circuit recommnandé dans le DataSheet pour une communication entre un MCU alimenté en 3,3V et l'UART

  RX_Gprs 

Dans le cas d'un MCU alimenté en 3,3V,  il est impératif d'ajouter à la broche7 RX, le circuit composé d'une diode Schottky et de R i/o afin de limiter la tension d'entrée.

Concernant la valeur de R i/O, le DataSheet du M590 indique 4k7 alors que celui du M590E donne 47K !?

Des modèles RB521S-30TE-61, RB521SM-30GJT2R, et LRB521S-30T1G sont recommandés pour le choix de la diode schottky.

En outre l'ajout de condensateurs de filtrage est aussi recommandé au plus proche des broches RX et VCC_IO.

 

TX_Gprs 

Un fltre RC, passe bas, est conseillé.

La résistance (200 O à 470 O) et la capacité (100 pF à 470 pF) peuvent être sélectionnées en fonction de l'onde de signal testée.

Une grande résistance en série et une grande capacité de filtrage réduiront le niveau du signal, ce qui se traduira par une grande distorsion de l'onde du signal et une faible vitesse de transmission de l'UART.

 

 Circuit recommnandé dans le DataSheet pour une communication entre un MCU alimenté en 5V et l'UART

 

 

                               Unidirectional
               Logic Level Adapter-Converter

Lorsque le MCU externe adopte un système d'E / S de 5 V, la protection réalisée avec le circuity présenté ci-dessus ne sera pas suffisante.

Un circuit d'adaptation des niveaux logiques (LLC) est alors requis, à la fois pour la réception UART et pour la transmission !

Pour descendre le niveau de 5V à 2,8 V, un simple pont diviseur à deux résistances conviendra.

Par contre, pour élever le niveau de 2,8 V à 5Volts, le schéma de principe est repris ci-contre.

INPUT est connecté au TX du MCU et VCC_IN est connecté à l'alimentation 5 V du MCU.
OUTPUT est connecté au RX du module et VCC_OUT est connecté à VDD_EXT (2.8V) du module.

Si le circuit est éloigné de la broche VDD_EXT, ajoutez un condensateur de découplage de 0,1 µF à VCC_OUT.
Le décalage de niveau entre URXD du MCU et UTXD du module peut être implémenté de la même manière.
La résistance de rappel R3 est comprise entre 4,7 K et 10 K; R2 est compris entre 2 K et 10 K.
Les résistances sont sélectionnées en fonction de la tension de l'alimentation et de la vitesse de transmission UART.
Vous pouvez sélectionner des résistances ayant une grande résistance pour réduire la consommation d'énergie lorsque l'alimentation est très élevée ou que la vitesse de transmission est faible. Mais, la résistance affectera la qualité de l'onde carrée.
De plus, les performances du circuit sont affectées par les traces de signal lors de la mise en forme du circuit imprimé.
Il est recommandé de choisir un transistor NPN à haute vitesse car le taux de commutation du Q1 affectera la qualité de l'onde après le changement de niveau. Des MMBT3904 ou MMBT2222 sont recommandés.

Des circuits "LLC" (Logical Level Converter) sont heureusement aujourd'hui miniaturisés pour faciliter notre usage.
Ces petits "adaptateurs de niveaux logiques" (Logic Level Adapter/Converter) sont alors conçus avec des transistors MOS-FET miniaturisés.

L'avantage d'un tel circuit à base de MOS-FET est qu'il est bidirectionnel !
C'est à dire que dans un sens, il peut abaisser le niveau (ce qui se faisait de manière unidirectionnelle avec un pont diviseur de tension à résistances) mais dans l'autre sens il peut augmenter le niveau logique.
Le niveau Bas (LV) et le niveau Haut (HL) sont connectés séparément sur ces petits modules.

Le schéma de principe d'un tel LLC bidirectionnel est repris ci-dessous et un tel module à 4 canaux est ici repris en photo.

                               
            Principe d'un LLC bidirectionnel                                  LLC bidirectionnel à 4 canaux                                               Système LLC obsolète.
                                                                                                                                                                       Abaissement de niveau, unidirectionnel,  par pont diviseur à 2 résistances

 

     Carte SIM et opérateurs gratuits

  Tester ces petits modules en s'amusant c'est bien, mais il faudra surtout avoir une carte SIM dont le coût d'usage restera abordable!

En Belgique, on a bien des cartes pré-payées des opérateurs habituels Proximus, Base, Orange, ...
Cependant, qui dit carte prépayée dit recharge à temps depuis un "MisterCash" ou par achat d'un ticket de recharge.
MAis ... nos systèmes ne comportent pas de clavier pour introduire les opérations de recharge...

Et surtout, dans le cas d'un système d'alarme, il ne faut absolument pas oublier de recharger !
Ce n'est donc pas la meilleure solution, d'autant plus qu'on peut trouver bien moins cher...

Un abonnement peut-être ?
Payer obligatoirement une somme fixe par mois pour quelques SMS annuels alors même qu'il reste du crédit sur la carte, est assurément dispendieux.

Se présentent alors deux autres solutions à envisager :

1) Le contrat BASE-0

L'opérateur BASE propose un abonnement mensuel à zéro Euro.
Cette carte est GRATUITE et on ne paie plus rien d'autre que le SMS facturé à 0,10€/SMS.

L'acquisition tout comme la redevance mensuelle sont donc ici totalement gratuites
.

On ne paie donc que les SMS que l'on consomme.
Donc, ici... aucune mauvaise surprise ! Votre système sera toujours opérationnel et sans "faux frais".

La seule "contrainte" étant de devoir en faire usage au moins une fois par an... faute de quoi la carte est automatiquement désactivée et perdue !

 

     Désactivez le code PIN de la carte SIM !

 

 Les cartes SIM sont généralement protégées par un code PIN.

Après 3 erreurs d'introduction de ce code, le code de plus haute sécurité PUK vous est alors demandé.
Et après une dizaine de faux codes PUK ... la carte est irrémédiablement mise hors service !

Il est donc conseillé, pour nos expérimentations, de désactiver le code PIN afin de laisser un total libre accès à la carte
en ayant ainsi la certitude de ne jamais rencontrer un problème de requête du code qui bloquerait la carte.
En effet, cela risquerait assurément de nous échapper puisque qu'il n'y pas de gestion de l'affichage de ces demandes de code d'accès.

Pour désactiver le code PIN de votre carte SIM, il faudra l'insérer dans votre GSM habituel et rentrer dans les paramètres de sécurité de votre portable.
La procédure diffère suivant les modèles. Il faudra donc vous reporter au mode d'emploi de votre téléphone portable...

 

      Contrôle des modules GSM / SMS / GPRS - Port UART

Rappellons préalablement ici quelques termes techniques:

  GSM   :  Global Système for Mobile
  GPRS : General Packet Radio Service ... à ne pas confondre avec:
  GPS    : Global Positionning Systeme !
  SMS    : Short Message Service
  UART :  Universal Asynchronous Receiver Transmitter

Pour communiquer et pour être controlés, ces modules utilisent donc un protocole Série, appliqué sur leur Port UART.

Un port UART se reconnait par ses broches identifiées Vcc, TX, RX, Gnd.
Outre les lignes d'alimentation, un tel port n'utilisera ainsi que deux pins de votre MCU.

Les vitesses de transmission prises en charge par l'UART du module M590E sont de: 9600, 14400, 19200, 38400, 57600, 115200 bit / s et le taux par défaut est de 115200 bit / s.

  Notez ici que ces modules peuvent déjà être testés très facilement sans nécessiter le moindre MicroContrôleur !

En effet, on peut utiliser un simple convertisseur USB/UART disponible pour une pincée d'Euros.

Il en existe à base de la puce PL2303 de Prolific dont le niveau de sortie est fixé à 3,3 volts.

D'autres convertisseurs, à base, par exemple, de la puce FTDI232, délivrent des signaux de sortie qui peuvent être sélectionnés à 3,3 volts ou à 5 volts.


Lisez cependant bien les recommandations prescrites ci-dessus, relatives à l'UART des modules GPRS qui ne supportent pas plus de 3 volts en entrée !!!

Les commandes seront rentrées et les réponses du système seront lues à l'écran du PC, grâce à un programme de type Console "Hyper terminal" (PUTTY, Tera Term, ...)

Et puisqu'on parle ici de commandes ... quelles sont-elles ?

Ces modules se contrôlent par un jeu de commandes textuelles appelé Code AT (ou encore "Code Hayes" du nom de l'entreprise qui a commercialisé les premiers Modems dits intelligents).

Les commandes AT sont définies dans la norme GSM 07.07.AT .

Le jeu se compose de commandes textes, simples et toujours  préfixées par les lettres "AT".

Vous pouvez facilement les trouver sur le Web.  (http://www.avislab.com/blog/wp-content/uploads/2015/10/Neoway_M590_AT_Command_Sets_V3.0.pdf)

Je vous invite à télécharger ce fichier et étudier les diverses commandes utiles.

Elles seront très largement utilisées dans les programmes édités à la fin de cette étude.

Enfin, derniere recommandation, évitez d'entamer une transmission de données vers l'UART dès la mise sous tension du module.
Il est ainsi conseillé d'envoyer les données à l'UART 3 secondes après la mise sous tension du module afin que le module réponde correctement et sans erreur.

Et maintenant, Bon amusement ... ;))

  

      Test du Module avec interface USB/Serial

Outre l'aspect ludique de ce paragraphe, je ne saurais que vous conseiller de tester votre module par ce procédé, utilisant un convertisseur USB/Serial UART, avant toute implantation dans votre projet à MCU.
En effet, vous aurez ainsi la certitude absolue du bon fonctionnement de votre module, écartant d'emblée un problème de ce côté en cas de dysfonctionnement de votre projet.

Nous allons donc nous amuser un peu en envoyant quelques commandes AT au module.
Vous devrez ainsi le connecter à votre PC par l'intermédiaire d'un adaptateur USB/Série et ouvrir un hyper-terminal du style Putty, UTF8-Terra Term, ...

Assurez vous que les tensions issues de votre adaptateur, délivrées sur les broches TX et RX, ne dépassent pas les tensions limites recommandées !
 (lisez bien les recommandations sur la limite des tensions d'entrée TX et RX, ci-dessus)
Veillez également à supprimer le code PIN de votre carte SIM.
Alimentez le module...

Après avoir lancé le programme de la Console Terminale, il sera nécessaire de configurer le port utilisant le convertisseur en lui précisant la bonne vitesse de transmission.
Commencez avec 9600 et tapez votre première commande avec les lettres AT.
La réponse devra être OK.
Si vous lisez des caractères "bizarres", changez la vitesse de transmission.
Essayez les valeurs standards jusqu'à obtenir du texte lisible.
Vitesses à  essayer: : 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 b/s

Vérifiez aussi, si nécessaire, la vitesse autorisée du Port dans le Panneau de Configuration / Système/ Périphériques / Ports COMxx .

Nous voilà prêt à tester la bête !

Au démarrage du module, vous verrez dans la fenêtre du terminal le message MODEM: STARTUP

Et si vous avez bien enlevé la protection du code PIN de votre carte SIM, vous verrez alors, après un petit temps d'attente, le message +PREADY

Ce message signifie que le "répertoire téléphonique" est accessible.
Cela indique également que le modem GSM est en ordre de marche, qu'il peut lire la carte SIM et que votre source d'alimentation peut fournir la quantité suffissante de courant.

Si la phase de démarrage se répète plusieurs fois, vous avez probablement un problème de source d'alimentation !
Vérifiez aussi la qualité de vos connexions, soudures, ...

On va enfin pouvoir aller un peu plus loin maintenant...

1) Tapez   AT
     Le modem répond OK

2) Par défaut, le M590E ne donne aucune description ou code d'erreur lorsqu'une commande entraîne une erreur.
     Nous allons remédier à cela en autorisant la description des éventuelles erreurs:
        Tapez   AT+CMEE=2
         Le modem répond  OK

3) Obtenir la vitesse de communication:
       Tapez   AT+IPR?
        Le modem répond, par exemple ceci:  +IPR: 9600

4) Lisons le numéro d'identification de la puce
      Tapez AT+CGSN  (Pas de "?")
       Le modem répond en donnant le n° généralement gravé sur la puce: 355911043318681
 

5) Communiquons maintenant avec la carte SIM
       Tapez   AT+CPIN?
       Si votre carte PIN n'a pas défini de code PIN le modem répond  +CPIN: PRET

6) Lisons le n° d'identification de la carte SIM:
     Tapez AT+CCID (Pas de "?")
       Le modem répond 8971040000201970896

7) Vérifions alors si le modem a pu se connecter à un réseau GSM
       Tapez  AT+CREG?
        Si une connexion a été réalisée
         le modem répond +CREG: 0,1
           Si vous obtenez une autre réponse (v. tableau ci-dessous) c'est que votre modem n'a pas pu accrocher le réseau de votre fournisseur GSM.
           Cela peut provenir du fait d'une antenne inefficace qui ne peut collecter un signal radio-fréquence suffisament fort.
           Essayez en changeant la position du module GSM ou utilisez une meilleure antenne ...

La syntaxe de cette réponse est  +CREG: <mode>,<state> dont voici l'explication des valeurs:

        

 

                  

    Saisie écran de la console Hyper Terminale Tera Term

8) Lisons maintenant la puissance du signal RF
       Tapez  AT+CSQ   (Pas de "?")
        La réponse pourrait être similaire à  +CSQ: 29,0

La syntaxe de cette réponse est  +CSQ:<rssi>,<ber> dont voici l'explication des valeurs:

    

 Table issue des données du DataSheet

 

 

 

 

 

 

 

 

Lors de tests pratiques, avec une valeur de 17 l'envoi de SMS était possible.

Mais à 16, l'envoi de SMS a échoué !

La qualité de l'antenne est cependant déterminante !

 

Avant d'incriminer votre montage, contrôlez d'abord le RSSI de votre réseau GSM local à l'aide de ... votre GSM !

Celui-ci indique généralement le Received Signal Strength Indication (RSSI), par un indicateur à 5 barrettes.
Il ne faudra pas en compter moins de deux.

Vous pouvez aussi configurer votre GSM pour une indication, en clair, des dBm, dans les paramètres sytème.  

 

 

 

 

* Le parametre <ber> est mesuré sur le trafic du canal et n'est en fait disponible uniquement que pendant une conversation.

   Au repos, comme dans le cas d'une transmission de SMS, cette valeur technique ne doit donc pas être prise en compte.

 
9) Demander le nom du fournisseur du service GSM
      Tapez  AT+COPS?
       Le modem répond, par exempe  +COPS: 0,0 "BASE" 

10) Envoyons maintenant notre premier SMS !
        Tapez AT+CMGF=1              (SMS in TEXT Mode)       La réponse est OK
        Tapez AT+CSCS="GSM"   (GSM Default Alphabet)    La réponse est OK

        Indiquez maintenant le numéro de GSM sur lequel vous voulez envoyer le SMS
        Tapez AT+CMGS="+3241234567"

       Après avoir appuyé sur la touche ENTER, vous pouvez commencer à écrire votre message:
        > Envoi d'un premier SMS de TEST
       Validez en appuyant simultanément sur CTRL et Z pour terminer la saisie et valider l'envoi du SMS

      Si l'intensité de votre signal RF est correcte vous ne tarderez pas à reçevoir une réponse de votre modem.
         Exemple: +CMGS: 19  suivi de OK   signifiant: SMS expédié, c'est le 19ème avec cette carte SIM.

Amusez-vous en essayant d'autres commandes AT dont voici encore une liste bien documentée: http://www.logicbus.com.mx/pdf/31/Comandos_AT_generales.pdf
Attention, toutes ne sont pas implémentées dans le M590E !

11) Rappel de la dernière commande
         Tapez A/ 

12) Régler l'heure de la RTC du modem
         Tapez AT+CCLK="18/04/06,16:25:57"    Le modem répond OK

13) Vérifiez l'heure et la date un peu plus tard...
         Tapez AT+CCLK=?    Le modem répond +CCLK: "18/04/06,16:29:32"

 Et voilà, vous avez construit votre premier "GSM opérationnel" qu'il ne vous restera plus qu'à installer dans une application pilotée par votre MCU préféré.

 

      A propos du SIM800L

Les modules SIM800 sont la version améliorée de la précédente série réussie de modules SIM900 GSM / GPRS / GPRS SIM900.
Il existe plusieurs sous-versions de chaque série, chacune d'entre elles répondant à un ensemble différent d'utilisateurs et d'applications.

SIM900 existe sous la forme de la version complète Quad band SIM900 et la version dual band SIM900A, SIM900D

SIM800 se trouve sous la forme de la version complète Quadri-bande SIM800 et de taille compacte comme les SIM800C, SIM800L, SIM800F etc.

Chaque module répond à une application différente.

Ainsi, par exemple le module GSM:
   SIM800C dispose d'une pile Bluetooth
   SIM800L a une fonctionnalité FM
   SIM800F est compatible "pin to pin" avec le module SIM900
   SIM808 intègre une puce GPS
   etc ...

Tous ces modules ont des boîtiers et des dispositions des pins très différentes.

              

         

Les modules SIM800L, SIM800H, ou SIM800DS par exemple, ne pourront être soudés par un amateur car il ne disposent pas de pins périphériques.
Les dizaines de pins sont en fait des pads cuivrés disposés sur la face inférieure du module.
Il ne pourront donc être soudés sur le circuit imprimé que grâce à un four à fusion et suivant une courbe de chauffe très spécifique.

Le module GSM SIM800L est donc l'un des plus petits modules GSM du monde avec une taille de 2.2 cm x 1.8 cm.
C'est un module puissant qui démarre automatiquement et recherche immédiatement le réseau.
Il inclut notamment le Bluetooth 3.0+EDR et la radio FM (récepteur uniquement).
Il vous permettra d'échanger des SMS, de passer des appels mais aussi, et c'est nouveau, de récupérer de la data en GPRS 2G+.
Ainsi vous pourrez faire transiter des données sur une très longue distance, si par exemple la radio FM ou le Bluetooth ne vous suffit plus.

Des fonctions micro et audio sont implémentées dans ces modules permettant ainsi la conception d'un véritable GSM.
Pour les tester, il faudra disposer d'un module permettant des connexions vers les pins assignés à ces fonctions.

Il sera ainsi possible, par exemple, de transmettre des messages préenregistrés dans un module MP3 comme celui étudié ici.

Exemple (parmi d'autres) : https://www.adafruit.com/product/1946
Traduction :  https://arduino103.blogspot.be/2015/12/fona-un-module-gsm-pour-vos-projet-fin.html

Pourquoi avoir testé le module SIM800L ?

En fait, après avoir essayé un module NEOWAY M590E,  je le trouvais bien peu réceptif (faible RSSI affiché) et  j'ai voulu tester un SIM800L en espérant obtenir de meilleurs résultats.

Mais ... dans un cas comme dans l'autre, la réponse à ma demande d'obtenir l'indice du RSSI (AT+CSQ) n'était pas très satisfaisante.

Ainsi, retenez que pour vérifier que vous n'êtes pas dans une zone mal couverte par les antennes émettrices, il y a un moyen très simple de vérifier si votre montage pourrait être incriminé en cas de mauvais RSSI. Cela pourrait en effet être du à une mauvaise antenne, de mauvaises soudures, une alimentation insuffisante, ...

Le moyen le plus simple est de d'abord vérifier la qualité RSSI de votre réseau local à l'aide de ... votre GSM !!!

En effet, celui-ci affiche habituellement la puissance RSSI sous forme d'un indicateur à 5 barrettes.
Il faudra en disposer de deux, voire trois au minimum.

En outre, en entrant dans les Paramètres/Propriétés de votre GSM, il est possible d'afficher la valeur RSSI en dBm, pour vous reporter ensuite au tableau d'interprétation (ci-dessus).

Et dans mon cas, la couverture réseau était très mauvaise à l'endroit où je faisais mes programmes d'essai.

Voilà, il ne vous reste plus qu'à choisir l'un ou l'autre des modules présentés sur cette page et vous lancer, avec amusement, à la découverte des codes AT.
 

      Télécommande à SMS

Nous avons vu, ci-dessus, les commandes nécessaires pour que le module envoie un SMS vers un GSM de votre choix.
Cela nous permettra, par exemple, de réaliser une alarme qui nous préviendra, par envoi d'un SMS, en cas de déclenchement (Incendie, effraction, surchauffe, ...)
Le programme d'une alarme à 4 zones est édité plus bas.

Voyons maintenant comment commander une action par SMS et reçu par le module.

L'utilité de telles commandes ne trouvera ses limites qu'à la frontière de votre imagination (Dé/Verrouillage de porte,  allumage chauffage, éclairage, stores solaires, alimentation d'animaux, ...)

Lorsqu'un SMS est reçu par le module, il est stocké dans la mémoire, limitée, de la carte SIM.
Après lecture, interpretation et activation de la commande, il sera donc opportun d'effacer le message de commande.

Toutes ces opérations se réalisent aisément avec ...  vous l'aurez deviné, les commandes AT.

Testons d'abord avec notre interface USB/Serial.

Réception d'un SMS

1) Depuis un GSM, on émet vers notre module à carte SIM, ce SMS : "First SMS TEST"

2) Le module reçoit le SMS *
      +CMTI:"SM",3     apparaît sur l’écran indiquant qu'un nouveau SMS est arrivé, ici en position 3

3) Lecture du SMS.
     Tapez    AT+cmgr=3   pour lire la position 3

       +CMGR: "REC UNREAD","+32412345xxx","","18/04/19,01:30:28+08"

       First SMS TEST            Vous noterez les mentions "REC UNREAD", le N° de l’émetteur, la date an/mois/jour, l'heure et le fuseau

       OK

4) Si vous retapez la même commande de lecture AT+cmgr=3   pour tenter de relire l'adresse 3

    vous obtiendrez::    +CMGR: "REC READ","+32412345xxx","","18/04/19,01:30:28+08" 

    First SMS TEST    Vous noterez ici la nouvelle mention "REC READ" suivie des autres inchangées.

    OK

5) Effacement du message après usage.
        AT+cmgd=3       Effacement du SMS en adresse 3

   OK

6) Vérification de l'adresse 3 sur la carte SIM
      AT+cmgr=3 
      Réponse :   OK   C'est à dire Rien à lire  !

* Dans le cadre d'une gestion de la réception d'un SMS par Système à Microcontrôleur, l'entrée RX sera soit "scannée" en boucle, soit gérée par une Interruption.

 

     Programme TELECOMMANDE

Allumage d'une lampe,  et ACK de confirmation

Cahier des Charges:

  Le signal de commande d'allumage d'une lampe sera émis depuis n'importe quel GSM: "Light 1 ON"

  Le Picaxe reste en attente permanente d'un éventuel SMS sur l'entrée Série.
  On peut pratiquer par pooling (scan en boucle), ou, par Interruption.   Voir ici la comparaison entre les 2 méthodes.

  Tout SMS reçu contiendra donc toujours: le numéro GSM de l’émetteur, le message à interpréter, la date et l’heure d’émission.

  Le message "Light 1 ON" sera traité par le Picaxe et allumera, dans le cas de notre programme d'essai, une Led.
  Celle-ci pouvant être conjointe à un transistor de commutation et un relais de puissance, ...

  Le Picaxe retournera alors un SMS d’accusé de reception vers le donneur d'ordre "Ordre reçu : Light 1 ON = OK"

  Si le SMS reçu n'est pas prévu et/ou n'a pas été compris par le module, celui-ci émettra le SMS "Ordre non compris".

 

 

 

     Programme ALARME

Alarme 4 zones à base de Picaxe et du module M590/M590E

  

-----

'=============================================================================================

' NEOWAY M590 GSM/GPRS Module

' 4 input Alarm System

' Sending SMS when alarm actived

' 14M2 + Serial OLED 20x4 Display

' Improvement of: http://www.picaxeforum.co.uk/showthread.php?29280-Neoway-M590-GSM-Texter

'

'=============================================================================================

 

#rem

 

Data to Display   = C.1 to Serial OLED Module

Data to   RX_M590 = C.2

Data from TX_M590 = C.3

Alarm1 Input on B.1 Active Low (Place a R10K PullUp)

Alarm2 Input on B.2 Active low (Place a R10K PullUp)

Alarm3 Input on B.3 Active Low (Place a R10K PullUp)

Alarm4 Input on B.4 Active Low (Place a R10K PullUp)

LED on B.5 for NetWorkStatus

 

 Ascii Codes:

--------------

 13 ->cr

 10 ->lf

 34 -> "

 26 -> Substitute (End of file)

 48 -> 0

 49 -> 1

 50 -> 2

 51 -> 3

 52 -> 4

 53 -> 5

 

#endrem

 

#Picaxe 14M2

#No_data

#Terminal 19200

 

 Dirs:

'-----------------

Input  B.1      'Alarm1

Input  B.2      'Alarm2

Input  B.3      'Alarm3

Input  B.4      'Alarm4

Output B.5      'Led

Output C.1      'Serial Display

Output C.2      '--> RX Module

Input  C.3      'TX Module -->

 

Symbol Display = C.1

Symbol Baud = N2400_16

Symbol Led = B.5

 

Init:

Pause 2000  'Stabilize Serial Display

 

     Setfreq m16

     High Led

     Pause 3000

     Low Led

 

     Serout Display, Baud,(254,1) : Pause 30  'Clear display

    

     Serout Display, Baud,(254,1) : Pause 30  'Clear display 

     Serout Display, Baud,(254,128)  'Lin.1/Col.1

     Serout Display, Baud,(" Initializing 14M2  ")

     Pause 4000

     Serout Display, Baud,(254,128)  'Lin.1/Col.1

     Serout Display, Baud,(" ")

         

    

     'Sertxd(">Waiting Modem Initializing",13,10)

     Serout Display, Baud,(254,1) : Pause 30  'Clear display

     Serout Display, Baud,(254,128)  'Lin.1/Col.1

     Serout Display, Baud,(">Initializing M590 ")

    

     Serout C.2,T9600_16,("AT+CPIN=",34,"xxxx",34,13) 'PIN SIM Code (INUTILE si le code PIN a ete desactive !)

     Pause 4000    

    

'Sertxd (" PIN Code Passed - Waiting Modem Init ...",cr,lf)

'Serout Display, Baud, (254,1) : Pause 30 'Clear display

     Serout Display, Baud,(254,192) 'Lin.2/Col.1

     Serout Display, Baud,(" PIN Code Passed ...")

     Serout Display, Baud,(254,212) 'Lin.4/Col.1

     Serout Display, Baud,(" Waiting Modem Init ") '!!!!!!!!!!!!!

         

     'Serin [4000], C.3,T9600_16,("+PBREADY") 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

     Serin C.3,T9600_16,("+PBREADY")  'Serin waiting ... !!!!!!!!!!

     'Sertxd("Modem Initialised>>>>>>>>>>>>>>>>>>>>>>",13,10)

     Serout Display, Baud, (254,1) : Pause 30  'Clear display

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,(" Modem Initialised !")

     Serout Display, Baud,(254,212)  'Lin.4/Col.1

     Serout Display, Baud, ("    MODEM ACTIVED   ")

     Pause 4000

    

     Serout C.2,T9600_16,("AT+CMGF=1",13) 'SMS in TEXT Mode

     Pause 4000

     SeroutC.2,T9600_16,("AT+CSCS=",34,"GSM",34,13) 'GSM Default Alphabet

     Pause 4000

     'Serout C.2,T9600_16,("AT+CMGD=0,4",13) 'Delete All messages

 

Main:

 

DO

Serout Display, Baud,(254,128)  'Lin.1/Col.1

Serout Display, Baud,($7E)  'TEMOIN de Boucle

Pause 250

Serout Display, Baud,(254,128)  'Lin.1/Col.1

Serout Display, Baud,(" ")

    

     b1=9

     b3=9

 

Gosub Test 'Testing NetWork Status

 

High B.1

High B.2

High B.3

High B.4

 

If pinB.1 = 0 then gosub Alarm1

If pinB.2 = 0 then gosub Alarm2

If pinB.3 = 0 then gosub Alarm3

If pinB.4 = 0 then gosub Alarm4

' Pause 1000

LOOP

End

 

'------------------------------------

'--- SUBROUTINES --------------------

'------------------------------------

 

Alarm1:

     'Serout C.2,T9600_16,("AT+CMGS=",34,"0032xxxxxxxx",34,13)   'To Roro

     Pause 4000

    

Serout C.2,T9600_16,("ALARME-01 -> INCENDIE AU LABO4 / Cuve nr 03 !")

     Pause 4000

'Serout C.2,T9600_16,(26)

     'Sertxd("-----------------------> SMS 1 sent to xxx",13,10)

     'Serout Display, Baud, (254,1) : Pause 30 'Clear display

     Serout Display, Baud,(254,192)

     Serout Display, Baud,(" SMS ALARM_01 Sent !") ' Message on Lin.2/Col.1

     Pause 40000

Do Until pinB.1 = 1 : Loop  'Waiting deactivation of Alarm_01

 

     return

'------------------------------

 

Alarm2:

     Serout C.2,T9600_16,("AT+CMGS=",34,"0487XXXXXX",34,13)

     Pause 4000

     Serout C.2,T9600_16,(34,"House Alarm",34)

     Pause 4000

     Serout C.2,T9600_16,(26)

     'sertxd("SMS 2 sent",cr,lf)

     Pause 40000

     Do until pinB.2 = 1 : loop

     Return

'------------------------------

 

Alarm3:

     Serout C.2,T9600_16,("AT+CMGS=",34," 0487XXXXXX ",34,13)

     Pause 4000

     Serout C.2,T9600_16,(34,"Alarm 3",34)

     Pause 4000

     Serout C.2,T9600_16,(26)

     'sertxd("SMS 3 sent",13,10)

     Pause 40000

     Do until pinB.3 = 1 : loop

     Return

'------------------------------

 

Alarm4:

     Serout C.2,T9600_16,("AT+CMGS=",34," 0487XXXXXX ",34,13)

     Pause 4000

     Serout C.2,T9600_16,(34,"Alarm 4",34)

     Pause 4000

     Serout C.2,T9600_16,(26)

     'sertxd("SMS 4 sent",13,10)

     Pause 40000

     Do until pinB.4 = 1 : loop

     Return

'------------------------------

 

Test:

'sertxd ("TEST ----------------------------------")

     Serout Display, Baud,(254,128)  'Lin.1/Col.1

     Serout Display, Baud,("  NetWorkStatus :")

DO

     Serout Display, Baud,(254,147)  'Lin.1/Col.20

     Serout Display, Baud,($DE) 'TEMOIN de TEST

     Pause 500

     Serout Display, Baud,(254,147)  'Lin.1/Col.20

     Serout Display, Baud,(" ")

    

    

     Pause 4000

     Serout C.2,T9600_16,("AT+CSQ",13) 'RSSI,BER ?

    

     Serin [4000],C.3,T9600_16,("+CSQ: "),b1,b2,b3,b4,w13  ' Force Signal + Bit errors rate

'Sertxd("RSSI et BER: ",b1,b2,b3,b4,13,10)

    

     Serout Display, Baud,(254,151)  'Lin.3/Col.4

     'w11 = w12+42

     Serout Display, Baud,("RSSI,BER= ",b1,b2,b3,b4)

    

     Pause4000

     Serout C.2,T9600_16,("AT+CREG?",13)  'NetWorkStatus ?

     Serin [4000],C.3,T9600_16,("+CREG: "),b1,b2,b3

     'Sertxd ("NetWorkStatus: b1= ", b1, "  b2= ", b2, "  b3= ", b3,cr,lf) ' # for Ascii Code

 

     IF b1 = 48 and b3 = 49 then  '0 and 1 --> OK

     'Sertxd("Network ok .......................",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("<--- NetWork OK --->")

     High Led

    

    

     Pause 4000

     Serout C.2,T9600_16,("AT+COPS?",13)  'Provider ?

     Serin [4000],C.3,T9600_16,("+COPS: "),b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24

'Fournisseur a partir de b6

'Sertxd("Fournisseur: ",b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,13,10)

 

     'Serout Display, Baud,(254,148) 'Lin.3/Col.1

     'Serout Display, Baud,(b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17) '13 characters

    

     Serout Display, Baud,(254,212) 'Lin.4/Col.1

     Serout Display, Baud,(b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24) '20 characters

    

Exit  '>>>>>>>>>>>>>>>

      'Sertxd(" --- EXIT Do/Loop------------>")

         

     ElseIf b1 = 48 and b3 = 48 then  '0 and 0

     'Sertxd("Not Searching",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("   Not Searching    ")

     Low Led

     gosub DelLin3et4

    

     ElseIf b1 = 48 and b3 = 50 then  '0 and 2

     'Sertxd("Refus",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("   Refused !        ") 

     Low Led

     gosub DelLin3et4

         

     ElseIf b1 = 48 and b3 = 51 then  '0 and 3

     'Sertxd("Search",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("   Searching...     ")

     Low Led

     gosub DelLin3et4

    

     ElseIf b1 = 48 and b3 = 52 then  '0 and 4

     'Sertxd("Unknown Code",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("  Unknown Code !?   ")

     Low Led

     gosub DelLin3et4    

    

     ElseIf b1 = 48 and b3 = 53 then  '0 and 5

     'Sertxd("Roaming",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("  RoamingRegister  ")

     Low Led

     gosub DelLin3et4

         

     Else

     'Sertxd("Network Invalid response",13,10)

     Serout Display, Baud,(254,192)  'Lin.2/Col.1

     Serout Display, Baud,("NetWorkInvalidResp")

     gosub DelLin3et4

     Endif

Loop

return

'------------------------------

 

DelLin3et4:

'Serout Display, Baud,(254,148) 'Lin.3/Col.1

'Serout Display, Baud,("....................")

Serout Display, Baud,(254,212)  'Lin.4/Col.1

Serout Display, Baud,("....................")

Return

'------------------------------

 

'===========================================================

 

----

 

 

 

 

 

 

 

 

 

 http://extremetracking.com/open?login=rglalpmn

 

 
[ Electronique ]
Copyright © Roger LEGAT - 2008 - Tous Droits réservés - (Thds V2)