Conecta tu Arduino con el mundo: ESP8266

7
7999

La creciente tendencia por conectar cualquier dispositivo a Internet ha hecho que surjan diversas plataformas para controlar los mismos y registrar sus acciones. Esto trae también problemas, como la seguridad e integridad de la información que se envía a través de Internet, pero ese es un tema que no se tocará en este artículo. Las placas Arduino no se quedan atrás. Existen múltiples shields que pueden ser utilizados para crear una conexión a Internet y se pueden clasificar en dos grupos:

  • Ethernet: Utilizan una conexión con un cable RJ-45. Son confiables, pero presentan la desventaja de que necesitas tener un cable que vaya desde algún punto de acceso a una red.
  • Wi-Fi: Hay varios shields en el mercado. Una variante se basa en un chip CC3000 de Texas Instruments, los cuales son más caros que un Arduino Uno. La otra variante se basa en los microcontroladores ESP8266EX de Espressif, los cuáles son mucho más baratos que la variante anterior; existen shields, pero se pueden conseguir estos módulos por 1/3 del precio del shield (con la ventaja de que son mucho más pequeños e integrables en proyectos).
La variante más común de los microcontroladores ESP8266 es el ESP01. De este modelo, existen dos versiones. Se diferencian en el color de la placa: azul y negro, respectivamente. La primera version ofrece 512kB de memoria flash, mientras que la segunda ofrece 1024kB. Ambas versiones poseen dos pines GPIO (General Purpose Input and Output).

1. Conexión

Las conexiones de este modulo son sencillas y solo hay que tener ciertas consideraciones:

  1. No es tolerante a 5V. Los pines de lógica no deben de ser expuestos a más de 3.3V (Aunque algunas versiones tienen protecciones hasta 6V en todos los pines menos en Vcc).
  2. Los pines de CH_PD y GPIO2 deberán estar en HIGH (3.3V) al iniciar el modulo. Estos controlan el modo en que el dispositivo arranca.
  3. El pin de RST (RESTART) no es necesario conectarlo. Si se necesita reiniciar el modulo, se puede desconectar y conectar el cable que conecta CH_PD a 3.3V (o bien conectar un botón que interrumpa momentáneamente esta conexión).
  4.  El módulo requiere más de 40mA para su funcionamiento óptimo bajo condiciones de muchas peticiones por segundo, por lo que es bueno conectarlo con una fuente externa regulada a 3.3V que pueda proveer más de 175mA. Para casos sencillos como el siguiente ejemplo, el Arduino puede suplir esta corriente.
Pinout ESP01
Pinout del ESP8266
Conexiones ESP01
Conexiones ESP01 con el Arduino UNO

 

2. Configuración

Para que el Arduino se comunique con el ESP8266, es necesario establecer comunicación serial entre los dos dispositivos. Arduino posee un puerto serie nativo, asociado a los pines 0 y 1 (RX y TX, respectivamente). Sin embargo, con el ESP8266 no podemos utilizar estos dos pines, ya que perderíamos la capacidad de conectarnos con la computadora a través del Monitor Serie. Es por esto que se hace necesario implementar una librería que nos permita “emular” un puerto serie.

Existen múltiples librerías para este propósito, tales como la SoftwareSerial y la AltSoftSerial. Con estos recursos podemos designar dos pines cualquiera del Arduino como puerto serie, con los mismos recursos disponibles a través de la clase Serial nativa del Arduino. Para este post utilizaremos la librería SoftwareSerial.

Al energizar por primera vez el circuito anterior, el modulo titilará su LED azul rápidamente, y su LED rojo permanecerá estable.
Abrimos el IDE de Arduino y escribiremos un simple código para probar el funcionamiento del módulo:

Luego, abrimos el monitor serial. Cambiamos la velocidad de transmisión a 115200 y las opciones de transmisión a “Ambas (Nueva línea y retorno de carro)”.
Imagen #3
Para comprobar que nuestro módulo está correctamente conectado y funcionando, enviaremos el primer comando: “AT” y enter
El módulo deberá responder: “OK”.

ESP8266
Comandos AT para la configuración del ESP8266

Nota: La velocidad de transmisión serial por defecto en estos módulos es de 115200 o 9600 baud. Si el módulo no responde a tus comandos o si te envía caracteres inválidos, entonces cambia la velocidad de transmisión.  Sí aún no te responde y el modulo titila su led azul al reiniciarlo, entonces ajusta la velocidad a 57600 (muestra el registro de inicio) y revisa los mensajes que envía.

Las placas basadas en Arduino Uno no funcionan del todo bien a altas velocidades de transmisión cuando se utiliza la librería SoftwareSerial; por lo tanto debemos bajarle la velocidad preconfigurada al módulo y luego cambiarla en nuestro código. Para eso enviaremos el siguiente comando:

Este comando hará que el módulo cambie su configuración por defecto. Ahora, cambiamos la línea 5 y 6 de nuestro programa por:

Subimos el código. A continuación hay una pequeña lista de más comandos:

  • AT+RST   // Reiniciar el módulo
  • AT+CWMODE?   // Ver el modo actual
  • AT+CWMODE=modo //Establecer modo
    modo:  
  1. => Cliente
  2. => Host
  3. => Ambos
  • AT+CWLAP // Ver SSIDs disponibles
  • AT+CWJAP?  //Información sobre el punto de acceso conectado actualmente
  • AT+CWJAP=ssid,pwd   //Conectarse a un SSID

Abrimos el monitor serial y enviaremos estos comandos:

Si todo va bien, deberás ver algo como:

ESP8266
Referencia de comandos

3. Implementación con una librería de Arduino

El firmware por defecto de Espressif utiliza estos comandos AT para realizar muchas tareas, pero es tedioso tener que mandar peticiones por medio del protocolo TCP con estos comandos. Para evitar eso, utilizaremos una librería de Arduino: WiFiESP.
Instalaremos esta librería y luego reiniciamos el IDE de Arduino. El código siguiente es de referencia (Se necesita registrarse en la página de openweathermap.org y crear un API KEY, lo cual toma menos de 2 minutos). Se debe cambiar el SSID, la contraseña de la red, y el API Key obtenido.

Este código utiliza el protocolo TCP para enviar peticiones a través de la red, y envía el resultado de la página a nuestra consola serial. Con esto es posible pedir información de diversas APIs y utilizar estos datos para realizar operaciones en el microcontrolador.

Existen otras librerías para manipular el ESP8266 como un módulo de WiFi para Arduino, como :

  1. ESP8266wifi:  Tiene funciones para reiniciar el módulo por si acaso se queda congelado. Su funcionamiento es diferente al de la librería utilizada en este artículo.
  2. Arduino-ESP8266: Librería muy completa, pero no tiene mucha documentación.
  3. ITEADLIB_Arduino_WeeESP8266: Es probablemente la librería más completa y estable que hay para este módulo. Todas sus funciones principales estan listadas en su página de github.

El ESP8266 es, ciertamente, una opción muy interesante con la que contamos hoy día, a un precio relativamente económico y con prestaciones propias de dispositivos mucho más caros.

Esperamos que la información mostrada sea de utilidad para ustedes.

Saludos.

  • Daniel Tarazona

    Que tal, este código se sube al arduino verdad??
    Y con la librería y asignando pines puedo leer un sensor ya sea analógico o digital??
    Me podrías orientar, gracias..

  • Jaime Rodrigo

    El ESP no responde a los mensajes de configuracion que le manda la libreria. Lo mas probable es que no este bien conectado. Revisa el nivel de voltaje que le esta llegando al mismo, y revisa que las conexiones de RX y TX entre ambos dispositivos esten correctas.

  • Manuel Vidal Garcia

    Y si solo quiero mostrar los datos de temperatura y humedad? Como puedo recortarlos de los datos generales?

    • Antony García González

      Se un poco más específico

  • Agustín

    Hola, que tal, estoy leyendo y basándome en tu artículo sobre éste chip.
    No tengo muchos conocimientos de electrónica. Mi pregunta es, las resistencias que utilizas en el proto, es para reducir el voltaje de 5v a 3.3, es correcto?
    Y si son de 220? o como calculas la resistencia que debería llevar?
    De antemano gracias.

    • Jaime Rodrigo

      Hola,
      Correcto, las resistencias son para dividir el voltaje de entrada (5V) en un voltaje aceptado por el ESP (3.3V). Para el calculo del mismo, puedes referirte a “Divisor de voltaje”.

      Las tres resistencias utilizadas son de 220 ohms. Cada resistencia tiene una caida de potencial de aproxidamente 1.6V (5V/3). El ESP esta viendo el voltaje de dos resistencias de 220 ohms (osea aproximadamente 3.33V).

      • Agustín

        Gracias amigo, ha sido de mucha ayuda tu post !