ESP8266 Con Firmware Nodemcu

Embed Size (px)

Citation preview

  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    1/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 1/9

    Blog dedicado a la publicacin de mis investigaciones y desarrollos personales en el mbito de la

    agricultura de precisin a nivel "Hazlo tu mismo" , con el objetivo de aprender y disfrutar.

    Agricultura de precisin "Hazlo tu mismo"

    ESP8266 con firmware Nodemcu

    El proyecto que sugerido es el control de una luz led de forma remota con el

    mdulo ESP8266. Mediante una conexin wifi accederemos a una web en el

    que podremos seleccionar la opcin de apagar o encender un led de forma

    remota. En el siguiente vdeo podrs ver su funcionamiento bsico.

    https://plus.google.com/+AlbertodePascualTormo/posts/2o7Cn3NV3dy

    El proyecto se basa en un elemento simple como es un diodo led, sin embargo

    podra extrapolarse a proyectos de ms envergadura como el uso de rels para

    actuar con otros dispositivos a mayor voltaje.

    Para realizar el proyecto vamos a usar el firmware Nodemcu, el cual nos

    permite programar el dispositivo de forma independiente sin la necesidad por

    ejemplo de usar microcontroladores como Arduino. Nodemcu usa el lenguaje de

    programacin LUA, por lo que te recomiendo uses el siguiente tutorial para

    familiarizarte con dicho lenguaje.

    http://tylerneylon.com/a/learn-lua/

    Para instalar el firmware, lo haremos de forma s imilar al firmware oficial. Este

    procedimiento vara segn las herramientas usadas y el sistema operativo. En

    la siguiente imagen se muestra el esquema de conexin del mdulowifi al PC

    (recuerda que la actualizacin se hace conectando GPIO0 a GND)

    Instalar firmware Nodemcu desde linux:

    Necesitamos una utilidad para flashear el dispositivo que se llama ESptool

    (requiere de pySerial, as que si no dispones de esta utilidad debers instalarla

    en tu sistema).

    Descarga el programa de flasheo aqu:

    Drones(1)

    Actualidad

    Inicio

    Tutoriales

    1 Ms Siguiente blog Crear un blog Acceder

    https://plus.google.com/+AlbertodePascualTormo/posts/2o7Cn3NV3dyhttp://agrodiy.blogspot.com.es/http://agrodiy.blogspot.com.es/https://www.blogger.com/next-blog?navBar=true&blogID=6620525534592713876https://www.blogger.com/home#createhttps://www.blogger.com/https://www.blogger.com/https://www.blogger.com/home#createhttps://www.blogger.com/next-blog?navBar=true&blogID=6620525534592713876https://www.blogger.com/http://agrodiy.blogspot.com.es/p/blog-page.htmlhttp://agrodiy.blogspot.com.es/http://agrodiy.blogspot.com.es/search/label/Droneshttp://pyserial.sourceforge.net/http://tylerneylon.com/a/learn-lua/https://plus.google.com/+AlbertodePascualTormo/posts/2o7Cn3NV3dyhttp://agrodiy.blogspot.com.es/
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    2/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 2/9

    https://github.com/themadinventor/esptool

    La ltima versin de NodeMcu se encuentra en la siguiente direccin

    https://github.com/nodemcu/nodemcu-firmware/releases

    En el presente tutorial se ha usado una versin de desarrollo con el prefijo "dev",

    selecciona del listado la que desees. Una vez descargado todo lo necesario,

    colocamos esptool.py y nodemcu_latest.bin en la misma carpeta y ejecutamos

    el siguiente comando en la consola de linux (debers de cambiar en su caso el

    puerto usado)

    sudo./esptool.py-p /dev /ttyUSB0 write_flash 0x000000nodemcu_float_0.9.6-dev_20150704.bin

    Si queremos cambiar la velocidad del puerto serie hay que aadir

    sudo ./esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x000000nodemcu_float_0.9.6-dev_20150704.bin

    Despus de actualizar el firmware necesitamos una utilidad llamada ESPlorer,

    que sirve para entre otras cosas, escribir los scripts en LUA para

    posteriormente subirlos al mdulo wifi. Esta aplicacin necesita para funcionar

    Java 8 por lo que si te encuentras en linux tendrs que realizar previamente la

    instalacin. Te recomiendo que veas las siguientes instrucciones.

    Instalar Java 8 en ubuntu

    http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

    Una vez instalado Java, te puedes descargar ESPlorer desde la siguiente

    direccin:

    http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip

    Al descomprimir el archivo, comprobars que no existe instalador alguno sino

    que se ejecuta directamente desde la consola con la s iguiente instruccin.

    java -jar ESPlorer.jar

    Te recomiendo que hagas un acceso directo a dicha aplicacin.

    El montaje es muy sencillo, del pin GPIO2, sacamos un cable hacia una

    resistencia (calcula previamente la resistencia necesaria). A la salida de la

    resistencia conectamos el nodo del led y finalmente el ctodo del led lo

    conectamos a tierra. La siguiente imagen muestra un esquemtico:

    Montaje

    http://esp8266.ru/esplorer-latest/?f=ESPlorer.ziphttp://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.htmlhttps://github.com/nodemcu/nodemcu-firmware/releaseshttps://github.com/themadinventor/esptool
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    3/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 3/9

    Es muy importante que te familiarices con el API de Nodemcu para que puedas

    programar el mdulo sacndole el mximo partido, esto lo podrs hacer en la

    siguiente direccin:

    https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en

    Lo primero que vamos a hacer es explicar el cdigo bloque a bloque para

    comprenderlo y al final del tutorial lo veremos en conjunto:

    Cuando el mdulo wifi es alimentado, lo primero que hace es buscar y cargar

    un archivo denominado init.lua, desde este archivo se puede llamar a otros

    archivos de cdigo, como veremos ms adelante

    Explicacin de init.lua

    --init.lua

    print('Mensaje de bienvenida')

    Lo primero que hacemos es definir el pin que usaremos como salida. Paranuestro proyecto vamos a utilizar el GPIO2. En este firmware estn predefinidos

    los GIPIO con una numeracin segn la tabla siguiente:

    IO index ESP8266 pin IO index ESP8266 pin

    0 [*] GPIO16 7 GPIO13

    1 GPIO5 8 GPIO15

    2 GPIO4 9 GPIO3

    3 GPIO0 10 GPIO1

    4 GPIO2 11 GPIO9

    5 GPIO14 12 GPIO10

    6 GPIO12

    Definimos una variable para GPIO2, cuyo ndice es el 4

    pinled=4

    Seguidamente tenemos que indicar que el pin va a actuar como salida

    gpio.mode(pinled, gpio.OUTPUT)

    Finalizado con la configuracin de los GPIO, vamos a configurar el apartado del

    wifi. Para nuestro proyecto, el mdulo va a actuar como punto de acceso, es

    Explicacin de la Programacin

    https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    4/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 4/9

    decir , va a actuar como si fuera un router al que se le va a conectar distintos

    dispositivos, como pueden ser mviles, ordenadores, etc.

    wifi.setmode(wifi.SOFTAP)

    En este modo hay que establecer el nombre del punto de acceso que estamos

    configurando, as como la contrasea que nos tendrn que facilitar las

    estaciones que se nos quieren conectar para obtener una direccin IP. No

    olvides en cambiar con tus propios parmetros esta configuracin.

    cfg={}

    cfg.ssid="nombre de la red"

    cfg.pwd="contrasea"

    wifi.ap.config(cfg)

    La siguiente lnea es una comprobacin de que la configuracin como punto de

    acceso se ha llevado a cabo imprimiendo la direccin IP por la consola. Por

    defecto la direccin ip es 192.168.4.1

    ap=(wifi.ap.getip()) --obtiene la IP y la almacena en apprint(ap) --imprime por consola la direccin ip

    Un vez configurado el punto de acceso, la siguiente lnea especfica que se

    cargue el fichero ledserver.lua

    dofile("ledserver.lua")

    El siguiente cdigo corresponde al fichero ledserver.lua que ser subido junto

    con init.lua:

    Vamos a crear dos funciones que se encargarn de encender y apagar el led.

    La funcin apagar pone el pin GPIO2 en estado bajo e imprime un mensaje por

    consola

    function apagar()

    gpio.write(pinled,gpio.LOW)

    print("apagado")

    end

    La funcin encender pone el pin GPIO2 en estado alto e imprime un mensaje

    por consola

    function encender()

    gpio.write(pinled,gpio.HIGH)

    print("encendido")

    end

    La siguiente lnea configura el dispositivo como servidor bajo el protocolo TCP y

    con timeout 30 segundos, esto es, si un c liente est inactivo ms de 30

    segundos se desconectar

    sv=net.createServer(net.TCP, 30)

    tmr.delay(10000) --aadimos un retardo para levantar el

    servidor

    Indicamos que se escuches el puerto 80

  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    5/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 5/9

    sv:listen(80,function(c)

    Con esta parte indicamos que si se produce un evento del tipo receive (al

    recibir datos) , se ejecute una serie de instrucciones (callback). En nuestro

    caso pl contiene el mensaje recibido.

    c:on("receive", function(c, pl)

    El en el diseo de nuestra aplicacin recibiremos la orden de apagar o encender

    el led por la URL con el mtodo GET. Para encender el led tendremos una url

    del tipo:

    http://192.168.4.1/?led=on

    Para apagar el led tendremos esta URL

    http://192.168.4.1/?led=of

    Nuestro objetivo es capturar el mensaje transmitido por la URL y asociarlo a una

    variable. Si imprimimos el mensaje pl veremos que el mensaje recibido vlido

    tiene este estilo

    print(pl) --para depurar imprimimos el mensaje

    GET /?led=on

    GET /?led=of

    Si observamos la cadena de texto, la palabra led ocupa la posicin desde el

    carcter 7 al 9 y las palabras on y of la posiciones 11 y 12

    Con la siguiente lnea almacenamos en una variable orden la parte de la

    cadena de texto recibida entre el carcter 7 y 9 (lo usaremos ms adelante)

    orden=string.sub(pl,7,9)

    Con la siguiente lnea almacenamos en una variable enviado la parte de la

    cadena de texto recibida entre el carcter 11 y 12 (lo usaremos ms adelante)

    enviado=string.sub(pl,11,12)

    Para depurar imprimimos la parte extrada del mensaje (pl)

    print(orden)

    print(enviado)

    Con el siguiente bloque condicional lo que hacemos es verificar que la url pasa

    la palabra led que hemos extrado del mensaje. En caso de que sea correcto

    ejecuta la funcin encender () o apagar() segn venga en la URL

    if orden=="led" then

    print("orden captada")

    if enviado=="on" then

    encender() end

    if enviado=="of" then

    http://192.168.4.1/?led=onhttp://192.168.4.1/?led=on
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    6/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 6/9

    apagar() end

    end

    Esta parte es la encargada de construir la pgina web. con la instruccin c:send

    se enva la web como respuesta a la peticin hecha por el cliente (recordar que

    estamos en la funcin callback que se ejecuta cuando se recibe un dato). Cada

    salto de lnea se representa con los caracteres \n

    c:send('HTTP/1.1 200 OK\n\n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:send('ESP8266\n')

    c:send('Ejemplo de control de

    led\n')

    c:send('Alberto de Pascual Tormo\n')

    c:send('

    Marzo 2015

    \n')

    c:send('\n')

    c:send('\n')

    c:send('Selecciona Apagar/EncenderLed\n')

    c:send('Encender
    \n')

    c:send('Apagar
    \n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:on("sent",function(c) c:close() end)

    end)

    end)

    Advierte que al una vez enviada todo la pgina html se ejecuta una funcin que

    cierra la conexin. Esto ocurre cundo el evento enviado (sent) ha ocurrido.

    Una vez finalizada la explicacin vamos a subir los dos ficheros

    ledserver.lua e init.lua al dispositivo mediante la utilidad

    ESPlorer.

    Arrancamos la aplicacin y creamos un nuevo archivo en File>New

    Este sitio emplea cookies de Google para prestar sus servicios, para personalizar anuncios y para analizar eltrfico. Google recibe informacin sobre tu uso de este sitio web. Si utilizas este sitio web, se sobreentiende queaceptas el uso de cookies.

    MS INFORMACIN ENTENDIDO

    https://www.blogger.com/go/blogspot-cookies
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    7/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 7/9

    En el panel de cdigo tal como se ve en la imagen anterior, pegamos el

    siguiente cdigo:

    pinled=4

    gpio.mode(pinled, gpio.OUTPUT)

    wifi.setmode(wifi.SOFTAP)

    -- wifi config start

    cfg={}

    cfg.ssid="nobre del punto de acceso"

    cfg.pwd="contrasea"

    wifi.ap.config(cfg)

    ap=(wifi.ap.getip())

    print(ap)

    dofile("ledserver.lua")

    Conectamos por el puerto COM correspondiente:

    y le damos al botn Save to ESP

    Ahora hacemos lo propio con el siguiente fichero, el siguiente cdigo es el que

    vamos a usar:

    function apagar()

    gpio.write(pinled,gpio.LOW)

    print("apagado")

    end

    function encender()

    gpio.write(pinled,gpio.HIGH)

    print("encendido")

    end

    sv=net.createServer(net.TCP, 30)

    tmr.delay(10000)

  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    8/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiy.blogspot.com.es/p/esp8266-con-firmware-nodemcu.html 8/9

    sv:listen(80,function(c)

    c:on("receive", function(c, pl)

    --para depurar

    print(pl)

    orden=string.sub(pl,7,9)

    enviado=string.sub(pl,11,12)

    print(orden)

    print(enviado)

    if orden=="led" then

    print("orden captada")

    if enviado=="on" then encender() end

    if enviado=="of" then

    apagar() end

    end

    c:send('HTTP/1.1 200 OK\n\n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:send('ESP8266\n')

    c:send('Ejemplo de control de led\n')

    c:send('Alberto de Pascual Tormo\n')

    c:send('

    Marzo 2015

    \n')

    c:send('\n')c:send('\n')

    c:send('Selecciona Apagar/Encender Led\n')

    c:send('Encender
    \n')

    c:send('Apagar
    \n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:send('\n')

    c:on("sent",function(c) c:close() end)

    end)

    end)

    Una vez subidos ambos archivos, hacemos un reset al dispositivo y ya

    estaremos en disposicin de usarlo. Si buscamos en las redes disponibles wifi,

    encontraremos una nueva red con el nombre SSID, que hayamos especificado

    en la programacin y con la contrasea correspondiente. Desde un dispositivo

    mvil o desde nuestro ordenador nos conectamos a dicho punto wifi y

    esperamos a que se produzca, tras lo cual, escribimos en el navegador la

    direccin IP 192.168.4.1. Una vez hecho esto veremos en el navegador la

    pgina web albergada en el dispositivo ESP8266, en el que se despliega el

    formulario de control del led. Experimenta con el apagado y encendido del led y

    observa cmo en la consola de ESPlorer aparecen los mensajes de

    depuracin.

    +1 Recomendar esto en Google

    1 comentario:

    Unknown 13 de enero de 2016, 16:07

    Hola, te felicito esta muy bien explicado, podrias ayudarme? necesito crear un sitio

    web donde pueda meter manualmente el SSID y el password de mi modem para asi

    no tener que conectarme directamente al esp8266 y tampoco tener la necesidad de

    estar guardando esos datos a traves de usb

    Responder

    http://agrodiy.blogspot.com/p/esp8266-con-firmware-nodemcu.htmlhttps://www.blogger.com/profile/15603946364726849640https://www.blogger.com/share-post.g?blogID=6620525534592713876&pageID=8090699322280825002&target=pinteresthttps://www.blogger.com/share-post.g?blogID=6620525534592713876&pageID=8090699322280825002&target=facebookhttps://www.blogger.com/share-post.g?blogID=6620525534592713876&pageID=8090699322280825002&target=twitterhttps://www.blogger.com/share-post.g?blogID=6620525534592713876&pageID=8090699322280825002&target=bloghttps://www.blogger.com/share-post.g?blogID=6620525534592713876&pageID=8090699322280825002&target=email
  • 7/25/2019 ESP8266 Con Firmware Nodemcu

    9/9

    5/2/2016 Agricultura de precisin "Hazlo tu mismo": ESP8266 con firmware Nodemcu

    http://agrodiyblogspot com es/p/esp8266 con firmware nodemcu html 9/9

    Pgina principal

    Suscribirse a: Entradas (Atom)

    Introduce tu comentario...

    Comentar como: Cuenta de Go

    Publicar Vista previa

    Ortofoto

    Ortofo Diy Para empezarcon el blog comparto unafotografa area realizadaa finales de julio tras unvuelo de prueba de

    aproximadamente...

    Manual de NO conversinde cma ra CANONPowershot A2500

    Tras fallar en laconversin de unacmara de fotos Canon

    Powershot A2500, para poder realizarfotografas para fotointerpretacin deimgen...

    Drupal como plataforma

    de Internet de las CosasEn el siguiente vdeo sepuede apreciar el actualdesarrollo de laplataforma Drupal para

    albergar datos del Internet de las cosas,para ell...

    Filtros de Public Lab parala conversin de cmaras

    Despus de laexperiencia comentadaen esta entrada sobre mifracaso para la conversin

    de una cmara Canon A2500, me hanllegado los espe...

    Entradas populares

    Plantilla Simple. Con la tecnologa de Blogger.

    https://www.blogger.com/http://agrodiy.blogspot.com.es/2015/08/filtros-de-public-lab-para-la.htmlhttp://agrodiy.blogspot.com.es/2015/12/drupal-como-plataforma-de-internet-de.htmlhttp://agrodiy.blogspot.com.es/2015/08/manual-de-no-conversion-de-camara-canon.htmlhttp://agrodiy.blogspot.com.es/2015/07/ortofoto.htmlhttp://agrodiy.blogspot.com.es/2015/08/filtros-de-public-lab-para-la.htmlhttp://agrodiy.blogspot.com.es/2015/12/drupal-como-plataforma-de-internet-de.htmlhttp://agrodiy.blogspot.com.es/2015/08/manual-de-no-conversion-de-camara-canon.htmlhttp://agrodiy.blogspot.com.es/2015/07/ortofoto.htmlhttp://agrodiy.blogspot.com/feeds/posts/defaulthttp://agrodiy.blogspot.com.es/