Qué son las GPIO
En la página dedicada al integrado ESP8266 ya le conté que por medio de 11 patillas tenemos conexión directa con cada una de las 11 GPIOS del microcontrolador. Vamos a dedicar unos minutos a intentar comprender que son y como funcionan estos elementos, porque son la parte primordial de todo el sistema.
De forma muy resumida, son simplemente dos transistores CMOS. Esta clase de transistores tienen tres electrodos: Drenaje o DRAIN, Fuente o SOURCE y Puerta o GATE. Y los hay de dos tipos, pMOS y nMOS.
En nuestro caso, ambos funcionan como interruptores: Simplificando mucho, si aplicamos una tensión en la puerta, las patillas fuente y drenaje quedan unidas internamente entre sí y la corriente puede circular libremente a su través. Si dejamos de aplicarla, la conexión se abre y la corriente deja de circular.
La diferencia es que en los CMOS de tipo N (nMOS), la tensión que aplicamos en la puerta es positiva, por ejemplo, 3,3 voltios. Y la corriente fluirá desde la fuente hasta el drenaje, también llamado sumidero.
Y en los CMOS de tipo P (pMOS), la tensión que aplicamos en la puerta para que la corriente fluya entre drenaje y fuente es negativa, por ejemplo, GND.
Expresándonos en términos de microcontroladores, la tensión de 3,3 voltios será una tensión alta (H de High) y GND una tensión baja (L de Low). O sea, pasa esto:
¿Qué pasaría si usamos un transistor de cada tipo y unimos sus patillas GATE entre sí y una de las SOURCE a la DRAIN del otro? Puede verlo en este gráfico, en el que ya he utilizado la expresión 1 para referirme a un nivel alto y 0 para el nivel bajo. Cómo haremos en Annex.
Puede quedarse con esta idea-resumen:
- Si en el registro de control de la GPIO colocamos un 1, en la salida de la GPIO nos aparecerá el positivo de la tensión de alimentación, o sea, los +3,3 voltios.
- Si en el registro de control de la GPIO colocamos un 0, la salida de la GPIO quedará unida a masa, o sea el GND de la alimentación.
En esencia, esto es una GPIO. Aunque hay más. La salida de una GPIO no tiene solo dos estados, 1 y 0, o alto y bajo; además, existe un tercer estado en el que la salida queda flotando, desconectada del positivo y del negativo de la alimentación. Se conoce como de alta impedancia.
Su utilidad es grande, porque nos permite usar la misma patilla del microcontrolador no solo como salida sino también como entrada. Efectivamente, en todo microcontrolador que se precie hay conectada en cada patilla GPIO un circuito que permite que leamos por programa el estado de la misma. Nos informará de si la tenemos conectada a positivo (1) o a masa (0). Por ejemplo, a través de un pulsador o interruptor.
Verá también una resistencia que podemos conectar o desconectar a voluntad. Más adelante veremos para qué.
Qué es el ADC (Analog to Digital Converter)
En singular, porque el ESP266 solo tiene uno. Es un convertidor de tensión analógica a su valor digital correspondiente.
La patilla etiquetada como A0 en el Wemos D1 lee la tensión que le aplicamos (siempre entre 0 y 3,3 voltios o se puede quemar) y nos devuelve en una variable un valor entre 0 y 1.023. Veremos 0 si la tensión es cero y 1.023 si la tensión es de 3,3 voltios.
Los módulos Wemos, NodeMCU, etc., incorporan un divisor de tensión interno, ya que, en realidad, la patilla llamada ADC del integrado ESP8266EX solo admite un máximo de 1 voltio.
¿Qué hacemos si nuestra tensión a medir puede llegar a ser mayor de 3,3 voltios? Elemental, intercale entre A0 y su tensión una resistencia apropiada; para 5 voltios, esta resistencia Rx, al estar en serie con la R1 interna, de 220 kΩ, afectará así a la formula de cálculo: