jueves, 10 de septiembre de 2015

Cómo empezar con NodeMCU (II)

Después de ver cómo cargar el firmware (necesario para empezar a funcionar) y cómo hacer nuestro primer "Hello World!", viene el momento de hacer algo más interesante.

En NodeMCU se pueden cargar archivos de scripts LUA y no tener que estar copiándolos y pegándolos en el terminal. Para ello vamos a escribir nuestro primer script que nos mostrará las redes WiFi de nuestro alrededor:
 function listap(t) -- (SSID : Authmode, RSSI, BSSID, Channel)  
    print("\n"..string.format("%32s","SSID").."\tBSSID\t\t\t\t RSSI\t\tAUTHMODE\tCHANNEL")  
    for ssid,v in pairs(t) do  
    local authmode, rssi, bssid, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]+)")  
    print(string.format("%32s",ssid).."\t"..bssid.."\t "..rssi.."\t\t"..authmode.."\t\t\t"..channel)  
    end  
   end  
 wifi.sta.getap(listap)  

Lo guardamos como show_aps.lua y ahora necesitamos un "uploader" para subir los archivos a nuestro cacharrito. Yo utilizo este:
https://github.com/kmpm/nodemcu-uploader

Hacemos un git clone al repositorio
 $ git clone https://github.com/kmpm/nodemcu-uploader.git  

Y lo usamos, compilando y subiendo el archivo previamente creado:
 $ sudo python nodemcu-uploader.py upload show_aps.lua:show_aps.lua --compile  
 Preparing esp for transfer.  
 Remove show_aps.lc  
 file.remove("show_aps.lc")  
 Transfering show_aps.lua as show_aps.lua  
 Compile show_aps.lua  
 node.compile("show_aps.lua")  
 Remove show_aps.lua  
 file.remove("show_aps.lua")  
 All done!  

Ahora nos volvemos a conectar a través de Putty y lo ejecutamos para ver el resultado:
 > dofile("show_aps.lc")  

Y nos mostrará algo como esto:

OJOCUIDAO! Después de compilarlo ya no tiene extensión .lua, ahora tiene extensión .lc

Ahora vamos a conectarnos a nuestra WiFi, una vez hemos visto que la tiene localizada. Abriendo Putty de nuevo (si has sido un prisas y ya lo has cerrado) y escribimos lo siguiente:
 > wifi.setmode(wifi.STATION)  
 > wifi.sta.config("SSID","password")  
 -- Esperamos unos segundos que se conecte  
 > print(wifi.sta.getip())  
 >> 192.168.1.XXX  

Y ya está conectado NodeMCU a nuestra red WiFi!

Podemos comprobarlo con un ping desde nuestra máquina a la IP que nos ha devuelto.

En la próxima entrada un pequeño servidor web con algún dato interesante para probar que todo funciona correctamente.

Un saludo!

martes, 8 de septiembre de 2015

Cómo empezar con NodeMCU (I)

Aprovechando que hoy es fiesta en Málaga, he empezado a preparar un minitutorial de NodeMCU.

NodeMCU es un kit de desarrollo basado en hardware y software libre que como principales cualidades tiene la capacidad de almacenar hasta 4MB y conexión WiFi, además de costar 6,5€.

Antes de nada avisar que este mini tutorial es para Linux, pues es el sistema operativo que utilizo como principal.

Lo primero que vamos a hacer es flashear el cacharrito con el firmware necesario para hacerlo funcionar. La mayoría vienen flasheados, pero así podemos tenerlo actualizalo con la última versión.

Descargamos el firmware oficial desde github:
https://github.com/nodemcu/nodemcu-firmware/releases
Descargamos, en el momento de escribir esta entrada el archivo nodemcu_integer_0.9.6-dev_20150704.bin

Después tenemos que tener la herramienta para flashear nuestro NodeMCU, llamada esptool que es software libre (nuevamente) y podemos descargar desde: https://github.com/themadinventor/esptool

esptool tiene una dependencia que debemos instalar previamente con:
 $ sudo pip install pyserial  

Y después instalamos el propio esptool:
 $ sudo python setup.py install  

Ahora conectamos nuestro cacharrito y para ver qué puerto se le ha asignado hacemos:
 $ dmesg | tail  

Y nos debe salir algo como esto:
 [ 1699.923283] usb 1-1.2: new full-speed USB device number 8 using ehci-pci  
 [ 1700.016382] usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523  
 [ 1700.016389] usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0  
 [ 1700.016392] usb 1-1.2: Product: USB2.0-Serial  
 [ 1700.016801] ch341 1-1.2:1.0: ch341-uart converter detected  
 [ 1700.018752] usb 1-1.2: ch341-uart converter now attached to ttyUSB0  

Lo que nos indica que ha sido conectado en /dev/ttyUSB0

Procedemos a flashear con esptool y el firmware (.bin) previamente descargado:
 $ sudo esptool.py --port /dev/ttyUSB0 write_flash 0x00000 ~/nodemcu/firmware/nodemcu_integer_0.9.6-dev_20150704.bin   
 Connecting...  
 Erasing flash...  
 Wrote 462848 bytes at 0x00000000 in 45.5 seconds (81.4 kbit/s)...  
   
 Leaving...  

Y con esto ya tenemos el firmware cargado sobre el NodeMCU.

Ahora vamos a conectarnos a través del puerto serie (USB). Lo primero es tener un cliente instalado, yo tengo Putty (sí, el que se usaba para Windows, es software libre y también está para Linux) se instala con:
 $ sudo apt-get install putty  

Lo abrimos (recordad abrirlo con sudo para tener acceso al dispositivo USB)
 $ sudo putty  

y lo configuramos tal que así:


Pulsamos en "Open" y saldrá una pantalla en negro. Si nos dice que hay un problema de conexión posiblemente es que no lo hemos ejecutado con sudo o el dispositivo ha cambiado de posición (/dev/) y debemos mirarlo de nuevo con dmesg. Después de la pantalla en negro, pulsamos el botón de reset de la placa y nos saldrá una pantalla como esta:



¡Enhorabuena!, ya tenemos acceso a nuestro NodeMCU. Ahora sólo tenemos que escribir el programa que queramos hacer funcionar. Para empezar, por supuesto, no puede faltar el "Hello World!":

> print("Hello World!")
Hello World!



En las próximas entradas se profundizará un poco más sobre cómo conectar al WiFi y cargar scripts en él.

Fuentes: