Arduino Conectado a Internet

TCP/IP

El modelo TCP/IP describe un conjunto de guías generales de diseño e implementación de protocolos de red específicos para permitir que un equipo pueda comunicarse en una red. TCP/IP provee conectividad de extremo a extremo especificando como los datos deberían ser formateados, direccionados, transmitidos, enrutados y recibidos por el destinatario.

Más información: https://es.wikipedia.org/wiki/Modelo_TCP/IP

La importancia del modelo TCP/IP es que es el modelo usado para acceder a Internet o a redes internas (Intranet) de ordenadores. Arduino va a permitir conectarse a Internet o a una red interna mediante TCP/IP y poder realizar múltiples operaciones o usarse como pasarela para conectar a Internet dispositivos que no tienen esa capacidad. La implementación de la pila de protocolos de TCP/IP en Arduino se hace mediante un shield o HW adicional que nos da la capa de acceso a red (ethernet o WiFi), internet (IP) y transporte. La capa de aplicación deberemos implementarla dentro de Arduino ya sea directamente o mediante una librería.

En el caso del protocolo TCP/IP la pila OSI se simplifica:

Protocolo HTTP

Hypertext Transfer Protocol o HTTP (en español protocolo de transferencia de hipertexto) es el protocolo de comunicación que permite las transferencias de información en la WWW. Se trata de un protocolo de capa 7 de aplicación.

En arduino con la librería ethernet solo trabajamos con la capa de aplicación, todas las otras capas de TCP/IP ya están implementadas por Hardware, ya sea con la ethernet shield o el módulo WiFi. Aunque si queremos realizar algunas funciones de capas inferiores, podemos hacerlo con los comandos adecuados comunicándonos con el chip ethernet o wifi via SPI.

Librerías que manejan la pila de pila de protocolos TCP/IP:

HTTP request

Un cliente HTTP debe formar una petición HTTP al servidor de una forma determinada para que sea entendida por el servidor. Cuando Arduino trabaja como cliente hay que programar esta petición correctamente.

Ejemplo de uso, Telegram Arduino

HTTP response

Después de recibir e interpretar el servidor un HTTP request, el servidor debe responder con un mensaje de respuesta:

Comunicación Ethernet

Para manejar el ethernet shield se usa la librería Ethernet que maneja la pila de protocolo TCP/IP, teniendo solo que implementar por programación el protocolo HTTP: https://www.arduino.cc/en/Reference/Ethernet

Arduino puede actuar como cliente para conectarse a Internet y recoger datos del exterior. Para ello se debe implementar un web client en Arduino como puede verse en: https://aprendiendoarduino.wordpress.com/2016/07/05/arduino-web-client/

Arduino también puede actuar como servidor web mostrando una web o aceptando ordenes remotas que llegan mediante protocolo HTTP, puede verse ejemplos en: https://aprendiendoarduino.wordpress.com/2016/07/06/arduino-web-server/

ESP8266

El ESP8266 es un chip Wi-Fi de bajo coste con pila TCP/IP completa y capacidad de MCU (Micro Controller Unit) producida por el fabricante chino Espressif Systems, con sede en Shanghai.

El chip primero llegó a la atención de los fabricantes occidentales en agosto de 2014 con el módulo ESP-01. Este pequeño módulo permite a los microcontroladores conectarse a una red Wi-Fi y realizar conexiones TCP/IP sencillas utilizando comandos de tipo Hayes. Sin embargo, en ese momento casi no había documentación en inglés sobre el chip y los comandos que aceptaba. El precio muy bajo y el hecho de que había muy pocos componentes externos en el módulo que sugiere que podría ser muy barato en el volumen, atrajo a muchos hackers para explorar el módulo, el chip y el software en él, así como para traducir La documentación china.

El ESP8285 es un ESP8266 con 1 MB de flash incorporado, lo que permite dispositivos de un solo chip capaces de conectarse a Wi-Fi. Muchos encapsulados del ESP8266 viene con 1 MB de flash.

Características:

  • 32-bit RISC CPU: Tensilica Xtensa LX106 running at 80 MHz*
  • 64 KiB of instruction RAM, 96 KiB of data RAM
  • External QSPI flash – 512 KiB to 4 MiB* (up to 16 MiB is supported)
  • IEEE 802.11 b/g/n Wi-Fi
  • 16 GPIO pins
  • SPI, I²C,
  • I²S interfaces with DMA (sharing pins with GPIO)
  • UART on dedicated pins, plus a transmit-only UART can be enabled on GPIO2
  • 1 port 10-bit ADC

Los módulos ESP8266 los podemos encontrar en diferentes encapsulados y placas:

En nuestro caso vamos a usar el ESP-01:

