jueves, 4 de diciembre de 2014

Como empezar con ESP8266

ESP-01
Por su bajo precio el chip ESP8266 parece destinado a dar un gran empujón a lo que se ha llamado Internet de las cosas. Por menos de 3€, portes incluidos, y una espera de tres o cuatro semanas, se puede conseguir en Ebay o AliExpress una placa con el chip ESP8266. Esta entrada es para hacer un resumen de mi toma de contacto con ESP8266.

En el momento de escribir esto conozco la existencia de 11 placas con ESP8266, nombradas desde ESP-01 a ESP-11. Las más popular es la ESP-01, seguida de la ESP-03.

La ESP-01 es seguramente la mejor elección para tomar contacto, tiene integrada la antena en el circuito impreso y cuenta con 8 pines, con una disposición no muy apropiada para usar en una protoboard.
ESP-01

La ESP-03 cuenta con una antena cerámica, tiene el conexionado en formato SMD, lo que hace algo más complicado jugar con ella. A cambio es más pequeña y tiene más puertos disponibles que la ESP-01.
ESP-03
Aquí se puede encontrar una discusión sobre los diferentes módulos en que podemos encontrar el ESP8266.

El módulo que yo he comprado es el ESP-01, aunque ya esta en camino un ESP-003.

Conexión a través de adaptador USB a serie TTL


Es la opción que parece más fácil, pero hay que tener en cuenta que el ESP8266 funciona a 3,3V y los puertos no son tolerantes a 5V. Así que necesitaremos un adaptador que funcione a 3,3V. Por otro lado, tenemos que el ESP8266 consume bastante, pudiendo llegar a un máximo de 215mA. Un adaptador FTDI proporciona 50mA, por lo que se nos quedará corto.

Hay dos posibles soluciones para alimentar el módulo. Una es la que ha usado Martin Harizanov en su interesante proyecto, que consiste en incorporar un condensador de 1000uF, para responder en los momentos en que se requiere más consumo. La otra solución es la que podemos ver en un entrada del blog Sistemas O.R.P., que es una buena guía de introducción en español al ESP8266.

Yo he usado la solución de Sistemas O.R.P., que consiste en alimentar el módulo a través de un regulador, que se puede encontrar en EBay por solo 1 euro, portes incluidos.

Al alimentar el regulador desde un puerto USB del PC el modulo se reiniciaba constantemente. Alimentadolo desde un cargador de móvil de 700mA ha funcionado correctamente.

Las conexiones queda así:


En resumen, RX del ESP8266 a TX del adaptador USB, TX del ESP8266 a RX del adaptador USB, +3,3V del regulador a VCC y CH_PD del ESP8266, todas las masas juntas.



Hay algún sitio que habla de conectar los 4 pines centrales del módulo ESP8266 a +3,3V. No se si es que están despistados o que existe alguna versión del módulo que realmente lo necesita.

Usando el terminal


En primer lugar, decir que todo lo que voy a decir lo he probado en una distribución Linux Ubuntu 14.04. 

He perdido mucho tiempo haciendo pruebas con PuTTY. El funcionamiento era muy errático, de improviso el módulo ESP8266 dejaba de responder. Pensaba que era un tema de conexiones, pero en cuanto probé con el terminal de Arduino IDE se acabaron los problemas.

Primero conecto el conversor USB, selecciono en el Arduino IDE el puerto (en las ultimas distribuciones de Ubuntu es necesario acceder como root para acceder a los puertos serie) y abro el terminal, configuro la velocidad a 115200 bps (hay versiones del módulo a 9600, 38400 y 57600) luego conecto la alimentación en el ESP8266 y deberíamos ver un ready en el terminal.

Ahora podemos entrar comandos AT. Probemos con el primero: AT+GMR:


Nos devuelve la versión del firmware. En este caso 0016 es la versión del SDK y 0901 la versión de los comandos AT.

Seguimos con el siguiente comando: AT+RST.


El ESP8266 se ha reseteado. Nos indica la causa del reset, que puede ser 1 para el arranque normal, 2 para un reset por el pin de reset, 3 para un reset por software y 4 para watchdog reset que no se como traducirlo exactamente pero parece que es el indicado cuando se resetea por un comando AT. No indica un boot mode con dos números, el primero indica el boot device, 1 para ram y 3, que es el caso, para flash. El segundo número no se que indica.

Ahora vamos a ver como funciona el wifi. Vamos a listar los puntos de accesos visibles. Primero nos aseguramos de poner el ESP8266 en modo estación: AT+CWMODE=1 y luego ya podemos pedir el listado: AT+CWLAP.


Para conectarse a un punto de acceso el comando es AT+CWJAP="MI_IDENTIFICADOR","MI_CONTRASEÑA"  y luego para conocer  la dirección IP asignada: AT+CIFSR.



