QPython: Programa con tu terminal Android, acceso al GPS y mucho más

Libros recomendados sobre Python:

20150304014122666

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.

20150304021723784

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.

20150304023508542

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).

20150304021723736

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.

20150304022908390

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
droidtrack_bus

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í:

20150304014122269

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.

9 respuestas a “QPython: Programa con tu terminal Android, acceso al GPS y mucho más

Add yours

    1. Comprueba que tengas el gps activado y recibiendo datos del satélite, es posible que no te encuentre coordenadas. También creo que te puede dar coordenadas basadas en el gps o en la conexión que uses o similar, no soy experto en esto pero puedes buscar más información por internet sobre GPS QPython

      1. Si,gracias ya estube revizando y no me captura las cordenadas hoy intentare con wifi activado haber si las toma

  1. Holaa !!
    Como mi ordenata ha muerto decidí descargarme en mi móvil con Android Qpython 3 para programar un bot para instagram .
    Y me dio el siguiente error que es causado porque necesito tener el módulo requests instalado en la librería .
    / data / data / org . qpython . qpy 3 / files / bin/qpython -android 5 . sh «/ storage /emulated/ 0 / qpython / scripts 3 / example . py » && exit
    n / scripts3 / example . py » && exit <
    WARNING : linker : zlib. cpython- 32 m . so : unused DT entry: type 0 x 6 ffffffe arg 0 x 8 a 4
    WARNING : linker : zlib. cpython- 32 m . so : unused DT entry: type 0 x 6 fffffff arg 0 x 1
    Traceback ( most recent call last ) :
    File "/ storage / emulated/ 0 / qpython /scripts 3 / example . py ", line 4 , in
    from instabot import InstaBot
    File «/ storage / emulated/ 0 / qpython /scripts 3 / instabot . py «, line 4 , in
    import requests
    ImportError : No module named requests
    1 | u 0 _ a 137 @ j3 xnlte : / $

    Sabes como se puede instalar el módulo requests??

    Puedes facilitarme un link para descargarlo ?

    Muchas gracias !! Espero vuestra respuesta

    Un saludo !!

  2. Hola te parece que se podría desarrollar una ap que tomé una foto o vídeo, y lo guarde en un servidor, para publicar en gis web, y en el caso que no hubiera red lo almacene local para poder sincronizar cuando disponga de la misma.. cuál sería más adecuado
    django o kivy

  3. Me encanta este lenguaje de programación y aunque tal vez sea de forma limitada programar para android en Python es algo realmente genial y que abre muchísimas posibilidades.

    Buen Post, saludos.

  4. Excelente info, empecé hace poco con python directamente en el celular ( por sobra de tiempo en el viaje al trabajo) y desconocía que era tan fácil acceder a los sensores, muchas gracias, voy a seguir buscando ejemplos

Deja un comentario

Blog de WordPress.com.

Subir ↑