utilizado/aprovechado para los usuarios que desconocen todas las ventajas que
podr�a tener el utilizar esta caracter�stica de sus celulares.
En otras palabras, se pueden leer todos los datos del GPS en formato CVS (valor
separado por coma), vamos a ver algunas cosas r�pidas del est�ndar NMEA:
Sat�lites utilizados:
$GPGSA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>
Posibles valores:
A: Autom�tico
El 2 es el modo 2:
En fin, no tiene caso hacer una copia de los RFC que existen sobre este protocolo,
por lo que vamos directamente al grano:
Para poder acceder a los datos del GPS en la PC (me parece m�s bonito y �til usar
el GPS en la PC que en el celular) vamos a utilizar una herramienta llamada
ShareGPS (que pueden encontrar en el Play Store) y adb (que viene en el SDK de
android) o �adb lite� (google).
Con esto el puerto 50000 del celular queda en el 50000 de nuestra m�quina,
probemos:
$GPGSV,4,1,16,01,,,,03,45,070,,04,,,,05,,,*4E
$GPGSV,4,2,16,06,27,054,,07,35,320,,08,13,293,,10,18,291,*7A
$GPGSV,4,3,16,11,11,151,,13,73,350,,16,20,036,,19,46,108,*7F
$GPGSV,4,4,16,20,13,185,,23,69,132,,28,12,233,,30,,,*44
[�]
Esos datos raros que pueden ser ah� es directamente los datos NMEA, ahora la cosa
es bastante f�cil, podemos conectarnos con python al puerto 50000 de localhost
(tambi�n se podr�a a trav�s de una red wifi, pero me gusta m�s esta forma).
import socket,string
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((�localhost�, 50000))
while 1:
linea = s.recv(250)
print linea
Con esto haremos exactamente lo mismo que netcat, pero vamos un por m�s all�,
recuerdan que dije que est� en formato CVS todo?
datos=string.split(linea,�,')
Con esto ya tenemos cada valor de la linea en datos, ahora podemos analizarlo:
try:
result = {
�$GPRMC�: GPRMC ,
�$GPGSV�: GPGSV
}[datos[0]](datos[1: ])
except KeyError:
pass
Para los que no est�n familiarizados con python, este no tiene swich como tal,
entonces esta es mi versi�n de este.
Lo que hacemos con esto es llamar a cada una de esas funciones (GPRMC,GPGSV,GPGSA)
cada vez que una linea tenga por ejemplo �$GPRMC� que llamar�a a la funci�n GPRMC ,
pasandole como argumento todos los elementos de datos excepto el primero (no tiene
caso mandarle �$GPRMC � por ejemplo xD)
Vamos a parsear el primero (GPRMC nos indica el estado de la conexi�n los sat�lites
y los datos obtenidos de este):
if datos[1] != �V�:
azimut=int(datos[7])
rumbo=�
if(azimut==0):
rumbo=�Norte�
rumbo=�Noreste�
elif(azimut==90):
rumbo=�Este�
if(azimut==180):
rumbo=�Sur�
rumbo=�Suroeste�
if(azumit==360):
rumbo=�Oeste�
Azimut es una forma de medir la direcci�n hacia la cual vamos (rumbo) en grados:
print datos
c=0
for a in range(3):
c=c+4