Libros recomendados sobre Python:
- Python Crash Course
- Python for Data Analysis
- Automate The Boring Stuff With Python
- Fluent Python
- Programming 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.
Me tiera error el primer ejemplo dice keyError: ‘network’
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
Si,gracias ya estube revizando y no me captura las cordenadas hoy intentare con wifi activado haber si las toma
Ya apenas estoy utilizándolo, me di a la tarea de investigar a ver qué información encontraba este es mi correo por si alguien tiene algo de esta aplicación Jaime.jonathan.dr@gmail.com
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 !!
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
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.
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
me arroja el error java.lang.NullPointerException