Fork me on GitHub

Posts in tag `Lua'

Lámpara RGB con NodeMCU

June 18, 2016

Siguiendo con las pruebas con NodeMCU armé un pequeño script que cambia aleatoriamente los valores de un led rgb cada cierto tiempo. Para setear los valores del led usé el módulo pwm. Salvo el pin 0 el resto de los pines soporta pwm. Acá el esquema de conexiones

Para generar los valores aleatorios usé math.random de la librería estándar y para el timer el módulo tmr. Metí todo en funciones y quedó así

Quería probar el upload del archivo y entonces encontré luatool, escrito en Python :) Se pueden subir n archivos y uno de ellos debe ser init.lua, que será el que se ejecute durante el start.

luatool  --port /dev/ttyUSB0 --src rgb.lua --dest init.lua --verbose

Eso es todo :)

Lua Trabajos esp8266

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

Redis desde Python, Ruby, Lua, PHP y Node

September 6, 2014

El ejercicio es abrir varias terminales y jugar con redis desde distintos lenguajes. Para cada lenguaje se puede usar su propia consola interactiva.

Primero un ejemplo simple usando la consola de redis

$ redis-cli 
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"

La consola de redis también puede usarse de esta forma

$ echo "set foo bar" | redis-cli
OK
$ echo "get foo" | redis-cli
"bar"

Finalmente los clientes. En el sitio de redis hay un listado de clientes para muy diversos lenguajes. De ahí elegí los siguientes.

Python

Github: redis-py

$ sudo pip install redis
$ python
>>> import redis
>>> r = redis.Redis()
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

Ruby

Github: redis-rb

$ sudo gem install redis
$ irb
>> require 'redis'
=> true
>> redis = Redis.new
=> #<Redis client v3.1.0 for redis://127.0.0.1:6379/0>
>> redis.set "foo", "bar"
=> "OK"
>> redis.get "foo"
=> "bar"

Lua

Github: redis-lua

$ sudo apt-get install lua-redis
$ lua
> redis = require 'redis'
> client = redis.connect('127.0.0.1', 6379)
> client:set('foo', 'bar')
> foo = client:get('foo')
> print(foo)
bar

PHP

Github: phpredis

$ sudo apt-get install php5-redis
$ php -a
php > $redis = new Redis();
php > $redis->pconnect('127.0.0.1', 6379);
php > $redis->set('foo', 'bar');
php > $foo = $redis->get('foo');
php > print $foo . "\n";
bar

Node

Github: node_redis

$ npm install redis
$ node
> var redis = require('redis')
> var client = redis.createClient(6379, '127.0.0.1')
> client.set('foo', 'bar', redis.print)
true
> Reply: OK
> client.get('foo', function(err, res) { console.log(res) })
true
> bar

Read more »

Lua Node.js PHP Python Ruby

← Older | Newer →