Uso ESP8266 con IDE Arduino

Firmware propio

El ESP8266 con su firmware de fábrica nos permite conectarnos a Internet desde Arduino conectando ambos módulos mediante el puerto serie y ejecutar comandos AT sobre el ESP8266 y recibiendo la respuesta en Arduino.

Tutorial uso ESP con comandos AT: https://create.arduino.cc/projecthub/user16726/configuring-the-esp8266-using-an-arduino-0ab2e6?ref=similar&ref_id=27809&offset=5

Programación IDE Arduino

El ESP8266 dispone internamente de un pequeño procesador, prácticamente es capaz de replicar casi cualquier cosa los Arduinos puedan hacer. Así que los proyectos con sensores más Arduinos que envían los datos a la WIFI mediante un ESP8266, es muy probable que podamos ahorrarnos el Arduino en el proceso, gracias a un firmware basado en C ++. Este permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino.

  • Puedes desarrollar con el mismo IDE que ya conoces
  • Han hecho un Cross compiler, de forma que prácticamente utilizas los mismos comandos que utilizas con Arduino, con lo que te ahorras aprender nada nuevo
  • Dependiendo del modelo de ESP8266 que tengas, dispones de más o menos pines disponibles con PWM y otras cosas más como I2C y SPI, pero para el modelo ESP8266-01 solo tienes dos pines disponibles GPIO0 y GPIO2
  • Puedes programar el procesador de tu ESP8266 exactamente como si fuera un Arduino con los mismos comandos, y en lo que se refiere a la WIFI, puedes olvidarte de los comandos AT, porque incluye una serie de librerías, que imitan la librería WIFI de Arduino con lo que se pueden reutilizar muchos programas.  

El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino

Reference de Arduino core a ESP8266: https://github.com/esp8266/Arduino/blob/master/doc/reference.md

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Podemos instalar el soporte a terceros en nuestro IDE simplemente añadiendo el texto “http://arduino.esp8266.com/stable/package_esp8266com_index.json” en propiedades:

Y luego desde el gestor de tarjetas dar a instalar al soporte para ESP8266.

Para programar el microcontrolador del ESP8266 necesitamos un adaptador de USB a puerto serie, pero podemos usar el propio ATmega16U2 que viene en Arduino UNO para programarlo.

IMPORTANTE:

  • El ESP8266 va alimentado a 3,3V, ¡no alimentarlo con 5 voltios!
  • El ESP8266 necesita comunicarse vía serie a 3.3V y no tiene entradas tolerantes 5V, por lo que necesita la conversión de nivel para comunicarse con un microcontrolador 5V como la mayoría de los Arduinos

En este caso para poder programar el ESP8266, en el Arduino no puede haber ningún sketch con el puerto serie funcionando ya que interferiría con el puerto serie del ESP8266. Por ejemplo podemos cargar el blink.

IMPORTANTE: Cuando cargas un sketch en el ESP8266 con el IDE Arduino estamos cargando en la flash de ESP8266 un nuevo firmware borrando el que viene por defecto visto anteriormente para manejar el módulo con comando hayes.

Módulo:

Pines:

  • TX (goes to the 3.3V Rx of the UART USB adapter to the PC)
  • CH_PD (enable/power down, must be pulled to 3.3v directly or via resistor)
  • RESET
  • VCC (3.3v power supply)
  • GND (connect to power ground)
  • GPIO 2
  • GPIO 0 (leave open or pull up for normal, pull down to upload new firmware)
  • RX (goes to the 3.3V Tx of the UART USB adapter to the PC)

Vamos a programar el ESP8266 cargando los ejemplos de ESP8266 que vienen en el soporte para el IDE de Arduino, usando la librería ESP8266WiFi.h:

  • ESP8266Wifi/Wifiscan: Scan networks
  • ESP8266Wifi/WifiClient Conectar a wifi
  • ESP8266WebSerber/HelloServer: Servidor web wifi

Paso 1 – Cargar el programa blink en Arduino par que no haya interferencias por el puerto serie.

Paso 2 – Conexión:

Paso 3 – Con el IDE de arduino cargar cualquiera de estos tres programas de ejemplos y comprobar que funcionan:

  • ESP8266Wifi/Wifiscan: Scan networks
  • ESP8266Wifi/WifiClient Conectar a wifi
  • ESP8266WebSerber/HelloServer: Servidor web wifi

También se podría programar el blink de Arduino en la patilla GPIO2, que es la que nos queda libre y hacer parpadear el led:

void setup()
   { pinMode(2, OUTPUT); }

void loop()
   { digitalWrite(2, HIGH);  
     delay(1000);  
     digitalWrite(2, LOW);
     delay(1000);   
   }

Para probarlo, conectar independiente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s