Cómo usar los pines y leds ESP8266-01

Actualizado el 1 de julio de 2018: se agregó una nota sobre la reprogramación cuando GPIO0 se usa como salida.

Actualizado el 2 de abril de 2018 para mostrar ESP8266-01 Leds. Puede controlar estos leds desde los pines a los que están conectados.

Introducción

ESP8266-01 es un chip con WiFi de muy bajo costo. Pero tiene E / S muy limitadas. A primera vista, una vez que lo configura para la programación, se utilizan todos los pines.

Este instructivo se basa en el uso de los pines ESP8266 GPIO0 / GPIO2 / GPIO15 para mostrarle cómo puede obtener cuatro (4) entradas / salidas utilizables para su próximo proyecto ESP8266-01 y cómo usar IC2 para obtener aún más entradas.

El código aquí asume que está programando el módulo utilizando la configuración IDE de Arduino como se describe en //github.com/esp8266/arduino en Instalación con el Administrador de placas . Al abrir el Boards Manager desde el menú Herramientas → Board y seleccionar Type Contributed e instalar la plataforma esp8266.

Estas instrucciones también están disponibles en www.pfod.com.au en ESP8266-01 Pin Magic

Paso 1: Pines ESP8266-01

El ESP8266-01 es el módulo ESP8266 más pequeño y solo tiene 8 pines. De estos VCC, GND, RST (reinicio) y CH_PD (selección de chip) no son pines de E / S, pero se necesitan para el funcionamiento del módulo. Esto deja a GPIO0, GPIO2, TX y RX disponibles como posibles pines de E / S, pero incluso estos tienen funciones preasignadas. GPIO0 y GPIO2 determinan en qué modo se inicia el módulo y los pines TX / RX se utilizan para programar el módulo y para E / S serie, comúnmente utilizadas para la depuración. GPIO0 y GPIO2 necesitan tener resistencias pull-up conectadas para garantizar que el módulo se inicie correctamente.

Paso 2: Consejos de programación ESP8266 (error de espcomm)

Al programar el ESP8266 usando el Arduino IDE (ver ESP8266-01 Wifi Shield) a veces (a menudo) recibes mensajes de error en el Arduino IDE como: -
esp_com open falló
error: no se pudo abrir COM33
error: espcomm_open falló
error: espcomm_upload_mem falló

En ese caso, siga estos pasos para que funcione: -

  1. Verifique que haya seleccionado la placa ESP8266 en el menú Herramientas de Arduino
  2. Compruebe que ha seleccionado un puerto COM en el menú Herramientas de Arduino
  3. Apague y encienda el ESP8266 con GPIO0 conectado a tierra (aplicación de energía limpia, consulte a continuación)
  4. Si 3) no lo arregla, desconecte el cable USB de la computadora, espere unos segundos y vuelva a enchufarlo
  5. Si 4) no lo arregla, desconecte el cable USB de la PC, cierre Arduino IDE, abra Arduino IDE, vuelva a enchufar el cable USB.

Cuando aplique energía al ESP8266, después de conectar a tierra GPIO0, asegúrese de que se aplique limpiamente. No muevas la conexión. El led ESP8266 debería encenderse y permanecer encendido sin parpadeos.

Paso 3: Mejor truco: use I2C

El mejor truco para obtener entradas adicionales en el ESP8266-01 es usar una interfaz I2C.

Una opción es usar GPIO0 y GPIO2 como el bus I2C.

Las resistencias pullup necesarias para que el módulo se inicie correctamente pueden duplicarse, ya que las resistencias pull-up del bus I2C y los otros componentes esclavos del bus son de colector abierto y, por lo tanto, no deberían tirar del bus durante el encendido. Sin embargo, en algunos casos, los esclavos, particularmente aquellos con batería de respaldo, pueden atascarse y mantener el bus presionado. En esos casos, deberá aislar el bus hasta que el ESP8266 pase por su etapa de arranque.

Puede evitar este problema utilizando TX y RX para el bus I2C

Algunas cosas a tener en cuenta:

  1. GPIO1 (TX) se utiliza como la línea de datos, porque siempre obtendrá alguna salida de depuración en GPIO1 al encender. No hay forma de suprimir esta salida, pero la línea del reloj (RX) se mantendrá alta, por lo que ninguno de estos datos se sincronizará con los esclavos.
  2. Al programar el ESP8266, la línea RX se conecta a la salida del programador. Al final de la programación, el ESP8266 se reinicia y la resistencia de protección 330 evita que RX ponga en cortocircuito la unidad de salida del programador.
  3. Las resistencias de la serie I2C proporcionan una protección similar para TX, RX contra cortocircuitos en el bus I2C

El ESP8266 es un dispositivo de 3.3V, por lo que es preferible utilizar esclavos I2C de 3.3V. Muchos, pero no todos, los dispositivos I2C son 3.3V en estos días. "En general, en un sistema donde un dispositivo tiene un voltaje más alto que otro, es posible conectar los dos dispositivos a través de I2C sin ningún circuito de cambio de nivel entre ellos. El truco es conectar las resistencias pull-up al más bajo de los dos voltajes ". (Tutorial SparkFun I2C) Para una combinación de dispositivos de 5V y 3.3V, conecte las resistencias pullup a la línea de 3.3V, como se muestra arriba.

El uso de I2C es una excelente manera de agregar un convertidor A-D multicanal al ESP8266-01 que no expone la única entrada ADC del módulo subyacente. Por ejemplo, usando Adafruit 12bit I2C 4 canales ADC o para salida analógica I2C DAC Breakout de SparkFun - placa MCP4725. Muchos otros tipos de sensores también están disponibles con los buses I2C.

Consulte //www.i2c-bus.org/i2c-primer/common-problems ... para obtener más información sobre cómo superar los problemas de I2C. También vea Inicio confiable para RTC con respaldo de batería I2C para un método corto para ayudar a limpiar el bus

Paso 4: Uso de GPIO0 / GPIO2 para OUTPUT y RX para INPUT

Si bien puede enviar mensajes de depuración a través de la conexión WiFi, a menudo es conveniente usar la conexión TX. El siguiente ejemplo muestra cómo usar GPIO0 y GPIO2 como salidas y RX como entrada.

Utilizando
Serial.begin (115200, SERIAL_8N1, SERIAL_TX_ONLY);
le permite usar RX como una entrada de propósito general (u otra salida), mientras sigue escribiendo mensajes de depuración en Serial. Nuevamente, la resistencia de 330 ohmios en el cable RX del programador Flash protege contra el cortocircuito del controlador del programador. NOTA: S1 tendrá que estar abierto para programar el ESP8266.

Se puede acceder al pin TX desde el boceto como GPIO1 y RX es GPIO3

Cómo reprogramar cuando se usa GPIO0 como salida

Nota: GPIO0 debe estar conectado a tierra para ingresar al modo de programación. Si el boceto lo conduce alto, conectarlo a tierra puede dañar su chip ESP8266. La forma segura de reprogramar el ESP8266 cuando su código impulsa la salida GPIO0 es: -
a) Apague el tablero
b) GPIO0 corto a gnd
c) encienda la placa que entra en modo de programa debido al corto en GPIO0
d) elimine el corto de GPIO0 para no acortar la salida cuando se ejecuta el programa
e) reprogramar el tablero
f) apague y encienda el tablero si es necesario.

Paso 5: Otro truco: conducir un relé y leer un botón con GPIO0 / GPIO2

Aquí hay otra forma de configurar los pines. Nota: este truco solo funciona si tienes un módulo de relé con una entrada aislada (N1 y N1-com). Debido a esta limitación y la complejidad del código de soporte, es preferible el ejemplo anterior, usando RX como entrada.

El uso de los pines ESP8266 GPIO0 / GPIO2 / GPIO15 ya ha cubierto cómo usar GPIO0 / GPIO2 juntos para obtener una entrada adicional. Aquí ese ejemplo se extenderá para usar GPIO0 como salida de controlador de relé y GPIO0 / GPIO2 como entrada.

Aquí está el esquema como un pdf.

Aquí GPIO0 se usa como salida para controlar el relé y GPIO0 / GPIO2 se usa como entrada para leer el botón momentáneo que se usa como anulación manual para encender y apagar el relé, además del control remoto a través de WiFi conexión. El botón pulsador momentáneo también se usa para habilitar el modo de configuración si se presiona cuando se aplica energía.

El truco aquí es hacer todo esto sin dejar de mantener GPIO0 y GPIO2 en alto cuando el módulo ESP8266 se está inicializando.

Las resistencias pull-up, R1 y R3, proporcionan el High necesario para estos dos pines, pero debe asegurarse de que ningún circuito adicional conectado a GPIO0 y GPIO2 no pueda tirar de los pines a un nivel bajo. El relé ópticamente aislado está conectado entre + 3.3V y GPIO0. Esto mantiene GPIO0 alto en el inicio pero permite que GPIO0 se convierta en una salida, después del inicio, y conecte a tierra la entrada del relé para operar el relé. No importa si el botón pulsador momentáneo se opera mientras el módulo se está inicializando, ya que eso solo conecta GPIO0 a GPIO2 y conecta ambos a sus resistencias pullup.

Detección del modo de configuración

Usando el ESP8266 como un punto de acceso temporal, puede configurarlo a través de una página web como se describe aquí. Parte de ese proceso es usar un botón pulsador, o un enlace de cortocircuito, en el encendido para indicarle al software que desea ingresar al modo de configuración.

