1. Introduction

En poursuivant le même thème de mon premier projet, l’idée serait de rester sur la problématique de l’oubli de certains objets. Il arrive parfois de perdre quelque chose à un certaine endroit et de s'en mordre les doigts. Le but premier était de construire une puce que l’on peut coller sur n’importe quel objet, d’avoir accès à ses coordonnées en tout temps. Il est clair que la puce devrait être d’une taille minime pour qu’elle ait une application pratique mais ce n’est pas l’objectif de ce projet. La technologie qui nous permet de nous localiser s'appelle géolocalisation, une triangulation entre les satellites. Les données GPS (géolocalisation américaine) iront sur une page qui affichera les coordonnées du capteur.

2. Matériel et méthodes

2.1 Matériel

  • Sparkfun GPS Starter Kit
  • Raspberry Pi 3
  • Cables (fourni avec le kit RPi)

2.2 Méthode

2.2.1 Partie GPS

2.2.1.1 Branchements


Sur cette photo on peut voir le GPS à proprement parler, le petit carré rose, et la board qui lui permet d'envoyer et de recevoir des informations d'une machine.
Les trois câbles sur la droite de l'image, noir, rouge et rouge, fournissent le courant au module GPS, 5v, et à la board, 3.3v. Les deux autres en haut sont les câbles servant à transmettre les données. Le vert étant le receveur RX et le jaune le transmetteur TX.

En général, on connecte le RX d'un module au TX de l'autre, c'est logique, un qui envoie, l'autre qui reçoit. Et pourtant sur cette configuration, il fallait brancher les RX de la board et du RPi 3 ensemble , pareil pour le TX. Une fois le tout connecté, On l'allume avec le switch on/off sur la board. Si la LED du module GPS clignote, ça signifie que le GPS a réussi à se géolocaliser.

2.2.1.2 Software

Le GPS émet des données toutes les secondes et pour y avoir accès il faut se connecter au serial port TX du GPS, en l'occurence ici c'étais le /dev/ttyAMA0. Afin d'apercevoir les données il faut se connecter à un serial terminal sur le RPi, minicom ou screen font bien l'affaire. Pour être sûr de recevoir quelquechose de la part du GPS, il y a des réglages à effectuer sur minicom tandis que screen devrait être fonctionnel directement, c'est screen qui est utilisé dans le code final. Le but était d'avoir ces valeurs stockés dans screen en mémoire pour pouvoir les utilisé sur un script python, malgré les recherches je n'ai pas été capable de résoudre ça. Imaginant avoir accès à ces informations, il faut les trier car elles s'organisent selon la norme NMEA. Ca se présente comme cela:

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,-34.2,M,,0000*18 

Obtant pour un moyens de chercher les informations entre des caractères connus de début et de fin, je me suis aidé de ce forum.
http://stackoverflow.com/questions/...
Ayant désormais juste les bouts dont j'avais besoins, il me fallait trouver un moyen de passer cet informations du Raspberry au serveur WEB , et ma solution consiste à écrire ce que j'avais sur un fichier txt et l'envoyer sur le serveur pour qu'il puisse être lu après par un script php. Pour écrire dans un fichier txt sur python il m'a fallu ce site. https://openclassrooms.com/courses/...
Pour transférer le fichier txt sur le serveur, scp était une commande qui me restait en tête et qui a étonnement bien marcher. Le script python se trouvant sur le RPi est le suivant :

# -*- coding: utf-8 -*-
# !/usr/bin/python

import os,sys

#Attribue à la variable textraw les informations issues du GPS / 
# la fonction os.popen permet d’exécuter une commande dans le bash
textraw = os.popen('sudo screen /dev/ttyAMA0 4800')         

#Défini un point de départ, c'est la notation juste avant la latitude/longitude
start = ',A,'           
#Défini le point de fin juste après la longitude
stop = ',0.00,'         

#fonction qui permet d'isoler l'information de latitude/longitude du reste
gpsdata = textraw[textraw.find(start)+len(start):textraw.find(stop)].strip()            

#ouvre le fichier texte pour y ecrire dedans
Coordinate_file = open('Coordinate.txt', 'w')           
#Écris la latitude/longitude dans le fichier
Coordinate_file.write(gpsdata)          
Coordinate_file.close()             

#Envoie cette information txt dans le fichier txt du serveur web
os.popen('scp /home/pi/Desktop/Coordinate.txt username@server:/www/loic.kreienbuhl/adresseGPS.txt')         

2.2.2 Partie WEB

2.2.2.1 PHP

