Fork me on GitHub

Posts in tag `Python'

Sesión interactiva de Python y Selenium

May 13, 2018

Una de las opciones que existen para crear test funcionales es Selenium y este puede ser controlado con Python usando selenium-python. Python hace más fácil el desarrollo de tus tests, ya que te permite probar cosas interactivamente. En este video te muestro cómo:

Python Video

esp8266 a 160MHz con MicroPython

April 18, 2018

El módulo machine tiene la función freq que devuelve la frecuencia en hertz

>>> import machine
>>> machine.freq()
80000000

Esto es 80MHz, la frecuencia normal de trabajo del esp8266, pero podemos llevarlo al doble de su velocidad

>>> machine.freq(160000000)

Los valores intermedios no son permitidos

>>> machine.freq(100000000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: frequency can only be either 80Mhz or 160MHz

Para probar el cambio he aquí una pequeña función que cuenta ticks

import utime

def performance_test():
    secs = utime.ticks_ms()
    end_time = secs + 5000
    count = 0
    while utime.ticks_ms() < end_time:
        count += 1
    print("Count:", count)

Finalmente

>>> machine.freq(80000000)
>>> performance_test()
Count: 55596

>>> machine.freq(160000000)
>>> performance_test()
Count: 98702

MicroPython Python esp8266

Compilar MicroPython en Ubuntu 16.04

April 16, 2018

Nerdlabs Micropython con ESP8266

Una buena forma de ahorrar memoria con MicroPython es cargar tus propios módulos como frozen byte-code en la imagen misma, es decir en el binario que usás para flashear tu micro, para lo cual hay que compilar MicroPython con los módulos que necesitás.

Para empezar asegurate de tener instalado todo esto

sudo apt-get install make unrar-free autoconf \
                     automake libtool gcc g++ gperf \
                     flex bison texinfo gawk ncurses-dev \
                     libexpat-dev python-dev \
                     python-serial sed git unzip \
                     help2man wget bzip2 libtool-bin

Luego hay que descargar el ESP toolchain desde el repo de Git

git clone --recursive https://github.com/pfalcon/esp-open-sdk.git

Cambiar al directorio y compilar

cd esp-open-sdk
make

Una vez finalizada la compilación agregar el directorio bin al PATH

export PATH=/some/dir/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Finalmente bajar el repositorio de MicroPython

git clone https://github.com/micropython/micropython.git
cd micropython
git submodule update --init

Agregar tus módulos .py en ports/esp8266/modules

Y compilar MicroPython

make -C mpy-cross
cd ports/esp8266
make axtls
make

Esto generará el archivo build/firmware-combined.bin y es el que tenés que usar con esptool.py para flashear el micro.

Más info en la MicroPython Development Documentation.

MicroPython Python esp8266

Minirobots finalista del concurso Premio a la Educación 2017

December 22, 2017

Con Minirobots nos presentamos al Concurso Premio a la Educación que organizan Clarín y Zurich, y sobre un total de 185 proyectos presentados, quedamos seleccionados entre los 10 primeros.

El proyecto que presentamos fue una propuesta para capacitar a los docentes de la Escuela Nacional Ernesto Sábato de Tandil. El objetivo final de este proyecto es generar contenido didáctico en formato libre para enseñar a los alumnos a programar un robot usando Python.

La entrega de premios fue el 21 de diciembre y, si bien no logramos ganar ninguno, fue un paso importante para nosotros porque valida el trabajo que venimos haciendo y nos motiva a continuar.

Minirobots Python Software Libre Trabajos

Minirobots gamepad

October 17, 2017

Tenía unos pulsadores tipo arcade y se me ocurrió experimentar haciendo un gamepad gigante para controlar el robot que estamos haciendo en Minirobots. La idea de esto es explorar posibles juegos para los más chiquitos.

El pad tiene un Arduino Nano con un código muy simple y se conecta a la notebook por usb. Ahí hay un pequeño servidor Flask que escucha lo que le llega por serie y le envía comandos vía bluetooth al robot.

Arduino Minirobots Python Software Libre Trabajos Video

NeoPixels en Raspi Zero W

July 28, 2017

Los NeoPixels se conectan en serie, por lo que podés controlar una gran cantidad de ellos simplemente con un pin. Aunque sólo tengas que usar un único LED RGB en tu proyecto, te conviene usar un Neopixel frente a un LED RGB tradicional, porque, te ahorrás 2 pines y porque los colores son realmente nítidos. Los he venido usando tanto con Arduino como con ESP8266, gracias a la lib de Adafruit. Hay por lo menos dos versiones: los WS2812 y los WS2812b. Estos últimos son la versión más nueva y los que muestro aquí.

Estos leds funcionan con 5v, así que usé uno de los pines de 5v de la Raspberry. Los pines 2 y 4 están conectados directamente a la fuente de alimentación por lo que pueden proveer tanta corriente como esta esté entregando. En el sitio pinout.xyz se puede ver esto y una descripción de cada pin.

La lib que hay que instalar se llama rpi_ws281x y hay que compilarla ya que no existe actualemente un empaquetado. Así que a instalar dependencias:

sudo apt-get update
sudo apt-get install build-essential python-dev git scons swig

Luego bajamos la lib y la compilamos:

git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x
scons

Finalmente la instalamos:

cd python
sudo python setup.py install

Listo, ahora ya podemos probarla

cd example
vi strandtest.py

Aquí editamos el valor de LED_COUNT según la cantidad de leds que tengamos y finalmente:

sudo python strandtest.py

Read more »

Python Raspberry

Api genérica

July 17, 2017

Siempre ando necesitando una api para hacer pruebas, así que se me ocurrió hacer una genérica, donde no tengas que definir nada previamente, donde todo sea dinámico, tanto los endpoints como el formato de los documentos.

Surgió así generic-api, una api schemeless, que con Docker podés empezar a usarla con un simple comando:

$ docker run -d --name generic-api -p 5000:5000 lvidarte/generic-api:latest

La api persiste los datos usando shelve. Si te interesa conservar los datos por fuera del container simplemente agregá esto a la línea de docker:

-v `pwd`/data:/app/data

Los métodos que soporta son GET, POST y DELETE.

Veamos un ejemplo guardando autores y libros. Primero creamos el endpoint /authors simplemente agregando un autor:

$ curl localhost:5000/authors -d '{"name": "Asimov"}'
{
  "_id": "1", 
  "name": "Asimov"
}

La api devuelve 201 y el documento insertado junto con su _id. Notar que no es necesario usar el header "Content-Type: application/json" ya que la api asume que le enviaremos jsons.

Ahora uso el id generado para referencialo y agregarle libros:

$ curl localhost:5000/authors/1/books -d '{"title": "Nemesis", "year": 1988}'
{
  "_id": "1", 
  "title": "Nemesis", 
  "year": 1988
}

$ curl localhost:5000/authors/1/books -d '{"title": "Foundation and Earth", "year": 1987}'
{
  "_id": "2", 
  "title": "Foundation and Earth", 
  "year": 1987
}

Si ahora pido /authors/1 veo el doc completo:

$ curl localhost:5000/authors/1
{
  "_id": "1", 
  "books": {
    "1": {
      "_id": "1", 
      "title": "Nemesis", 
      "year": 1988
    }, 
    "2": {
      "_id": "2", 
      "title": "Foundation and Earth", 
      "year": 1987
    }
  }, 
  "name": "Asimov"
}

También puedo acceder a cualquier nivel del doc simplemente escribiendo el path:

$ curl localhost:5000/authors/1/books/2/title
"Foundation and Earth"

$ curl localhost:5000/authors/1/books/2/year
1987

Y lo puedo modificar usando POST:

$ curl localhost:5000/authors/1/books/2/year -d '1986'
1986

$ curl localhost:5000/authors/1/books/2
{
  "_id": "2", 
  "title": "Foundation and Earth", 
  "year": 1986
}

Finalmente puedo borrar cualquier path:

$ curl -XDELETE localhost:5000/authors/1/books/2

$ curl localhost:5000/authors/1/books/2
{
  "error": "2 not in authors/1/books"
}

Python Trabajos

Curso de Python

July 12, 2017

Hace poco preparé este Curso de Python (144 slides) para compañeros de trabajo. El curso arranca con conceptos básicos del lenguaje como tipos y estructuras, funciones, decoradores, generadores, clases y excepciones. Luego se ven módulos como logging, queue, multiprocessing, threading, unittest y pdb. También hay ejemplos con Flask, PiCamera y GPIO Zero (Raspberry Pi) y finaliza con Tkinter y un ejemplo paso a paso de cómo desarrollar una versión sencilla del Juego de la Vida.

Charlas Python

Workshop sobre ESP8266

July 10, 2017

El año pasado entré a trabajar en el estudio de IoT de Globant. Entre otras cosas estuve investigando el ESP8266 y de ello surgió este Workshop sobre esp8266 para divulgar lo aprendido entre el resto de los compañeros.

El taller cuenta con una introducción al esp8266 y sus distintos módulos, incluyendo con los devkits más populares, como NodeMCU y Wemos D1. Luego hay una introducción a MicroPython y varios ejemplos de uso. Finalmente se analizan los mismos ejemplos con C++ usando la librería ESP8266 Core for Arduino.

Entre los ejemplos se ve manejo de LEDs, NeoPixels, switches, sensores de temperatura y humedad, pantallas OLED, lectores de SD y servos. Hay un ejemplo completo de una lámpara RGB WiFi con Python y cómo actualizar el firmware mediante OTA usando C++. También se muestra PlatformIO como IDE de desarrollo con C++ y Phant como servidor IoT.

El taller está orientado a programadores sin necesidad de conocimientos de electrónica.

Charlas MicroPython Python esp8266

Older | Newer →