Fork me on GitHub

Posts in tag `Python'

Controlando mi ESP-Car con Python

March 4, 2017

Compré en Pimoroni este Zumo Kit y un par de motorcitos, y lo completé con un NodeMCU y este motor shield. He aquí el resultado

ESP8266 car

El código que hice para el micro lo borré por accidente pero es bastante sencillo, similar a este, sólo que le agregué un servidor http con una mini api para manejar los movimientos básicos.

Para manejarlo remotamente hice con Python un pequeño cliente que expone una shell y tiene una función demo() que es la que se muestra en el video

Además hice una app para Android usando App Inventor 2, me quedó así

Python Trabajos Video esp8266

MicroPython - Lámpara RGB

August 26, 2016

Continuando las pruebas con MicroPython me puse a hacer una lámpara RGB controlable por wifi. Quería probar también eso de levantar mi propio access point y que los clientes se conectaran a él. Encontré que es bastante sencillo de hacer, simplemente puse lo siguiente en boot.py

# boot.py
import network

ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="RGBLamp", password="12345678")

while not ap_if.active():
    pass

Esto levanta una red wifi RGBLamp y pone a NodeMCU como gateway en el 192.168.4.1 :)

También metí en este archivo las dos líneas necesarias para levantar webrepl ya que desde la interfaz web es muy sencillo subir los archivos a NodeMCU.

import webrepl
webrepl.start()

boot.py es el primer archivo que lee MicroPython e inmediatamente después busca main.py para la ejecución del programa principal. El código me quedó así

La interfaz web quedó así, sencilla, en principio porque apunté a algo mini pero también porque me encontré con algunos problemas de falta de memoria al querer procesar un template más grande, lo que me hizo incluso tener que minimizar el template antes de subirlo a NodeMCU.

Como mencioné antes un par de veces tuve que darle vueltas al código para evitar el memory allocation failed dado que esp12e tiene algo así como 36 KB de RAM. Estuve leyendo un poco al respecto y encontré (nunca falta quien...) a alguien que dejó de usarlo por esto.

MicroPython Python Trabajos esp8266

MicroPython - Instalación en NodeMCU

August 22, 2016

En este post de Adafruit descubrí que existe un firmware de MicroPython para NodeMCU. MicroPython es un proyecto que nació en Kickstarter y que consiste en una reescritura de Python3 para hacerlo más liviano y óptimo para correr en microcontroladores. Al igual que el firmware de Lua también cuenta con un intérprete que se accede vía serial (con screen o picocom) y vía web usando el módulo webrepl.

La instalación es sencilla, primero hay que instalar esptool mediante pip

$ sudo pip install esptool

Luego bajar el último firmware para ESP8266 y finalmente subirlo a NodeMCU borrando previamente el firmware anterior

$ esptool.py --port /dev/ttyUSB0 erase_flash
$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m -fm dio 0 esp8266-2016-05-03-v1.8.bin

El detalle de cada paso está bien documentado en la doc de MicroPython.

Finalmente se puede acceder a la consola usando screen

$ screen /dev/ttyUSB0 115200
MicroPython v1.8.3-35-g49dd532 on 2016-08-18; ESP module with ESP8266
Type "help()" for more information.
 >>>

Para levantar webrepl hay que primero conectarse a la red local. Aquí hay ejemplos de cómo hacerlo, pero básicamente es

>>> import network, time
>>> wlan = network.WLAN(network.STA_IF)
>>> wlan.active(True)
>>> wlan.connect('your-ssid', 'your-password')
>>> while not wlan.isconnected():
...    time.sleep_ms(50)
...
>>> print(wlan.ifconfig())
('192.168.0.15', '255.255.255.0', '192.168.0.1', '8.8.8.8')

Luego de eso iniciamos webrepl

>>> import webrepl
>>> webrepl.start()
WebREPL daemon started on ws://192.168.4.1:8266
WebREPL daemon started on ws://192.168.0.15:8266
Started webrepl in normal mode

No hace falta bajar el editor, se puede usar la versión online simplemente cambiando la IP.

MicroPython Python esp8266

Alarma con Raspberry Pi

June 27, 2016

En la MagPi salió un suplemento, Beginner's Electronic Raspberry Pi, que tiene varios tutoriales usando la nueva lib de Python gpiozero. Me gustó especialmente el que muestra cómo hacer una alarma usando un sensor de movimiento, es realmente simple con gpiozero.

El código está sacado del ejemplo, simplemente cambié los pines del sensor y el buzzer para que me quedara más cómodo en mi diagrama.

El esquema de conexiones lo hice con Fritzing

Python Raspberry Trabajos

Guardando mis comandos con Lai

September 1, 2015

Hace un par de años hice Lai, un programa para mantener un registro de aquellos comandos, snippets o notas que necesito tener a mano en la consola en cualquier computadora que uso. La instalación era un poco difícil hasta que se me ocurrió hacer una imagen con Docker. Ahora solo hay que crear una cuenta en lai.nerdlabs.com.ar y agregar este alias al inicio de la sesión

alias lai='docker run -it \
           --env USER= \
           --env KEY_NAME= \
           -v ~/.ssh/id_rsa:/root/.ssh/id_rsa \
           -v ~/var/lai:/app/data \
           --rm=true \
           lvidarte/lai python lai/app.py'

Lai utiliza el esquema cliente-servidor. En cada máquina hay que instalar un cliente que sincronizará contra el server. Para la comunicación se usa clave pública-privada. La clave pública hay que subirla al server y definirle un nombre o KEY_NAME para poder identificarla ya que es posible tener más de una. El USER es el mail de la cuenta de Google, que es el único modo de autenticación soportado.

Modo de uso

usage: lai [-h] [-v] {search,add,get,edit,editor,delete,sync,copy,status} ...

Cada comando tiene su ayuda

$ lai <command> --help

Para agregar algo

$ lai add 'grep -R <pattern> --include \*.txt <dir>'

También puedo poner una descripción

$ lai add 'tmux Prefix [' -d 'switch to copy mode'

El comando por defecto es search así que la búsqueda se reduce a

$ lai grep
1: grep -R <pattern> --include \*.txt <dir>

Puedo compartir cosas con otros usuarios haciéndolas públicas

$ lai edit 1 --public

Esto permite buscar entre lo público del server (y que no compartí yo)

$ lai search --server grep vim
55e477d48c4f21481fcd3cea: vim -d files #diff files with vim

Y copiarme aquello que quiera

$ lai copy --server 55e477d48c4f21481fcd3cea

Finalmente para sincronizar

$ lai sync

Alternativas a Lai

Docker Python Software Libre Trabajos

11, un clon del 2048 para consola

April 16, 2015

Hice este sencillo clon del 2048 usando Python y curses. Lo llamé 11 porque utiliza (muestra) los exponentes en lugar del resultado, por lo tanto 1 + 1 = 2, pero 2 + 2 = 3, y así. Se juega con las teclas de Vim (hjkl) y se sale con q. El código aquí.

Juegos Python Trabajos

Mi versión del juego de la vida

April 15, 2015

Esta es mi versión Python/Tkinter del Juego de la Vida. Al iniciarlo se puede definir el ancho/alto del tablero y el tamaño de las celdas.

$ ./life.py -W 40 -H 30 -s 20
Juego de la vida ventana principal

La ventana Patterns define el patrón que dibujará el puntero cuando hagas click sobre el tablero. Podés dibujar de a una celda por vez (One cell) o dibujar un pattern completo con un solo click :)

Juego de la vida selector de patrones

El código está en github.

Juegos Python Trabajos

Cañón láser

April 14, 2015

Jugando con un servo sg90 y un pequeño láser salió esto: un láser cuyo encendido y dirección se puede controlar desde la red.

Para controlarlo por red hice un sencillo servidor con Bottle.

Para la estructura usé un Meknex que se vende en casi cualquier juguetería.

El código de Arduino acá

Arduino Juegos Python Trabajos

Arduino Snake

December 4, 2014

Estuve haciendo dos proyectos en Arduino: Arduino Matrix RGB y Arduino Gamepad. Los dos tienen la característica de que se comunican por serial. En el caso de la matriz el sketch está permanentemente escuchando el puerto serial y cuando recibe un comando ejecuta alguna instrucción simple. En el gamepad es al revés, cada vez que se detecta un cambio, ya sea porque se mueve el joystick o se presiona un botón, se envía por serial el evento. De esa forma puedo controlar ambos desde un mismo programa. Para los clientes elegí Python.

Para combinar ambos se me ocurrió hacer un juego sencillo, el clásico Snake. La matrix funciona sobre un Arduino UNO y el gamepad sobre un Nano, ambos conectados a una Raspberry Pi B+

gamepad = Gamepad(Serial('/dev/ttyACM0', 9600))
matrix = Matrix(Serial('/dev/ttyUSB0', 9600))
snake = Snake(gamepad, matrix)

Arduino Juegos Python Raspberry Trabajos Video

Older | Newer