Latch y el Internet de las Cosas: Integración con Arduino (II)

lunes, 5 de octubre de 2015

Para conseguir el objetivo de integrar Latch con Arduino, explicaremos en esta entrega qué es Arduino y cómo dotarlo de conexión a internet por menos de cinco euros. En este caso, para conseguirlo se ha elegido el módulo WiFi ESP8266 que además cuenta con una comunidad muy nutrida y es sencillo de utilizar. Veamos cómo.

Integración IoT de Latch con Arduino

Arduino es una popular plataforma de hardware abierto ampliamente utilizada en todo tipo de proyectos electrónicos (especialmente en ambientes didácticos) por su sencillez y bajo coste. Basada en la arquitectura de microcontroladores AVR de ATMEL, incorpora un completo entorno de desarrollo integrado (IDE) de código abierto inspirado en Processing y cuenta con un lenguaje de programación Wiring que enlaza con el conjunto de software libre AVR-libc.

Al tratarse de una plataforma libre, tanto hardware como software, se ha generado todo un ecosistema de desarrolladores que hacen públicas sus librerías de código. Hay fabricantes que producen diferentes placas Arduino y complementos (shields) compatibles a bajo coste, por lo que no hay dificultad en obtener todos los elementos necesarios para una integración con Latch: desde código a materiales, con abundante información de todo tipo.

Módulo WIFI ESP8266

Existen muchas formas de conectar un Arduino convencional a Internet de forma autónoma, sin necesidad de utilizar un híbrido como el Arduino Yún. Generalmente se emplean shields Ethernet, Wifi o incluso GSM/GPRS, pero las posibilidades de esas combinaciones están muy limitadas por la escasez de recursos del microcontrolador Atmega328p con tan solo 2 Kbytes de memoria SRAM.

La ventaja de utilizar un módulo externo está en poder liberar al Arduino de las tareas más pesadas de la conexión a la red: desde al acceso al medio en este caso inalámbrico (802.11b/g/n con seguridad WEP/WAP/WPA2), hasta el stack TCP/IP al completo: IP, TCP, UDP, ARP, DHCP, DNS, e incluso SSL.

Entre los módulos externos más interesantes, y aunque no haya sido diseñado específicamente para Arduino, es posible realizar la conexión a Internet a través del pequeño ESP8266. Se trata de un económico SoC (System On a Chip) que proporciona conectividad Wifi 802.11b/g/n a 2.4Ghz. Su firmware soporta además diferentes estándares de seguridad que usaremos, como WPA/WPA2 y TLS/SSL entre otros muchos.

Basado en el core Xtensa LX de Tensilica (empresa que realizó el diseño lógico), los chips producidos por Espressif (quien fabrica el chip y publica los SDK) son ensamblados en diferentes módulos por varios fabricantes. AI-Thinker fabrica los módulos ya ensamblados y listos para usarse, y son los más difundidos.

Diferentes módulos ESP8266 de IA-Thinker

Gracias a que la compañía Espressif hizo público el kit de desarrollo (SDK) junto con toda la documentación, ha surgido una gran comunidad de desarrolladores de software, permitiendo sustituir el firmware original de Eletrodragon que proporciona una tosca interface mediante comandos AT, por auténticos sistemas embebidos como NodeMCU o MicroPython. Ha llegado incluso a aparecer un SDK alternativo basado en GCC, o una extensión para programarlo a través del IDE de Arduino como un sketch más. En nuestra práctica sustituiremos el firmware para que resulte posible la implementación deseada.

Se pueden conseguir en tiendas especializadas o por Internet por menos de 5 euros.

espduino

Una de las maneras más originales de orquestar la conexión entre el Arduino y el módulo ESP8266 es utilizar espduino: un proyecto particular publicado Open Source bajo licencia MIT que consta de dos partes:
  • Una librería para Arduino que implementa una API RESTful.
  • Un firmware para el módulo ESP8266.
Ambos dispositivos se comunican mediante protocolo SLIP (Serial Line Internet Protocol), un veterano estándar de encapsulación de datagramas IP sobre líneas serie (RFC 1055), aún hoy utilizado en sistemas embebidos por su sencillez, pero totalmente relegado por PPP (Point to Point Protocol RFC 1661) en la mayoría de sistemas ya que aporta numerosas ventajas.

Esquema de comunicación entre Arduino y ESP8266

La implementación RESTful de espduino soporta el método GET y la inclusión de cabeceras personalizadas, suficiente para consumir la API de Latch. No obstante, el handshake de SSL solo soporta claves de un tamaño no superior a 1024 bits. El "problema" es que hoy en día la mayoría de los servicios bajo HTTPS utilizan certificados con una clave de 2048 bits... y este es el caso de Latch. Así que será necesario articular un mecanismo de intermediación.

Extracto del certificado usado en el dominio de la API de Latch

En la próxima entrega veremos cómo configurar espduino para la conexión entre Arduino y el módulo WiFi, y cómo solucionar el problema de los 2048 bits.

Latch y el Internet de las Cosas: Integración con Arduino (I)
Latch y el Internet de las Cosas: Integración con Arduino (III)
Latch y el Internet de las Cosas: Integración con Arduino (IV)
Latch y el Internet de las Cosas: Integración con Arduino (V)
Latch y el Internet de las Cosas: Integración con Arduino (y VI)


Jorge Rivera
jorge.rivera@11paths.com

1 comentario: