{"id":936,"date":"2020-01-07T18:03:34","date_gmt":"2020-01-07T18:03:34","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=936"},"modified":"2020-11-02T00:59:59","modified_gmt":"2020-11-02T00:59:59","slug":"esp8266-hacer-que-parpadee-un-led-desde-el-ide-de-arduino","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/esp8266-hacer-que-parpadee-un-led-desde-el-ide-de-arduino\/","title":{"rendered":"ESP8266 (WiFi): Hacer que parpadee un LED desde el IDE de Arduino"},"content":{"rendered":"

\u00bfQu\u00e9 es un ESP8266?<\/strong><\/p>\n

El ESP8266<\/a> es un chip con capacidad Wi-Fi<\/a> con un stack<\/a> TCP\/IP<\/a> completo y un microcontrolador, fabricado por Espressif<\/a>, una empresa China. El primer chip se hizo conocido el mercado con el m\u00f3dulo ESP-01<\/a>, desarrollado por la empresa AI-Thinker. Este peque\u00f1o m\u00f3dulo permite a otros microcontroladores conectarse a una red inal\u00e1mbrica Wi-Fi y realizar conexiones simples con TCP\/IP usando comandos al estilo Hayes (comandos AT).<\/p>\n

Diversos modelos de m\u00f3dulos que utilizan el ESP8266<\/strong>
\n
\"\"<\/a><\/p>\n

Caracter\u00edsticas<\/strong><\/p>\n

\u2022\u00a0\u00a0\u00a0CPU RISC de 32-bit: Tensilica Xtensa LX106 con un reloj de 80 MHz. El reloj de la CPU y la memoria flash puede duplicarse por overclocking en algunos dispositivos. La CPU puede funcionar a 160 MHz y la memoria flash puede trabajar entre 40 MHz y 80 MHz. Var\u00eda seg\u00fan la versi\u00f3n del chip.
\n\u2022\u00a0\u00a0\u00a0RAM de programa de 64 KB, RAM de datos de 96 KB
\n\u2022\u00a0\u00a0\u00a0Capacidad de memoria externa flash QSPI de 512 KB a 4 MB (puede manejar hasta 16 MB)
\n\u2022\u00a0\u00a0\u00a0IEEE 802.11 b\/g\/n Wi-Fi
\n\u00a0\u00a0\u00a0\u00a0\u00a0o\tTiene integrados: TR switch, balun, LNA, amplificador de potencia de RF y una red de adaptaci\u00f3n de impedancias
\n\u00a0\u00a0\u00a0\u00a0\u00a0o\tSoporte de autenticaci\u00f3n WEP y WPA\/WPA2
\n\u2022\u00a0\u00a0\u00a016 pines GPIO (Entradas\/Salidas de prop\u00f3sito general)
\n\u2022\u00a0\u00a0\u00a0Interfaces SPI, I\u00b2C,
\n\u2022\u00a0\u00a0\u00a0Interfaz I\u00b2S con DMA (comparte pines con GPIO)
\n\u2022\u00a0\u00a0\u00a0Pines dedicados a UART, m\u00e1s una UART \u00fanicamente para transmisi\u00f3n que puede habilitarse a trav\u00e9s del pin GPIO2
\n\u2022\u00a0\u00a0\u00a01 conversor ADC de 10-bit<\/p>\n

El ESP8266 se puede programar desde el IDE de Arduino. Para eso hay que instalar lo que se llama un plugin<\/em>, en el que est\u00e1 incluido todo lo necesario para compilar y subir programas que fueron escritos tal como si fuesen .INO<\/strong> de Arduino.<\/p>\n

Debemos incorporar librer\u00edas y los programas de manejo de las placas con el chip ESP8266 a nuestro IDE. Para hacerlo, debemos indicarle la URL<\/strong> desde donde se obtienen. <\/p>\n

Para hacerlo, debemos abrir el men\u00fa Archivo<\/strong>, y luego Preferencias<\/strong>.<\/p>\n

Veremos este panel, en la parte inferior el recuadro de texto rotulado Gestor de URLs Adicionales de Tarjetas<\/strong>. Dentro de \u00e9l, usando copiar y pegar, se debe introducir el texto indicado aqu\u00ed:<\/p>\n

http:\/\/arduino.esp8266.com\/stable\/package_esp8266com_index.json<\/strong><\/p>\n

(copie y pegue en el recuadro):<\/p>\n

\"\"<\/a><\/p>\n

Luego pulse en el bot\u00f3n Ok<\/strong>.<\/p>\n

Ahora debemos ir al men\u00fa Herramientas<\/strong>, luego Placa<\/strong>.<\/p>\n

\"\"<\/a><\/p>\n

Y finalmente Gestor de Tarjetas<\/strong>, se abrir\u00e1 una ventana como la que sigue, en la cual escribimos, en el recuadro superior de filtro\/busqueda, \u201cESP8266\u201d<\/strong> (antes de terminar de escribir ya aparecer\u00e1 el Gestor de Tarjetas que buscamos, que indica que fue creado por \u201cESP8266 Community\u201d<\/strong>. All\u00ed pulsamos sobre Instalar<\/strong>:<\/p>\n

\"\"<\/a><\/p>\n

Al abrir nuevamente Herramientas, y luego Placa, deslizamos la lista para ver lo que aparece al final de ella (abajo), y vemos que ya existen las opciones referidas a los ESP8266:<\/p>\n

\"\"<\/a><\/p>\n

Ejemplo de programa:<\/strong><\/p>\n

Trabajaremos en este ejemplo dos modelos de placa que utilizan el chip ESP8266: ESP-01<\/strong> y NodeMCU<\/strong> (ESP-12E).<\/p>\n

El NodeMCU<\/strong> es una placa de desarrollo que contiene el m\u00f3dulo ESP-12E<\/strong> incorporado, m\u00e1s todos los elementos necesarios de apoyo para comunicarse con ella, entre \u00e9stos un conector USB, regulador de voltaje, bot\u00f3n de reinicio, un bot\u00f3n \u201cflash\u201d que se utiliza para programar el m\u00f3dulo, hileras de pines enchufables, etc.<\/p>\n

\"\"<\/a><\/p>\n

Dise\u00f1aremos un circuito simple para hacer parpadear un LED en los ESP utilizando el IDE de Arduino para programarlos. La pregunta que uno se puede hacer es \u00bfpor qu\u00e9 siempre lo primero que se ense\u00f1a es a hacer que parpadee un LED? Y no es mala pregunta. La respuesta es que si podemos hacer parpadear un LED usando un pin de salida de un dispositivo, quiere decir que podemos encender o apagar cualquier dispositivo electr\u00f3nico. S\u00f3lo es necesario, si conectamos algo a ese pin, que el consumo que necesita ese aparato para funcionar no supere lo que puede entregar el pin de salida de nuestro sistema. Pero esto no es condicionante: se soluciona \u2014como en cualquier circuito electr\u00f3nico\u2014 adaptando el voltaje y la corriente con componentes simples, como transistores, MOSFET o rel\u00e9s. Y entonces ya estamos encendiendo y apagando ya sea un LED, una l\u00e1mpara o un horno el\u00e9ctrico.<\/p>\n

En los ESP, a las entradas y salidas se les llama GPIO<\/a><\/strong>, sigla que viene de las palabras en ingl\u00e9s General Purpuse Input\/Output<\/strong>, en castellano Entrada\/Salida de Prop\u00f3sito General<\/strong>.<\/p>\n

Acerca de la asignaci\u00f3n de GPIOs, la siguiente tabla es una referencia r\u00e1pida sobre c\u00f3mo asignar los GPIOs de ESP8266 en el c\u00f3digo Arduino.<\/p>\n

\"\"<\/a><\/p>\n

Aqu\u00ed est\u00e1 la ubicaci\u00f3n de cada pin la placa f\u00edsica:<\/p>\n

ESP-01<\/strong><\/p>\n

\"\"<\/a><\/p>\n

NodeMCU \/ ESP-12E<\/strong><\/p>\n

\"\"<\/a><\/p>\n

Importante:<\/strong> en la siguiente secci\u00f3n, llamada \u00abC\u00f3mo escribir el programa en el IDE de Arduino\u00bb, cuando definimos: salida = 0<\/strong> nos referimos al GPIO 0<\/strong>, y si definimos: salida = 2<\/strong> nos referimos a GPIO 2<\/strong>. En el firmare interno del ESP se define as\u00ed. No hay que preocuparse por esto, simplemente recordar que 0<\/strong> se refiere a GPIO 0<\/strong> y 2<\/strong> se refiere a GPIO 2<\/strong>.<\/p>\n

C\u00f3mo escribir el programa en el IDE de Arduino<\/strong><\/p>\n

El programa para hacer parpadear un LED es muy simple:<\/p>\n

int salida = 2; \r\n\r\nvoid setup() { \r\n\/\/ inicializar GPIO 2 como salida \r\npinMode(salida, OUTPUT); \r\n} \r\n\r\n\/\/ la funci\u00f3n loop corre continuamente \r\nvoid loop() { \r\n\/\/ enciende el LED (HIGH es ALTO y es el nivel de voltaje)\r\ndigitalWrite(salida, HIGH);\r\ndelay(1000); \/\/ espera 1000 milisegundos = un segundo \r\ndigitalWrite(salida, LOW); \r\n\/\/ apaga el LED (LOW es BAJO y es el nivel de voltaje)\r\ndelay(1000); \/\/ espera 1000 milisegundos = un segundo\r\n}\r\n<\/pre>\n

C\u00f3mo funciona el programa:<\/strong><\/p>\n

    \n
  • 1. Creamos una variable entera (int) llamada salida = 2<\/strong> que hace referencia a GPIO 2<\/strong><\/li>\n
  • 2. En setup()<\/strong>, usamos la funci\u00f3n pinMode(salida, OUTPUT)<\/strong> para configurar el GPIO 2<\/strong> como una SALIDA (OUTPUT<\/strong>). Este c\u00f3digo de inicializaci\u00f3n se ejecuta una sola vez.<\/li>\n
  • 3. A continuaci\u00f3n, en loop()<\/strong> (funci\u00f3n bucle<\/strong>), utilizamos dos funciones digitalWrite()<\/strong> y delay()<\/strong>.
    \nEs una secci\u00f3n de c\u00f3digo que se repite una y otra vez hasta que se quite la alimentaci\u00f3n del ESP o se le cambie el programa.<\/li>\n
  • 4. Enciende el LED durante 1 segundo (1000 milisegundos) usando digitalWrite(salida, HIGH)<\/strong> y espera de 1 segundo con delay(1000)<\/strong>.<\/li>\n
  • 5. Luego apaga el LED usando digitalWrite(salida, LOW)<\/strong> y espera de 1 segundo con delay(1000)<\/strong>.<\/li>\n
  • 6. El programa contin\u00faa indefinidamente, repitiendo los pasos 4.<\/strong> y 5.<\/strong><\/li>\n<\/ul>\n

    Veremos que el LED parpadea, un segundo encendido, un segundo apagado.<\/p>\n


    \n