Blog

ESP8266 (Parte 1) : Programación en Lua y Arduino

NodeMCU_DEVKIT_1.0

 

Desde que llegara al mercado el módulo ESP8266, muchos desarrolladores han visto su potencial para crear nuevas aplicaciones sobre él gracias a su bajo coste pero gran funcionalidad, y seguramente todos ellos se hayan hecho la misma pregunta al principio, ¿cómo lo programo? Con estos dos artículos quiero contar las diferentes formas que he encontrado para programarlo, y así cada uno pueda usar la que más se ajuste a sus necesidades.

Antes de comenzar con la programación me gustaría comenzar por una breve explicación de la plataforma. Yo he trabajado con la placa de desarrollo NodeMCU, cuya única diferencia con respecto al módulo ESP8266 es que tenemos acceso a todos los pines del módulo y además cuenta con un microUSB para cargarle los programas. El ESP8266 lo fabrica la empresa Espressif y es un System-on-Chip (SoC) que integra el microcontrolador Tensilica L106 de 32bit. En la tabla siguiente podemos ver las especificaciones completas:

Procesador Tensilica L106 32bit RISC
Frecuencia 80 MHz OverClock 160 MHz
Memoria Flash 4 MB Memoria RAM 128 KB
Periféricos
GPIO 13 SPI 2
I2C 1 ADC 10 bit
PWM 4  UART  1
WiFi
Norma 802.11b/g/n Frecuencia 2,4 GHz

 

Todos estos datos se pueden consultar en la página oficial de Espressif:

https://espressif.com/en/products/hardware/esp8266ex/overview

 

En esta primera parte voy a explicar cómo programar el NodeMCU de las dos maneras más sencillas y más extendidas, usando el lenguaje de programación Lua y usando el framework de Arduino.

NodeMCU Firmware

nodemcu-style5-150px.png_150x150

Se trata de un firmware basado en el lenguaje de programación Lua. Ha sido implementado por los mismos desarrolladores que han creado la plataforma de desarrollo. Este firmware se encuentra escrito en C pero con instrucciones para que se usen con Lua, que es un lenguaje interpretado, como Python, por lo que es menos eficiente. La forma de programación es muy sencilla, por lo que es perfecto para proyectos poco complejos y ŕapidos, que no necesiten optimización.

Para usar este método, lo primero que tenemos que hacer es ir a la página de la documentación, al apartado de “Building the firmware” y crear nuestro firmware que cargaremos en la placa. El método más cómodo es usar su servicio basado en la nube, ya que indicamos qué módulos necesitamos, y nos envían por email el binario ya compilado que tenemos que flashear en la placa.

Después hay que flashear el firmware. Para ello el método que a mi siempre me ha funcionado es usar “esptool.py”. Leyendo el apartado “Flashing the firmware” encontramos cómo usar este programa sumamente útil. A la hora de cargar el firmware, es necesario ejecutar el script en modo superusuario para permitir acceder al puerto al que tengamos conectado el NodeMCU.

Por último, solo nos queda subir los scripts de Lua que hemos creado. Para ello la mejor herramienta es ESPlorer. La documentación para esta herramienta la encontramos en su página web: https://esp8266.ru/esplorer/ . Este programa cuenta con una zona donde escribir el código y otra que se conecta por puerto serie a la placa donde ver lo que imprimimos por pantalla desde el NodeMCU. Otras herramientas las podemos encontrar en el apartado “Uploading code”.

escritorio-esplorer

Yo personalmente descarté este método después de estar usándolo porque no tenía un control total de la memoria, sino que solo había un recolector de basura al que tú le indicabas cuando tenía que buscar memoria que liberar. Mi problema principal fue que el flujo de datos de entrada era más rápido que el tiempo que tardaba el NodeMCU en mandarlos por SPI, y se me llenaba la memoría.

La documentación de este firmware se encuentra en las siguientes páginas:

 

Arduino IDE

1200px-Arduino_Logo.svg

Una de las grandes razones por las que esta plataforma se ha hecho tan famosa, a parte del precio, es por ser conocida como “el Arduino barato con Wifi”, gracias a que los desarrolladores implementaron la compatibilidad para desarrollar programas en ella de la misma manera que con las placas de Arduino.

La ventaja de usar este método es que es muy sencillo y rápido de realizar, además cuentas con las numerosas librerías que se han desarrollado para Arduino y de una gran comunidad que puede ayudarte.

La desventaja es que tienes menos control de las capas más bajas del hardware y además cuentas con las limitaciones del IDE de Arduino.

Para desarrollar usando este método, hay que agregar la placa en el IDE como se hace habitualmente: Herramientas>Placa>Gestor de Tarjetas e instalamos el paquete “esp8266 by ESP8266 Community”. Una vez instalados los drivers, simplemente se programa, compila y suben los programas tal y como se hacen con el resto de placas de Arduino.

En el siguiente enlace dejo un tutorial en castellano que explica cómo utilizar este método, incluyendo algunos ejemplos:

https://programarfacil.com/esp8266/como-programar-nodemcu-ide-arduino/

 

En la siguiente entrada hablaré de métodos de programación usando C, donde se consigue un control mayor de todo lo que realiza el módulo.

TFG: Diseño e implementación de una red de nodos inalámbricos para comunicaciones multipunto de contenido multimedia

dav

 

En estos últimos años las redes inalámbricas de nodos de bajos recursos han incrementado notablemente su presencia, y debido al auge de tendencias como el “Internet de las Cosas”, se espera que cada vez más estos nodos se encuentren presentes en nuestro día a día. La flexibilidad y bajo coste de su despliegue, frente a redes de nodos cableados, hacen que sean la primera opción al implementar un sistema.

 

Estas redes normalmente no son exigentes con las tasas binarias de transmisión, y es por ello, que transmitir contenido multimedia a través de una red inalámbrica con recursos limitados suponga un mayor reto. Debido al deseo de crear grandes redes capaces de intercambiar datos, no sólo se buscan comunicaciones inalámbricas entre nodos, sino que además es deseable que estas sean multipunto.

 

El objetivo de este Trabajo de Fin de Grado es diseñar e implementar un sistema sencillo, independiente y de bajo coste con el que se puedan intercambiar de forma inalámbrica contenido multimedia, de manera que se consiga un sistema de comunicación multipunto con mínimos recursos.

Introducción a la Impresión 3D. Parte 2: Impresión de modelos (Slicers)

screenshot cura

El pasado 7 de Marzo de 2017, nuestros compañeros Rutrilla y Jmartin llevaron a cabo una charla introductoria a la impresión 3D.

El objetivo era doble, por un lado el manejo básico de las impresoras 3D con las que cuenta el laboratorio B105: las Witbox2 de BQ, por otro, el manejo básico de las herramientas de laminado (slicers) para convertir las piezas STL en el gcode que entienden las impresoras 3D.

En el vídeo que os dejamos a continuación podéis encontrar la segunda parte de esta charla, centrada en el la impresión de modelos 3D haciendo usos de slicers o laminadores. Será una introducción al uso y configuración de Cura para generar los fichero .gcode para imprimir modelos.

Si lo deseas puedes continuar leyendo la primera parte de este pequeño curso.

Pruebas de detección de vehículos en la A-1 para el proyecto Easysafe

IMG_20170426_132303

El paso día 26 fuimos a realizar pruebas para el proyecto Easysafe. La hubicación de las pruebas la autovía A-1 en el kilómetro 111. En él se realizaros varios test enfocados a la detección de vehículos, personas y fauna en la carretera. Esto se realizó por medio de varios tipos de acelerómetros y un magnetómetro sitiados fuera del asfalto. Como se puede apreciar en las fotografías, los sensores fueron colocados en el quitamiedos, a una distancia bastante lejana de loos vehículos y aun así las medidas han sido satisfactorias. A partir de ahora, el trabajo se centrará en el algoritmo para discriminar el tipo de vehículo, animales y personas.

easysafe

Desarrollando con Google Tango

tango

Tango es una plataforma de visión artificial y realidad aumentada desarrollada por Google. Gracias a ella, dispositivos como smartphones y tablets pueden conocer y entender su posición en el mundo que les rodea sin necesidad de GPS u otras señales externas. Esto tiene múltiples aplicaciones como la navegación en interiores, el mapeo 3D, la medición de espacios físicos, el reconocimiento de objetos, etc.

El funcionamiento de la plataforma se basa en tres tecnologías principales: el seguimiento del movimiento (Motion Tracking) utilizando las medidas de acelerómetros y giróscopos en conjunto con las características visuales; el aprendizaje de área (Area Learning) que consiste en el almacenamiento de datos del entorno como espacios, paredes, puertas, etc; y la percepción de profundidad (Depth Perception) que permite entender las formas del entorno.

Para realizar todas estas acciones, Tango se basa principalmente en la información visual proporcionada por la cámara del dispositivo. Sin embargo, dado que los datos de profundidad y distancia a los objetos son clave, la plataforma no puede funcionar en teléfonos típicos con una sola cámara. De hecho, los dispositivos habilitados para ejecutar Tango cuentan además de con la cámara convencional, con un objetivo fish-eye para el seguimiento de movimiento y con un emisor-detector de infrarrojos para medir la profundidad. En la actualidad solo existe en el mercado uno de estos dispositivos, la phablet Lenovo Phab 2 Pro.

tango-phab-2-pro

En el laboratorio B105 hemos adquirido uno de estos dispositivos ya que vamos a utilizar Google Tango en uno de nuestros proyectos de investigación. En las siguientes imágenes se pueden ver algunas de las cosas que pueden hacerse con la plataforma y sus aplicaciones.