Home / Tutoriels / Arduino / Comment utiliser un module A7 AI-THINKER Quad Band pour faire du GPS et du GPRS

Comment utiliser un module A7 AI-THINKER Quad Band pour faire du GPS et du GPRS

Vous venez d’acheter un module A7  chez YoupiLab. Merci pour votre fidélité

 

Le module A7 est un module qui permet de faire à la fois du GPS et du GPRS. Dans ce tutoriel, nous allons voir comment utiliser ce module pour

  • trouver des coordonnées GPS de deux façons différentes
  • envoyer des données sur un serveur web (notamment le serveur de iot.youpilab.com)

Matériels

  • Carte Arduino UNO R3
  • IDE Arduino tournant sur Ubuntu 16.04 ou Windows 7 (et supérieur)
  • Trois jumpers mâles-femelles de couleur rouge, noire et verte
  • Un module A7 AI-THINKER doté d’une antenne GPS et d’une antenne GPRS fonctionnelles
  • Une sim non verrouillée
  • Une batterie de 7V-2A

Câblage avec Arduino

Pour commencer, nous allons voir le câblage nécessaire pour faire tout ça. Au préalable, il faut mettre la micro SIM dans le module A7. Dans la photographie du câblage ci-dessous, on a la disposition de pin suivante :

 

Module A7 Arduino Câble
GND GND Câble de couleur jaune
U_RXD Pin 3 Câble de couleur noire
U_TXD Pin 2 Câble de couleur rouge

 

Une fois le câblage effectué, il faut connecter l’Arduino au PC et allumer le module A7. Une fois allumée, le module A7 présente deux LED allumées, comme sur la figure suivante :

Simple code pour tester

Le module A7 fonctionne par défaut avec un Baud Rate de 115200 ce qui ne permet son utilisation efficiente avec la librairie SoftwareSerial qui est la principale librairie que nous utiliserons tout au long de ce tutoriel. Pour pallier à ce défaut, il faut donc qu’au démarrage du module, on force un changement de Baud Rate (qui est sans conséquence sur le module) de 115200 à 9600. De plus, le module A7 obéit à ce qu’on appelle les « AT Commands » qui sont des commandes spéciales utilisées par nos portables pour exécuter différentes tâches (pour plus d’informations sur les commandes AT, vous pouvez télécharger la documentation sur le net). Le code suivant joue très bien ce rôle et nous permettra d’envoyer les commandes AT directement au module depuis le Serial Monitor (ce code est commenté pour permettre une meilleure compréhension). Ouvrez donc votre IDE d’Arduino et copiez-y ce code.

 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()

{

/**on démarre le module*/

Serial.begin(115200);

mySerial.begin(115200);

//on efface toutes les données séries en attente

while (mySerial.available())

{

mySerial.read();

}

/** */

/**on configure le baud à 9600*/

mySerial.println(« AT+IPR=9600 »);

/** */

delay(200); //on attend un peu

/**on redémarre avec le nouveau baud*/

Serial.begin(9600);

mySerial.begin(9600);

delay(200);

/** */

Serial.println(« start! »);

}

void loop()

{

/*

* This loop just takes whatever comes in from the console and sends it to the board

*/

if (Serial.available())

{

mySerial.write(Serial.read());

}

if (mySerial.available())

{

Serial.write(mySerial.read());

}

}

 

L’exécution de ce code nous donne le résultat suivant :

Ce n’est pas encore grand-chose mais en parcourant le code, vous verrez que plusieurs commandes AT ont été exécutées en arrière-plan sans rien afficher dans le moniteur série (Serial Monitor en Anglais).

Pour vérifier si notre module fonctionne et nous reçoit bien, nous allons exécuter la commande de base : « AT ». Tapez donc AT dans le moniteur série et valider. Si tout se passe bien, vous devriez avoir ce qui suit :

Le module nous renvoie la commande que nous avons tapée suivie de sa réponse qui est OK. Si par hasard vous obtenez +CME ERROR: 58 au lieu de OK, ce n’est pas bien grave, remettez juste AT et valider, vous obtiendrez le OK si votre module est en état. Voilà donc le principe de fonctionnement global du module : lorsqu’on lui envoie une commande AT, il retourne la commande suivie de sa réponse (plus de détails sur les commandes AT et leurs réponses possibles sur internet).

Récupérer des coordonnées GPS

Maintenant que nous savons tout ça, nous allons rentrer dans le vif du sujet. L’objectif est le suivant : récupérer nos coordonnées GPS. Avec le module A7, on peut faire cela de deux manières  différentes.

  • 1ière  méthode 

Pour cette première méthode, regardez sur la figure suivante :

Nous avons d’abord tapé la commande AT+GPS=1 pour activer le GPS sur le module. AT+GPS=1 active le GPS et AT+GPS=0 désactive le GPS. A cette commande, le module nous répond OK après un petit moment (environ une seconde). Après cette commande, on tape la commande AT+GPSRD=1 pour commencer à recevoir les coordonnées GPS. En effet, après l’activation du GPS, il faut commencer à recevoir les données GPS. Et pour ce faire, la commande de réception est la commande AT+GPSRD. AT+GPSRD=0 coupe la réception des données GPS mais ne désactive pas le GPS. AT+GPSRD=N permet de recevoir des flots de données GPS (encore appelées données NEMA)  chaque N secondes. Nous, nous avons mis AT+GPSRD=1, donc nous recevrons les données GPS chaque 1 seconde, ce qui fait que vous verrez des tas de données défiler sur votre moniteur série après le OK du module. Ces données NEMA ne sont pas toutes des coordonnées GPS. En effet, seul la ligne contenant le mot clé GPRMC contient nos coordonnées GPS. Mais comme vous pouvez le voir sur la figure, elle est presque vide et ne contient que des virgules en majorité. Normalement, entre ces virgules, il devrait y avoir des nombres qui représenteront nos coordonnées GPS (pour plus de détails sur les données NEMA, consultez internet, ça vous sera capital pour la suite du tutoriel).

Ce qui fait la particularité de cette première méthode, c’est que la commande AT+GPS=1 ne permet pas d’obtenir spontanément les coordonnées GPS. Il peut se passer un bon moment avant que vous n’aillez des données NEMA complètes. Ce moment peut être très long ou très court chez vous, cela dépend de votre zone. Dans notre cas, c’est au bout de 30Minutes, que les données NEMA ont commencé par être complètes. Comme vous pouvez le voir sur la figure suivante, les données NEMA sont vraiment longues et complètes et nous avons sélectionné la ligne qui nous intéresse.

Essayons de comprendre cette ligne que nous avons sélectionnée et qui est censé nous donner nos coordonnées GPS :

Le $GPRMC indique simplement quel type de phrase est sur la ligne. Le numéro suivant représente le temps universel coordonné (UTC). Cela fonctionne comme ceci, 140744.000 serait 14h07 et 44.0 secondes en UTC. Depuis la conversion de l’heure UTC à l’heure locale, il suffit de savoir dans quel fuseau horaire vous êtes, vous pouvez voir qu’une chose que vous obtenez d’un GPS est une horloge très précise. La lettre suivante vous permet juste de savoir si votre signal est actif (A) ou vide (V). Un ‘A’ indique que vous recevez un signal et que les choses fonctionnent correctement. Un ‘V’ signifie que vous n’avez pas de signal. Donc si vous avez bien suivi, au début, il n’y avait que des ‘V’ sur nos lignes GPRMC ce qui indiquait qu’on ne recevait aucun signal.

Maintenant, pour les bonnes choses, le numéro suivant et la lettre suivante vous donne votre latitude. 0624.49615, N doit être interprété comme suit:

Votre latitude est: 06 degrés, 24.49615 minutes, dans l’hémisphère Nord.

De même, le numéro suivant, 00218.94192, E, est la Longitude. Ceci est interprété comme suit :

Votre longitude est: 002 degrés 18.94192 minutes, dans l’hémisphère Est.

Les degrés peuvent être un nombre à un, deux ou trois chiffres. Par conséquent, vous devez faire attention à l’analyse de ces données. Ce qui est toujours le cas, c’est que les deux premiers chiffres à gauche de la décimale, et les nombres à droite de la décimale représentent les minutes. Donc, prenez toujours le numéro commençant par deux à la gauche de la décimale, et ceux qui suivent tout le chemin jusqu’à la virgule, et c’est vos minutes. Malheureusement, si vous essayez simplement de mettre 0624.49615, N, 00218.94192, E, dans Google Earth, il ne le reconnaîtra pas. La chose la plus simple que vous pouvez faire pour que Google Earth reconnaisse et affiche correctement les coordonnées est d’entrer les éléments suivants:

06 24.49615N, 002 18.94192E

Notez l’espace inséré entre les degrés et les minutes, et aucune virgule avant la désignation de l’hémisphère. Cela afficherait correctement ce point unique via la barre de recherche Google Earth.

Maintenant que nous avons nos coordonnées (après un long moment cela dit), nous pouvons les mettre dans Google Earth histoire de voir un peu. Passons cependant à la deuxième méthode.

Courte vidéo illustrant cette première méthode

  • 2ième méthode 

Elle est permet d’obtenir plus rapidement les coordonnées GPS (en moins de 05 minutes) que la méthode précédente. Cependant, elle nécessite que votre SIM possède une connexion internet car, elle fait usage de données mobiles pour pouvoir trouver les coordonnées GPS.

NB : elle utilise très peu de forfait. A peine 1Mo pendant 24h d’utilisation non-stop

Pour l’utiliser donc, prenez soin d’activer un forfait sur la SIM que vous avez placé dans le module. D’abord, nous allons arrêter le flot de données NEMA avec la commande AT+GPSRD=0 et arrêter le GPS avec la commande AT+GPS=0. Cela donne :

A chaque commande, il ne devrait pas y avoir d’erreur, le module doit répondre OK. Si par hasard vous obtenez +CME ERROR: 58, retapez juste la commande et revalidez et ça ira. L’erreur +CME ERROR: 58 vient souvent lorsque le module est occupé à faire autre chose et que vous lui envoyez une autre commande. Donc si vous n’attendez qu’il vous réponde avant de lancer une autre commande, vous aurez fréquemment des +CME ERROR: 58 (voir la documentation sur les erreurs CME). Ceci étant dit, la commande de cette deuxième méthode est AT+AGPS=1. AT+AGPS=1 permet d’activer ce qu’on appelle le GPS Assisté. Avec le GPS assisté, le module cherche directement sur le net les données NEMA de votre zone et vous les renvoie. Pour les revoir, nous allons faire AT+GPSRD=1 juste après la réponse OK de  AT+AGPS=1. Si vous n’avez pas de forfait internet sur la SIM, vous obtiendrez une erreur +CME ERROR: 50 ou parfois COMMAND NO RESPONSE suivi de OK et la commande AT+GPSRD=1 échouera.

Si vous activez donc un forfait et que vous réussissez, les données NEMA viendront relativement plus vite qu’avec la méthode précédente. Vous aurez donc de façon régulière de bonnes données NEMA comme ci-dessous :

Sur chaque ligne de $GPRMC, vous verrez vos données GPS (maintenant que vous avez compris comment interpréter ces données, ça vous est surement plus compréhensible) et vous pourrez en faire ce que vous voulez.

Courte vidéo illustrant cette deuxième méthode

Faire des requêtes HTTP pour contacter un serveur

Pour contacter un serveur, il faut obligatoirement que votre SIM ait accès à internet. Avant de continuer, assurez-vous donc que vous avez un forfait internet actif sur la SIM qui est dans le module.

L’objectif ici est d’envoyer sur le serveur d’iot.youpilab.com les coordonnées GPS que nous avons extraites précédemment. Donc, rendez-vous sur www.iot.youpilab.com et créer un appareil avec les paramètres latitude et longitude. Cependant, pour faire du Http avec le module A7, aller sur iot n’est pas une obligation ; nous l’avons pris comme exemple, vous, vous pouvez aller sur votre propre site  par exemple ou sur le site de votre choix la procédure restant la même dans tous les cas.

Exécuter la série de commandes suivantes :

AT+CREG ?

AT+CGATT=1

AT+CGDCONT=1, ‘’IP’’,’’internet.mtn.bj’’  //Remplacez internet.mtn.bj par l’APN de votre réseau

AT+CGACT=1,1

Si vous avez activé un forfait, vous devriez obtenir exactement des OK comme sur la figure ci-dessus. Ces commandes initiales permettent de préparer le module à faire de la connexion GPRS.

Après toutes ces commandes, nous allons maintenant joindre le serveur d’iot.youpilab.com. La commande à exécuter est la suivante :