Una vez que el módulo ESP8266 se ha inicializado, ejecuta el código de configuración () . En ese código, para detectar si se presiona el botón momentáneo, no es necesario que GPIO0 esté bajo para suministrar un GND al botón y luego verifique la entrada GPIO2 para ver si está bajo. Un efecto secundario de esta verificación es que el relé siempre funcionará cuando la unidad se ponga en modo de configuración. Una vez que vea que el relé funciona, puede soltar el botón, porque su entrada habrá sido detectada para entonces. Aquí hay un código de muestra para hacer esto en la configuración ()

 configMode booleano = falso; // no está en modo de configuración normalmente anula la configuración () {pinMode (0, OUTPUT); digitalWrite (0, BAJO); // hace que la salida GPIO0 sea baja // verifique la entrada GPIO2 para ver si se presionó el botón que lo conecta a GPIO0 configMode = (digitalRead (2) == LOW); if (configMode) {// inicia AP y prepárate para servir la página web de configuración // deja el relé activado para indicar en modo de configuración // ......} más {// uso normal // haz que GPIO0 HIGH se apague el relé digitalWrite (0, ALTO); // .....} // resto de la configuración ()} 

Detección del botón de anulación manual

La sección anterior cubrió la detección cuando se presionó el botón al encender para habilitar el modo de configuración. También queremos usar ese botón pulsador como una anulación manual para encender y apagar el relé además de poder controlar el relé a través del enlace WiFi.

El control WiFi del relé no está cubierto aquí, pero se puede hacer fácilmente usando pfodApp. Vea OLIMEX Menu Generator para saber cómo generar código Arduino con pfodDesigner para los módulos ESP8266.

Esta sección tratará cómo detectar cuándo se presiona el botón, indicando que el usuario quiere alternar el relé, es decir, apagarlo si está encendido o encenderlo si está apagado. El esquema es el mismo que el anterior, todos los trucos están en el código. Hay dos casos a considerar: -

  1. El relé está apagado y el usuario quiere encenderlo con el botón,
  2. El relé está ENCENDIDO y el usuario quiere apagarlo con el botón.

El relé está apagado y el usuario quiere encenderlo con el botón.

En este caso, la salida de GPIO0 es ALTA. En realidad, GPIO0 puede ser una entrada en este caso ya que la resistencia pull-up R1 asegurará que el relé no se encienda. Ese es el truco. En este caso, haga que GPIO0 sea una entrada y haga que la salida GPIO2 sea BAJA y luego, cuando el usuario presione el botón, sucederán dos cosas: - a) el relé se encenderá debido a la conexión a tierra proporcionada por GPIO2 a través del botón yb) La entrada GPIO0 irá baja. El código verifica el estado de la entrada GPIO0 y cuando baja, el código sabe que el uso ha presionado el botón y quiere que el relé esté encendido. El código convierte a GPIO0 en una salida BAJA para mantener el relé encendido cuando se suelta el botón.

El relé está ENCENDIDO y el usuario quiere apagarlo con el botón.

En este caso, siguiendo el caso anterior, GPIO0 es una salida BAJA que mantiene el relé en ON. Ahora, para este caso, haga de GPIO2 una entrada (extraída por R3) y luego, cuando el usuario presiona el botón, la entrada LIO GPIO2 tira de BAJA por la salida BAJA de GPIO0. Cuando el uso suelta el botón, el código detecta la transición BAJA a ALTA y luego convierte a GPIO0 en una Entrada, que libera el relé debido a la resistencia pull-up, R1, y convierte a GPIO2 en una Salida BAJA para configurar para el caso i) anterior.

Un truco más. Para el caso ii) necesitamos GPIO2 como una entrada que detecta una transición BAJA a ALTA para apagar el relé. Pero si hacemos GPIO2 e ingresamos al final del caso i), entonces obtendremos una transición BAJA a ALTA cuando el usuario suelte el botón que acaba de presionar para encender el relé. Para evitar volver a apagar el relé de inmediato, la primera transición BAJA a ALTA después de encender el relé se ignorará, ya que es solo el usuario que suelta el botón que presionaron para encender el relé.

Código de bucle de muestra () para la anulación manual del relé

En este código, estoy ignorando el cambio de rebote del interruptor por simplicidad. Las entradas deben eliminarse en cualquier aplicación real.

El código de muestra está aquí, ESP8266_01pinMagic_1.ino

Nuevamente, esto deja los pines TX / RX disponibles para la depuración en serie o el uso como otras E / S

Conclusión

Esta página muestra cómo aprovechar al máximo los pines limitados disponibles en ESP8266-01. El uso de GPIO0 / GPIO2 como bus I2C proporciona la mayor expansión, pero si el proyecto no usa I2C, aún puede conducir un relé y detectar una entrada de botón usando GPIO0 / GPIO2. En cualquier caso, TX / RX también están disponibles para la depuración en serie o si envía declaraciones de impresión de depuración a través del enlace WiFi, estos pines también están disponibles para E / S generales.

Artículos Relacionados