Sur le serveur web, on peut aussi lire et écrire dans des fichiers txt avec php, c'est très similaire à la manœuvre sur python juste auparavant. Il suffit d'ouvrir le fichier de le lire et ensuite :
echo $Coordinate
ne pas oublier de la mettre correctement dans des balises html afin qu'il apparaisse à l'écran.

<html>
	<head>
	<title>GPS</title>
	<link rel="stylesheet" type="text/css" href="sitewebGPSstyle.css"/>
	</head>
	<body>
		<h1>Projet H | OC Informatique</h1>
		<h2>localisation de la puce GPS</h2>
		<h3>Adresse GPS : </h3><p><a href = 'https://google.com/maps/place/<?php 
					//ouvre le fichier contenant lattitude/longitude
					$adresseGPS = fopen('adresseGPS.txt', 'r+');		
					//lis le contenu et l'attribut a une variable
					$Coordinate = fgets($adresseGPS);		
					fclose($adresseGPS);		
					echo $Coordinate;		//affiche l'adresse en lien hypertexte
					?>'
					><?php 
					$adresseGPS = fopen('adresseGPS.txt', 'r+');		
					$Coordinate = fgets($adresseGPS);		
					fclose($adresseGPS);		
					echo $Coordinate;		
					?></a></p>
	</body>
</html>

2.2.2.2 CSS

Pour cette partie il n'y a pas vraiment de méthode , chacun décore sa page WEB comme il le souhaite... (au pire c'est sur le git)

3. Résultats

Pour finir , à cause de ce problème que je n'ai pas réussi à contourner, mon projet n'a pas la finalité attendue mais il a toutes les autres branches qui fonctionne. Mais mise à part ça, il y a quand des données qui passe du raspberry au serveur et s'affiche sur la page WEB. C'est comme un tuyau avec un bout au milieu qui lui manque.

4. Discussion

Lorsqu'on émets des hypothèses sur comment une certaine tache va se dérouler, on ne peut pas penser à tous ce n'est pas humain, il faudrait être devin. Le simple fait de relayer une information GPS à travers différent structures matérielles et immatérielles n'a pas l'air complexe. Un problème rencontré pendant la partie où le RPi idéalemment enregistre les données GPS afin de pouvoir les réutilisé pour les transmettre sur le serveur, m’empêchait d'avancer, je voulais résoudre ce problème, quelque uns , m'ont bien freiner alors que je ne m'y attendais pas du tout. Grâce aux derniers projets qu'on a fait cette hiver, j'ai acquis cette méthodologie de travaille qui consiste à faire tout ce qu'on peut , ne pas se prendre la tête sur une chose, à commencer par la base et ensuite monter en complexité. Le code python à été construit comme ça, d'abord des tests en local avant de se mettre en réseau , le but étant de minimiser les erreurs probables.
Le GPS était assez dure à prendre en mains avec le raspberry, il était premièrement destiner à fonctionner avec un Arduino, et à cause du manque de documentation en ligne pour cette là, il a fallu un moment avant de prendre pied et savoir pourquoi ça ne marchait potentiellement pas. Finalement on n'obtient pas l'information de géolocalisation mais depuis un dossier sur le Raspberry on arrive à transmettre une adresse GPS, certes inventée, sur le site WEB. Le but était à la base d'avoir une puce qu'on peut poser partout, il aurais fallu trouver un moyen d'envoyer l'information qui contenait les coordonnées GPS autres que le wifi, par les réseaux mobiles (3G/4G /SMS) par exemples. J'ai commencé ce projet en voulant en savoir plus sur le fonctionnement des GPS, alors même si le projet ne fonctionne pas, j'ai appris des choses intéressantes et qui me serviront sans doute pour plus tard.

5. Conclusion

Ce projet peut paraître très simple, prendre une information et la transférer plus loin. Mais il y a au fur et à mesure du projet des erreurs auxquelles on ne s'attendait pas, c'est pour ça qu'il faut toujours prendre de la marge lorsque l'on organise notre temps à consacrer à notre projet. Il ne faut pas non plus rester bloquer, faire des autres parties afin d'avancer et de revenir plus sur le problème, ça aide des fois. Le but du projet n'est pas atteint, et comme le problème est au niveau du gps la partie mécanique n'est pas nécessaire.

6. Ressources

https://www.cyberciti.biz/hardware/...
https://learn.sparkfun.com/tutorial...
http://cdn.sparkfun.com/datasheets/...
https://www.w3schools.com/default.a...
https://www.raspberrypi.org/forums