Fork me on GitHub

Posts in tag `Trabajos'

Primeros pasos con NodeMCU

April 3, 2016

NodeMCU es un proyecto IoT Open Source hecho en China que incorpora el chip ESP8266 para conexión WiFi y que además es programable en Lua 5.1.

Algo muy interesante de NodeMCU es que su firmware incorpora el intéprete Lua, al cual se accede mediante el puerto serial, permitiendo escribir comandos e interactuar directamente con el hardware en tiempo real.

El intérprete embebido incorpora muchos módulos útiles como wifi para manejar la conexión.. wifi, net y http para crear servidores o clientes http, gpio y pwm para control de los pines y varios otros. Está todo muy bien documentado en https://nodemcu.readthedocs.org.

Para empezar lo primero es instalar el firmware usando esptool. Aquí hay una buena guía para esto, pero básicamente es seguir este ejemplo

sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_integer_0.9.6-dev_20150704.bin

Al finalizar veremos algo así

Wrote 450560 bytes at 0x00000000 in 44.3 seconds (81.3 kbit/s)...

Leaving...

Luego hay que ingresar usando el puerto serie al que esté conectado, para eso se puede usar minicom o screen. Prefiero screen porque minicom me borra lo escrito al redimensionar la ventana.

screen /dev/ttyUSB0 9600

Al ingresar se ven unos caracteres raros (posiblemente chino y no tengo la fuente) y el prompt del intérprete de Lua. Si el prompt no aparece generalmente lo hace luego de apretar Enter, sino node.restart() reincia NodeMC

NodeMCU 0.9.6 build 20150704  powered by Lua 5.1.4
lua: cannot open init.lua
>

Listo, estamos en condiciones de escribir Lua! Acá van un par de ejemplos

> -- Connect to your AP
> wifi.setmode(wifi.STATION)
> wifi.sta.config("SSID", "password")
> ip = wifi.sta.getip()
> print(ip)
192.168.18.110
> -- A simple HTTP server
> srv = net.createServer(net.TCP)
> srv:listen(80, function(conn)
>     conn:on("receive", function(conn,payload)
>         print(payload)
>         conn:send("<h1>Hello from NodeMCU.</h1>")
>     end)
>     conn:on("sent", function(conn) conn:close() end)
> end)

Lua Trabajos esp8266

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

Visor lcd de temperatura y humedad

August 6, 2015

Estuve jugando un rato con un lcd y un sensor de temperatura y salió esto

La lista de materiales es la siguiente

El esquema de conexiones para el LCD (hecho con circuits.io) es el siguiente

Sólo hay que agregarle el sensor, que tiene 3 patas: gnd, vcc y data que conecté al pin 5 en el Arduino. Para leerlo usé una librería de Adafruit. El código me quedó así

Algo interesante que encontré es que en Arduino la función printf no funciona con floats, por lo que %f se reemplaza por ?, así que hay que hacer un poco de trabajo extra para mostrarlos.

Referencias

Arduino 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

Autito para Lauti

April 1, 2015

Jugando con un Meknex hicimos este autito, luego reciclamos una vincha con leds (de esas que se usan para fiestas) y le metimos las luces.

Para cortar la corriente hice una llave con una chapita y un tornillo.

Juegos Trabajos

Mosquita

March 18, 2015

Mosquita hecha con un vibrador de un viejo Samsung Galaxy, una pila AAA y un poco de alambre fino.

Los nenes chochos :)

Juegos Trabajos Video

Blink en Arduino con Cylon.js

January 10, 2015

Quería ver qué tal era instalar cylon.js y hacer al menos un blink con él. La instalación con npm es simple

$ npm install cylon cylon-gpio cylon-i2c cylon-firmata

Cylon se comunica con Arduino vía serial usando el protocolo firmata. Lo instalamos usando el IDE de Arduino o podemos usar gort.io, que es una herramienta en Go hecha por los mismos de cylon y que es muy parecida a inotool. Lamentablemente gort no funciona con Arduino Nano así que tuve que usar un Uno.

$ gort scan serial
$ gort arduino install
$ gort arduino upload firmata [port]

Finalmente el código en JS queda así

Arduino Javascript Trabajos

Older | Newer