AT+CIPSTART= »TCP », »http://iot.youpilab.com »,80

Bien sûr, vous devez remplacer iot.youpilab.com par le nom de votre serveur si vous voulez aller sur un autre site.

Si vous réussissez, vous obtiendrez comme sur la figure ci-dessus : CONNECT OK suivi de OK

Pour toucher une page sur le site, vous devez d’abord connaître l’URL de la page avec tous les paramètres qu’il faut. Et ensuite, vous allez exécuter AT+CIPSEND=76 où 76 est le nombre de caractères contenus dans mon URL.

Si tout se passe bien, en réponse, le module enverra un > pour signaler que vous pouvez maintenant lui envoyer l’URL.

Regardez bien, mon URL fait bien 76 caractères et pour l’envoyer, je l’ai précédé du mot clé GET. En réponse, le module me répond OK suivi de +CIPRCV:459,……..

Le OK signifie que le module a bien envoyé l’URL au serveur. Le +CIPRCV indique la réponse du serveur. En gros, ça veut dire que le serveur a envoyé une réponde de 459 caractères qui commence par {et qui se termine par}. Juste après la réponse du serveur, la connexion a été automatiquement fermée ce qui est traduit par +TCPCLOSED:0.

Pour envoyer nos coordonnées sur iot, les commandes à exécuter sont les suivantes :

AT+CIPSTART= »TCP », »http://iot.youpilab.com« ,80 pour rétablir la connexion avec le serveur

AT+CIPSEND=132 pour dire au serveur qu’on veut lui envoyer une URL de 132 caractères

Et lorsque le module nous donnera la main pour saisir l’URL, on saisira :

GET http://iot.youpilab.com/api/data?APP_ID=MOT822f30512&APP_Key=c920a3f6622f4cc&latitude=0624.49792,N&longitude=00218.93692,E

Où la latitude et la longitude sont celles que nous avons trouvées plus haut dans le chapitre I ci-dessus.

MAIS DEVINEZ QUOI ?

YoupiLab vous a facilité la tâche et pour faire tout ça (c’est à dire trouver les coordonnées GPS à tout instant et les envoyer sur le serveur), vous n’aurez pas besoin de saisir toutes ces commandes AT. Il vous suffit de télécharger deux librairies ParseNmea et A7Lib, de les inclure dans votre projet comme fait sur la figure ci-dessous et c’est fini, en temps et en heure, vous aurez vos coordonnées GPS qui seront à la fois affichées sur notre moniteur série et envoyées dans votre compte sur iot.youpilab.com

 

#include <SoftwareSerial.h>

#include <A7Lib.h> /*ici on inclut la bibliothèque A7Lib (elle dépend de ParseNmea donc veuillez

*à inclure ParseNmea dans vos bibliothèques Arduino avant tout)

*/

int RX = 2; // This is your RX-Pin on Arduino UNO

int TX = 3; // This is your TX-Pin on Arduino UNO

String APP_ID= »MOT822f30512″; //ceci c’est votre app_id dans votre compte sur iot

String APP_Key= »c920a3f6622f4cc »; //ceci c’est votre app_key dans votre compte sur iot

String APN = « internet.mtn.bj »; //ceci c’est votre apn suivant votre réseau

A7Lib myGPS(RX,TX,APP_Key,APP_ID,APN);

void setup() {

myGPS.startGPS();/*cette fonction démarre l’option GPS de votre module de même que AGPS*/

}

void loop() {

myGPS.doGpsTrack();/*cette fonction collecte vos données NEMA, les traite et envoie le nécessaire

*dans votre compte sur iot

*/

}

/* VOUS VOYEZ ! Pas de AT commandes à taper, tout est géré pour vous !*/

Vidéo illustrative

Donc voilà, vous savez maintenant

  • brancher un module A7 avec Arduino UNO
  • obtenir des données NEMA grâce au module A7
  • traiter les données NEMA pour obtenir vos coordonnées GPS
  • établir une liaison avec serveur sur le module A7
  • aller sur une URL grâce au module A7

 

 

About nonfonjuniorm_lf80ckk1

Check Also

Comment utiliser le capteur de température et d’humidité DHT22?

Vous venez d’acheter un capteur de température et d’humidité DHT22 chez YoupiLab. Merci pour votre …

Laisser un commentaire

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