ESP8266 (Parte 2) : Programación en C, Simba y FreeRTOS

nodemcu_pins

 

En este segundo artículo voy a contar dos soluciones para programar en C el módulo ESP8266. Estas soluciones son mucho más potentes pero también se tarda más en implementar los programas.

Simba

logo

Después de encontrarme con los problemas de memoria mencionados en la anterior entrada, busqué una forma de programar el ESP8266 en C, y encontré el sistema operativo Simba. Simba es un RTOS (Sistema Operativo de Tiempo Real) escrito en C y con numerosos drivers fáciles de usar.

La forma de usar Simba con el ESP8266 también es muy sencilla, solo hay que descargar e instalar el editor Atom y luego dentro de Atom añadir el paquete de PlatformIO (platformio-ide). PlatformIO es un ecosistema orientado a la programación de sistemas empotrados. La ventaja principal de este ecosistema es la facilidad de compilar, flashear el firmware y conectarse por puerto serie desde el propio Atom.

Para empezar a programar nuestro ESP8266, crearemos un nuevo proyecto de PlatformIO y seleccionaremos la placa que vamos a utilizar, en mi caso, NodeMCU 1.0 (ESP-12E Module). Si queremos usar Simba tendremos que abrir el fichero platformio.ini y cambiar el framework escribiendo “framework = simba”. Además tendremos que ir a la carpeta lib/ y abrir el fichero readme.txt donde sustituiremos todo el fichero por el árbol de ficheros que tenemos en la página de documentación de Simba: https://simba-os.readthedocs.io/en/latest/developer-guide/file-tree.html. Todo el código que queramos añadir se meterá en la carpeta src/ .

escritorio-simbaos

Por último solo tendremos que usar los siguientes botones:

Compilar

Flashear

Terminal puerto serie

 platformio-compilar platformio-flashear  platformio-puerto_serie

Pese a su sencillez de uso  y rápido aprendizaje, he dejado de usar este sistema operativo debido a que hay drivers que no están implementados completamente y algunos los he tenido que hacer yo mismo. En mi caso, hago uso de Websockets para la comunicación, y las funciones para conectar un cliente de Websocket a un servidor del mismo tipo no estaban correctamente implementadas. Además me he encontrado funciones muy útiles que no funcionaban y al mirar el código he visto que no estaban implementadas, solo estaban definidas.

Creo que es un sistema operativo muy fácil de aprender a usar y tiene la potencia de C a su vez, pero para llegar a ser mi primera opción tendrían que trabajar más con los drivers, no puede ser que publiquen drivers sin implementar.

Otro fallo que le he visto, sobre todo debido a que me interesaba trabajar a bajo nivel, es que el código del firmware se encuentra oculto en una carpeta. Personalmente sería más cómodo que ese firmware que se va a compilar apareciera en el proyecto directamente, por si fuera necesario adaptarlo o para consultarlo más cómodamente.

Toda la documentación se puede encontrar en los siguientes enlaces:

 

 

  1. FreeRTOS

logo_freertos

Por último, pero para mi la solución con mayor potencial es el framework ESP-OPEN-RTOS. Es un firmware basado en FreeRTOS y en el SDK oficial de Espressif. Ha sido desarrollado por la empresa SuperHouse pero es de código abierto. No solo incluye FreeRTOS, sino que además se agregan librerías probadas de terceros que aumentan su funcionalidad. Principalmente estas librerías son lwip, que implementa la pila TCP/IP para sistemas empotrados, y embedTLS para implementar los protocolos TLS y SSL.

Para comenzar a utilizar hay que seguir las instrucciones que se indican en el repositorio:

  1. Clonar el repositorio de esp-open-sdk y compilarlo con :

make toolchain esptool libhal STANDALONE=n

  1. Añadir al PATH la carpeta “esp-open-sdk/xtensa-lx106-elf/bin”.
  2. Clonar el repositorio de esp-open-rtos en modo recursivo:

git clone –recursive https://github.com/Superhouse/esp-open-rtos.git

  1. Compilar y cargar el proyecto desde la carpeta raíz del firmware:

make flash -j4 -C examples/http_get ESPPORT=/dev/ttyUSB0

 

Este framework contiene numerosos ejemplos con los que aprender cómo usar los drivers, por ejemplo, como conectarse a una red WiFi o usar determinados periféricos.

Su ventaja principal es que se puede controlar todo el sistema ya que es una ampliación del framework básico del fabricante. Además tiene buenas valoraciones en Github y sus actualizaciones son bastante recientes.

La desventaja de este framework es que se necesita un mayor conocimiento de programación y electrónica para usarlo, además de que su tiempo de desarrollo es mayor frente a las soluciones que expliqué en el primer artículo.

Toda la documentación de esta solución se puede encontrar en su repositorio:

Github: https://github.com/SuperHouse/esp-open-rtos

Si se desea utilizar una solución más sencilla pero a su vez más limitada, se puede consultar en la parte 1.

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

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.

ESP8266 (Parte 2): Programación en C, Simba y FreeRTOS

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.

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.

Introducción a la Impresión 3D. Parte 1: Manejo básico de la impresora

Manejo básico de la impresora 3D

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 primera parte de esta charla, centrada en el Manejo básico de la impresora: conocer sus partes, posible mantenimiento, funcionamiento del extrusor y del hotend, carga y descarga de filamento, cómo lanzar una primera impresión, adecuada configuración y calibración de la impresora para obtener una impresión perfecta.

Puedes seguir con la segunda parte de este pequeño curso.

Redes de vehículos: retos sobre fiabilidad y seguridad

navigating

La redes de vehículos y los vehículos autónomos han sido unas de las áreas de investigación e innovación más importantes de los últimos años y lo seguirán siendo durante mucho tiempo. Algunas de las empresas más importantes del mundo están investigando en este tema. Por ejemplo, Google lleva tiempo desarrollando su coche autónomo, Waimo, que ya lleva tiempo circulando en EEUU. También tenemos empresas del sector automovilístico como PSA, que ha hecho pruebas de trayectos considerables con vehículos autónomos.

El pasado 25 de marzo, un coche autónomo de Uber tuvo un accidente en Tempe, Arizona. Esto ha provocado que la empresa reconsidere su política de vehículos sin conductor. A pesar de que la culpa fue del otro vehículo implicado en el accidente, y que estaba conducido por una persona, la imagen que se transmite es que los vehículos autónomos son vulnerables y no pueden evitar los accidentes. Sobre esto existen muchas teorías, alguna de la más populares es que el objetivo tiene que ser que todos lo coches sean autónomos. Mientras la conducción sea mixta se verán estos casos por motivos muy razonables: el vehículo autónomo se basa en reglas y sensorización mientras el conductor humano se basa muchas veces en intuición y experiencia.

La realidad es que hay mucho recorrido en investigación para vehículos autónomos. Por ejemplo, las carreteras siguen siendo en la totalidad de los escenarios, estáticas y pasivas. Es decir, no aportan información al vehículo. De hecho, todos los sensores suelen estar embarcados en el vehículo en lo que llamamos OBU, On Board Unit. Hay algunos proyectos, como el europeo Scoop@f, que están intentando dotar de inteligencia a la carretera, algo que mejoraría muchísimo la fiabilidad de estos sistemas.

Por otro lado está el tema de la seguridad y la privacidad. Cuanta más información haya en estos sistemas será más seguro, desde un punto de vista físico, pero para la ciberseguridad es todo un reto. Estas redes complejas por su movilidad, dinamismo y heterogeneidad deben ser seguras al 100%. Lo que está en riesgo son vidas humanas y, por tanto, los ataques contra estas redes deben ser detectados y evitados. Además, los datos que manejan deben ser privados, como por ejemplo la localización. Todos los vehículos autónomos usan su posicionamiento GPS para guiarse. Si alguien accediese a esos datos sabría donde nos encontramos en todo momento.

IMG_20161207_113152

El B015 Electronic Systems Lab trabaja en varios proyectos e investiga en este área desde hace años. Proyectos como Easysafe, Deperita o Rigodón son la base para desarrollar futuras investigaciones que contribuyan a mejorar los escenarios de conducción autónoma.

Becas Cátedra BQ 2016/2017 – 2º semestre

Logo_Cátedra_RGB

Fruto de la colaboración del B105 con BQ se lanza esta nueva convocatoria de becas para el segundo semestre del curso académico 2016/2017 (ver documento adjunto).

Los interesados en alguna de las becas deberán enviar un correo electrónico a la dirección  catedra.bq.upm@bq.com con la siguiente información:

  • Asunto: [Becas Cátedra  BQ].
  • Curriculum Vitae.
  • Beca/s en las que estás interesado y la motivación.
  • Situación actual del candidato: curso, asignaturas pendientes, limitaciones de horarios, interés en realizar PFC, TFG, TFM, Prácticas en Empresa, etc.

Información de interés:

  • Fecha límite de recepción de CV: 23 de Marzo de 2017
  • Fecha de inicio de las becas: Preferiblemente 3 de Abril de 2016.

Os esperamos!

20162017-ConvocatoriaBecasCBQ-II

Ya están aquí!

IMG_20170117_140728_2

Han sido dos semanas de eterna espera, pero por fin desde El B105 podemos presentaros la nueva incorporación a la plantilla: NUESTRAS SUDADERAS NUEVAS. En estas épocas de frío polar, y tras una dura negociación, se decidió que no era suficiente con ponerse tres camisetas para no pasar frío. La necesidad de sudaderas era innegable. Nuestros trabajadores se pusieron pues a la ardua tarea del diseño y elección de color de nuestra fuente de calor. Os dejamos una prueba de lo geniales que han quedado:

sudaderas

Solemne Acto Académico de Investidura de Doctores

IMG_20170124_162833

Como cada año por enero, se ha celebrado el Solemne Acto de Investidura de Doctores de la Universidad Politécnica de Madrid. Este año, debido a la gran cantidad de tesis defendidas por la extinción de uno de los planes de doctorado, el acto se ha celebrado en cada una de las escuelas. Además, en esta ocasión el B105 ha estado bien representado por dos nuevos doctores, Elena y Javi, que defendieron sus tesis en noviembre de 2015. El acto ha sido sencillo, con discursos de las autoridades pertinentes y la entrega del anillo y diploma a cada uno de los nuevos doctores. ¡Esperemos tener de aquí y en adelante siempre representación en estos eventos!

IMG_20170124_162833

IMG_20170124_162846

32412047001_f93888656e_b

Soldado Acorazado de Honor 2016

_mlk6761

El pasado día 8 de Diciembre durante la celebración de la Virgen de la Inmaculada Concepción, patrona del arma de Infantería del Ejército de Tierra, en la base militar de El Goloso, sede de la Brigada de Infantería Acorazada Guadarrama XII (BRIAC XII), se procedió a la imposición de la boina de Acorazado de Honor a nuestro compañero Octavio Nieto-Taladriz.

El actual jefe de la BRIAC XII, General de Brigada José Conde de Arjona expuso en acto como méritos para dicho nombramiento: “Octavio desde hace algunos años nos asesora en cuantas aventuras emprendemos relacionadas con la innovación y desarrollos tecnológicos”.

_mlk6756_mlk6749