Dans cette première partie du TP nous allons utiliser le shield GPS uniquement (sans le shield Ethernet). Le shield GPS, comme le shield Xbee, utilise les lignes Rx et Tx (RS232) de l'Arduino.
Le Shield GPS, comme les autres Shield, est fournit avec un programme de démonstration (https://www.sparkfun.com/products/10710). Ce programme nécessite l'installation d'une librairie supplémentaire :
TinyGPS (http://arduiniana.org/libraries/tinygps/)Les librairies installées de cette manière sont automatiquement stockées dans le dossier : %USERPROFILE%\Documents\Arduino\libraries
Remarque :
Sous Windows, %USERPROFILE% est une variable d'environnement. Elle représente le chemin vers le dossier personnel de l'utilisateur courant (profile utilisateur). Sur un poste Windows 7 ce dossier est en général : C:\Users\NomDeL_Utilisateur
Il est possible de visualiser toutes les variables d'environnement d'un poste en tapant la commande set dans un invite de commandes.
Installer le Shield GPS sur la carte Arduino UNO et la connecter avec le câble USB à l'ordinateur.
Sur le Shield GPS l'interrupteur situé en dessous du bouton reset doit être placé sur ON et l'autre sur DLINE.
Télécharger le programme de démonstration : http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Boards/gps_arduino_1_0.ino
Ouvrir ce programme dans l'EDI Arduino et le téléverser dans l'Arduino.
Ouvrir le moniteur série et régler sa vitesse de transmission sur 115 200 bauds.
Au bout de quelques instants, l'Arduino envoie les informations que le Shield GPS lui a envoyé (la LED rouge près de l'antenne GPS clignote) :
Explications sur le port série :
Le Shield GPS communique avec la carte Arduino avec un port série RS232. Il y a deux modes de fonctionnement :
Explications sur les parties du programme liées au port série émulé :
La bibliothèque est simple à utiliser. On peut remarquer les appels des méthodes :
gps.f_get_position(&latitude, &longitude);
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
Les & mis en évidence indiquent un passage de paramètres par référence.
Dans un appel de fonction "classique" (sans le &), ce sont les valeurs des variables qui sont transmises à la fonction. Ces valeurs sont dupliquées en mémoire. Par conséquent si la fonction (ou la méthode) modifie les variables, elle modifie en réalité la copie et les "vraies" variables ne sont donc pas modifiées. Avec un passage par référence (avec le &), ce sont les adresses des variables qui sont transmises à la fonction (ou à la méthode). Ainsi la fonction peut modifier les variables car elle connait leur adresse.
Le prototype d'une telle fonction est :
void get_position(long *latitude, long *longitude, unsigned long *fix_age = 0);
C'est l'étoile (*) qui indique ici que le paramètre reçu est l'adresse de la variable. On parle de pointeur.
Remarque : "unsigned long *fix_age =0" indique que ce paramètre est optionnel. Si il est omis sa valeur est fixée par défaut à 0.
Le but de cette partie est de générer automatiquement une page WEB indiquant sur Googlemap la position de notre GPS.
Ci-dessous, une capture d'écran du rendu attendu (j'ai triché un peu sur les coordonnées !) :
Ajouter le Shield Ethernet entre la carte Arduino et le Shield GPS.
En utilisant les travaux faits sur le Shield Ethernet et sur le Shield GPS, réaliser ce programme.
Indications :
Article connexe : Arduino - Serveur Web