Libros recomendados sobre Python:
Hace poco estaba buscando la manera de poder programar algún dispositivo móvil para la captura de datos. Una de las ideas fue mediante una placa Arduino pero no disponía del sensor GPS y tampoco es accesible para mucha gente. Buscando por la red me topé con QPython, la oportunidad de programar en Python desde nuestro teléfono móvil Android, y más importante que eso, poder acceder a los sensores del propio móvil entre otras cosas.
Se que esta aplicación no es nada nueva pero la verdad es que no lo conocía, y estoy seguro que otros estarán como yo. Vosotros mismos os podréis dar cuenta una vez veáis por encima lo que es capaz de hacer, que disponer de un dispositivo programable de este tipo tan a mano puede ser de gran utilidad. Y ahora, a explicar lo poco que llevo entendido sobre esta aplicación:
QPython te permite ejecutar código Python desde vuestras terminales Android, además de instalar librerías externas con un solo comando, tanto librerías preparadas para el acceso a las funciones del móvil como instalar otras librerías disponibles para Python con cientos de funcionalidades directamente de la red. Estas aplicaciones las podemos dejar ejecutándose en segundo plano en nuestro móvil.
La aplicación de QPython la podéis descargar gratuitamente desde la Play Store y está basada en Python 2.x, pero también existe la versión para Python 3.x. Podéis encontrar documentación en su Wiki qpython con ejemplos y explicaciones, o en stackoverflow.
Para la instalación de librerías externas consta de dos métodos:
- QPypi: librerías ya preparadas por la aplicación. Podemos encontrar androidhelper (acceso a sensores del móvil, cuadros de texto, etc), kivy (nos permite crear aplicaciones rápidas en nuestro android: botones, pantallas con mensajes, etc), numpy, sqlite3, etc.
- pypi: nos da acceso al directorio de librerías Python en la red, permitiendo la descarga de la librería que queramos tan solo introduciendo su nombre.
Una de la librerías que hemos probado a instalar es la librería de Geopy, entrando en el apartado de librerías de la aplicación y escribiendo un: `pip install geopy` se nos instalará esta librería de Python para la geocodificación de coordenadas en direcciones. La precisión de los GPS en los móviles sabemos que no es una maravilla, pero para muchos casos puede ser suficiente, y lo mismo de sus sensores de orientación, etc.
Una vez instalada, podemos abrir la aplicación y acceder a un pequeño tutorial “Quick Start”. Aquí ya podemos echar un vistazo de la apariencia que tiene el código en estas aplicaciones. En cualquiera de ellas podemos hacer click sobre “Copy to editor to run”, y una vez estamos en el editor hacemos click en el botón de “Play” para ejecutar el script. En el segundo podemos ver un ejemplo de una aplicación que cambia de color el fondo de pantalla al hacer click sobre la pantalla (tenerla en ojo para hacer captura al presionar de un punto GPS por ejemplo).
Si en vez de entrar en el tutorial, deslizamos la pantalla hacia la izquierda, aparecerán el resto de botones de la aplicación, entre los que podemos ver la consola para ejecutar código, el Editor y el Programs con nuestros scripts, el apartado de Libraries para la instalación de librerías externas y el de Community con acceso a la web de qpython.org
Otra cosa que estarás pensando es lo complicado que sería escribir código con el teclado del móvil, o el envío a través de otros medios. Desde QPython lo han solucionado con un lector QR en su web que carga directamente tu código en la app (actualmente no disponible por reforma de la web). Por ahora lo más factible sería cargar tu fichero en el móvil utilizando algún métodos de los comunes para envío de datos, ya sea usando la red o mediante cable de datos.
Un ejemplo sencillo es el acceso al sensor gps, mostrando por consola sus coordenadas. Aquí faltaría ver con más calma el significado de los datos que nos da, creo que si le pedimos al sensor las coordenadas de tipo “network” son las relacionadas con tu red wifi o torre móvil pero no están calculadas mediante gps, para ello son las de tipo “gps” que vemos en el script gps_track de más abajo.
(gps_basics.py)
import androidhelper
dr = androidhelper.Android()
dr.startLocating()
l = dr.readLocation()
rloc = l.result
rnet = rloc["network"]
print rnet["latitude"], rnet["longitude"]
Otro pequeño ejemplo es leer la orientación del sensor aunque no he podido comprobar su exactitud o funcionamiento, pero nos sirve como prueba:
import androidhelper
dr = androidhelper.Android()
dr.startSensingTimed(1, 250)
sensor = dr.sensorReadOrientation().result
l = dr.readSensors()
print l.result
lr = l.result
azi= lr['azimuth']
print azi
El siguiente script de prueba que he realizado está basado en ejemplos vistos en la wiki de Qpython y también en este antiguo post, Droidtrack, sobre la captura de datos GPS. Lo que conseguirás con el siguiente script es simplemente ir capturando los datos del sensor gps de tipo “gps” cada 30 segundos con un total de 50 puntos, siendo el resultado un fichero de texto como el de la imagen que aparecerá en nuestra tarjeta de memoria.
(gps_track.py)
#-*-coding:utf8;-*-
#qpy:2
#qpy:console
print "This is console module"
import androidhelper, time
droid = androidhelper.Android()
droid.startLocating()
time.sleep(10)
c = 0
while c<50:
l = droid.readLocation()
R =l.result
try:
R =R["gps"]
Lat= R["latitude"]
Lon=R["longitude"]
#R1 =R["network"]
#Lat1=R1["latitude"]
#Lon1=R1["longitude"]
outstr = str(Lat) +","+ str(Lon)
droidfile = '/sdcard/droidtrack_bus1.txt'
print outstr#, str(Lat1) , str(Lon1)
fh = open(droidfile,'a')
res= fh.write(outstr +'\n' )
res = fh.close()
time.sleep(30)
c+=1
print c
except:
time.sleep(10)
print c
print R
c+=1
Para este caso he querido realizar una representación rápida de los datos utilizando CartoDB quedando algo así:
Pensar la cantidad de opciones que nos abre tener un dispositivo programable y móvil bajo un lenguaje como Python, con el que poder realizar por ejemplo una interfaz con un formulario realizado con la librería kivy para la captura de coordenadas gps mediante androidhelper, teniendo la posibilidad de convertirlos al momento a direcciones mediante geopy y analizar las estadísticas de la zona mediante numpy, todo esto mediante vuestro móvil en el propio lugar donde estés y de forma automatizada.
Todo esto es por ahora una simple prueba con lo que he podido encontrar, falta mucho por aprender e investigar, seguro que existen muchas más opciones o documentación que desconozco. Me encantaría conocer si lo habéis probado o si le encontráis posibles utilidades.
Os mantendré informados con las próximas pruebas que realice.