Ahora vamos a descargarnos una página web. Descargaremos la página raíz del dominio de ejemplo www.example.com. Para ello vamos a indicar que no necesitamos múltiples conexiones, que nos queremos conectar a www.example.com por el puerto 80, que vamos a enviar 43 caracteres y por ultimo y por ultimo enviaremos la petición HTTP seguida de dos saltos de lineas (4 caracteres). Todo ello queda así:

AT+CIPMUX=0
AT+CIPSTART="TCP","www.example.com",80
AT+CIPSEND=43
GET /index.html HTTP/1.0
Host: mi_host




Enlaces de interés

Documentación básica

Proyectos de referencia

Foros

Vídeos

- Actualización enero 2016: el soporte de Arduino IDE a ESP8266 ha sido un gran avance. No dejes de ver la entrada que he escrito al respecto.

14 comentarios:

  1. Hola,
    Buena información.
    Se podria usar el ESP8266 para enviar comandos por el puerto serie a un dattalogger y recibir la respuesta para subirla Internet?
    Por más que lo busco en Internet no lo encuentro, solo veo como comunicar un Arduino con el modulo pero si es posible hacerlo solo con el modulo.

    Gracias.

    ResponderEliminar
  2. Hola buenos días, disculpa en RX y TX de este módulo funcionan también a 3.3V según muchas fuentes, podrías aclararme esa pequeña duda por favor? gracias

    ResponderEliminar
    Respuestas
    1. Hola Rafael,

      ESP8266 funciona solo a 3.3V. Hay gente que dice que le funciona bien a 5V, pero pienso que es cuestión de tiempo que se les rompa.

      Eliminar
  3. Gacias por la info. Supongo que ya sabrás que estos modulos ahora se pueden programar para que sean autonomos. Tan fácil como un Arduino y ya no hacen falta los comandos AT ni un Arduino que lo controle.

    ResponderEliminar
    Respuestas
    1. Hola Antonio,

      Efectivamente, ahora los comandos AT son solo una opción más. Publique un artículo para instalar el firmware de NodeMCU, para programar en LUA, y otro en el que introducía las programación con Arduino IDE.

      Eliminar
  4. Javier he seguidos los pasos como lo describes arriba,cuando lo programo a 9600 baudios obtengo esto:
    þd*ýí †ñi 4:üì†&4`ÈR
    þ,?4j
    Â4<$áÿ
    [Vendor:www.ai-thinker.com Version:0.9.2.4]

    ready

    He probado cambiando las velocidades y recibo solo simbolos, nada lejible, que ocurre?

    ResponderEliminar
    Respuestas
    1. Yo creo que te funciona, solo tienes que introducir comandos AT...

      Eliminar
    2. cambia los baudios .. hasta que alguna velocidad te de una respuesta de datos legible

      Eliminar
  5. verifica el pin rst, debe estar conectado a +3.3v y ch_pd a+3.3v

    ResponderEliminar
    Respuestas
    1. Hola Giova,

      Eso lo comento en el articulo, cuando me refiero a los pines centrales. Te aseguro que con lo módulos que yo tengo no es necesario conectarlos, pero parece que en algunas variantes si que lo es.

      Eliminar
  6. Estimados, El modulo esta funcionando; ya que te trae caracteres raros, lo que tenes que hacer es colocar una fuente que entregue mas de 300mA. A mi me paso esto y perdí mucho tiempo.

    ResponderEliminar
  7. buenas tardes compañeros, tengo un problema con mi ESP8266, al llevar en linea aproximadamente 5 horas la ip queda inaccesible .. alguna idea de que pueda pasar o como solucionarlo?

    ResponderEliminar
  8. Muy buenas a todos, muy contento de estar por aquí.

    Tengo en la cabeza un proyecto que me ronda desde hace bastante tiempo, pero que no soy capaz de desarrollar por mi falta de conocimientos.
    Expongo lo que quiero hacer y vosotros me decís si es posible, y como.
    Quiero que cuando llueva se bajen las persianas de mi casa. (mi mujer no hace mas que quejarse de que los cristales se ensucian de las gotas)
    Para ello he pensado en utilizar los esp8266-01
    El primero como servidor, conectado a un modulo sensor de lluvia. Para que cuando llueva se conecte con cada uno de esp8266 (AP)
    que habrá instalados en cada persiana y están bajen.
    Es posible que se comuniquen entre los esp8266 y se realice lo que quiero utilizando las entradas, salidas, gpo0 y gpo2.

    Quedo a la espera de vuestras respuestas. Un abrazo y GRACIAS..

    Ultima hora: Me han dicho, que desde aquí. https://github.com/tzapu/WiFiManager (editar si no se pueden poner enlaces) se puede realizar lo que ando buscando, el problema es que no se desarrollarlo.
    mi correo es: dazallu@hotmail.com GRACIAS.

    ResponderEliminar
  9. Buenos dias, disculpe podria programar un arduino MEGA junto con el modulo ESP8266 de forma que yo pueda controlar sus pines a travez de wifi?

    ResponderEliminar