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

martes, 13 de octubre de 2015

En la entrada anterior quedamos pendientes de conocer los detalles técnicos de la conexión entre el Arduino y el módulo WiFi. Veamos cómo.

Conexión del módulo ESP8266 con Arduino

Una característica importante del módulo ESP8266 a tener en cuenta es su tensión de funcionamiento de 3.3 voltios (LVTTL), sin ningún tipo de tolerancia a tensiones superiores. Si utilizamos un Arduino tradicional, como el UNO, que trabaja a 5 voltios (TTL), es necesario realizar una adaptación de tensiones, tanto para la alimentación del módulo como para las líneas de comunicación entre ambos dispositivos.

Pinout del módulo ESP-01

Hay otros modelos de Arduino que trabajan a 3.3v como el MINI PRO 3v, el DUE, o el nuevo M0+, y pueden ser conectados directamente al módulo ESP8266 sin ningún tipo de adaptación. Incluso estos dos últimos pueden alimentarlo por su salida de 3.3v ya que proporcionan corriente suficiente para ello.

También es posible modificar el Arduino UNO para que funcione internamente a 3.3 voltios, pero siempre será mejor opción implementar una adaptación de niveles lógicos entre dispositivos de diferente tensión.

Resulta sencillo cuando se conectan dispositivos de lógica TTL 5v con dispositivos de lógica LVTTL 3.3v, porque son compatibles entre sí al establecerse los mismos valores de tensión para los niveles lógicos HIGH y LOW.

Solo es necesario implementar una limitación o reducción de tensión cuando el dispositivo LVTTL 3.3v no sea tolerante a 5v. No ocurre igual con conexiones I2C o SPI, las cuales requieren conversores bi-direccionales que eleven la tensión de 3.3v a 5v cuando la comunicación va en este sentido.

Niveles de tensión de diferentes familias lógicas


Hay varias formas de realizar la limitación de tensión de 5v a 3.3v: conversores de nivel bi-direccionales, limitadores de diodo zener, e incluso un simple divisor de tensión formado por dos resistencias.

Una forma poco usual, aunque de excelentes resultados, es utilizar un diodo Schottky en polarización inversa junto a una resistencia pull-up. De esta forma se consigue una conversión mucho más rápida y precisa, ideal para altas velocidades de transmisión.

Respuesta de diferentes limitadores de tensión


Al utilizar un Arduino UNO es necesario adaptar obligatoriamente dos líneas de comunicación con el módulo ESP8266:

  • Línea de recepción (RX)
  • Línea de selección de chip (CH_PD) "Power Down", obteniendo mejores resultados uniendo esta a la línea de reset (RST).

La línea de transmisión (TX) en teoría no necesitaría ninguna adaptación por tratarse de una línea de salida, pero es aconsejable incorporar un limitador de tensión. La razón es que esta línea se conectará con el RX0 del Arduino (Atmega328p), que a su vez está conectada con la línea de transmisión del conversor USB-Serie que trabaja a 5v, los cuales son suministrados cuando el conversor transmite, por ejemplo, al cargar un nuevo sketch.

Conexión interna del conversor USB-Serie

Además de la adaptación en las líneas de comunicación, en necesario alimentar el módulo ESP8266 a 3.3 voltios con al menos 215mA de intensidad.En las especificaciones del Arduino UNO indican 50mA como intensidad máxima en su salida de 3.3 voltios. No obstante, este es un valor no actualizado desde las primeras versiones de Arduino USB que utilizaban un conversor USB-Serie de FTDI con estas características.

Los nuevos modelos de Arduino, como el UNO, incorporan como conversor USB-Serie un Atmega16U2, junto con un regulador lineal de 3.3 voltios LP2985-33 que es capaz de entregar hasta a 150mA de intensidad.

Es posible utilizar esta salida de 3.3v del Arduino UNO para alimentar el ESP8266 en las etapas de prueba, pero para un uso optimo y estable, es conveniente incorporar un regulador lineal de mayor capacidad.

Conexión de Arduino UNO y módulo ESP-01 en modo de funcionamiento normal

El uso de las librerías espduino requiere que la comunicación serie con el módulo ESP8266 se realice a través de la UART hardware de Arduino "HardwareSerial" (TX0 y RX0).

Para la recepción y envío de mensajes de depuración a través de un terminal virtual, es necesario utilizar un conversor USB-Serie adicional como puerto SoftwareSerial.

Ahora que ya sabemos cómo conectarlo, veremos en la siguiente entrega cómo cargar el firmware al ESP8266 para poder utilizar la librería espduino desde Arduino y establecer la comunicación SLIP con el módulo ESP8266.

Latch y el Internet de las Cosas: Integración con Arduino (I)
Latch y el Internet de las Cosas: Integración con Arduino (II)
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

4 comentarios:

  1. Gracias por facilitar esta información para poder crear IoT y securizarlo con Latch, me gustaría si esta en la medida de lo posible que explicaseis como enlazar arduino con Latch desde la zona de desarrolladores, algo paso a paso para los que no tenemos mucha idea de como enlazar el servicio pero tenemos muchas ganas de desarrollar prototipos con segundo factor de autenticación usando Latch.
    He visto la demo de la activacion o desactivacion del timbre de casa usando Latch y he tenido varias ideas que me gustaria poner en practica usando Latch como segundo factor de autenticacion, o simplemente para permitir o no el acceso a un servicio hardware. GRACIAS

    ResponderEliminar
  2. Gracias por compartir sus conocimientos, estas información es muy valiosa. Agradezco al administrador por compartir, siempre visitaba el sitio. Tengo instalado Latch inicio windows con ella y es muy buena.
    Ya tengo listo todo los componente, solo faltaría le cogido de programador soy estudiante de la carrera Electrónica yo se que puedo hace muchas aplicaciones con esta plataforma. desearía saber como es la programación para sincronizar con Latch.

    ResponderEliminar
  3. Para que se utilizara el Debug USB to serial?? es necesario?

    ResponderEliminar