bclose

Mas entradas y salidas disponibles ESP32

Objetivos

 

 
  • Vamos a usar el PCF8575 con ESP32.
  • Veremos el diagrama de conexión.
  • Comprobaremos que es el mismo programa que con Arduino UNO.

 

 

Material requerido.

 

 

vista lateral del esp32  Un ESP32
Expansor de puertas IO Un PCF8575
detalle de pines de control Un módulo de 16 relés

 

Mas pines para ESP32

 

Lo de andar falto de pines es una constante cunado hacemos proyectos con Arduino UNO, que suelen ser bastante fácilmente subsanable si pasamos a un Arduino MEGA, pero la falta de éste de WIFI o Bluetooh, y su baja velocidad de reloj, nos ha llevado a casi todos a usar con más frecuencia el ESP32 como base de nuestros proyectos.

Y si la falta de pines era frecuente con el Arduino UNO, en el caso del ESP32 es dramática porque nos quedaremos sin entradas salidas con mucha mas facilidad, debido a la escasez de este micro controlador de pines IO disponibles.

Por eso parece interesante hacer una sesión para hablar de como usar el PCF8575 para ampliar el numero de pines disponibles y para ello vamos a usar el mismo circuito que usamos en la última sesión donde lo conectábamos al Arduino UNO.

 

Diagrama de conexión PCF8575 con ESP32

 

La cosa no tiene perdida. Basta con conectar los pines I2C del PCF8575 a los correspondientes del ESP32:

Tensión Ground SCL SDA
PCF8575 Vcc GND SCL SDA
ESP32 3V GND 22 21

 

ESP32 y PCF8575

Como ves, las conexiones son triviales, pero hay un par de cuestione por las que merecía la pena hacer el montaje:

 
  • El PCF8575 funciona tanto a 3,3 V como a 5V, lo que nos facilita conectar todo. Fíjate que estoy alimentando los relés y el PCF8575 a 5V (Mediante la salida 5V del ESP32), y sin embargo las salidas I2C que atacan al multiplexor son de 3,3V ; Es decir que podemos usar indistintamente señales de 3,3 con un chip que está alimentado a 5V sin problemas.
  • En segundo lugar, alimentar un paquete de relés consume lo suyo y tiene que calcular correctamente la fuente de alimentación de lo que conectamos. Por ejemplo, si paso la salida USB 2.0 de mi PC para alimentar el ESP32, el máximo de potencia que podemos suministrar es de 0,5 Amperios y con eso los relés no conmutan.
  • La razón es que excitar la bobina de un relé, tiene consumo alto y si añades el consumo del ESP32, que no es de los bajos, en conjunto sobrepasan los 0,5 amperios del USB. En mi caso voy a usar un alimentador externo de 2ª, tipo los de cargar móviles para alimentar el ESP32 y el resto del circuito.
  • Recuerda siempre calcular correctamente la alimentación de tus circuitos o puedes encontrar problemas y olor a quemado. En principio, los relés que estoy usando deberían consumir sobre 65-70 mA cada UNO, mas media amperio para el ESP32 y el circuito del modulo de relés, para ir sobrado. Si en algún momento voy a activar simultáneamente todos los relés, debería suministrar un total de:

16 x 70 mA + 500 mA = 1.620 mA  

El programa es el mismo de la última sesión:

#include "PCF8575.h"
PCF8575 EXT(0x20);
int pause = 400;

void setup()
{  Serial.begin(115200);
   EXT.begin();

   for (int i=0; i<16; i++)
        EXT.pinMode(i, OUTPUT);
}

void loop() 
{  for (int i=0; i<16; i++)
      { Serial.println(i);
        EXT.digitalWrite(i, LOW);
        delay (pause);
        EXT.digitalWrite(i, HIGH);
        delay (pause);
      }
}

 

Usando varios PCF8575 simultáneamente

 

Vale, podemos añadir 16 entradas / salidas a mi ESP32 ¿Y que pasa si aun necesito más?

Pues en realidad puedes combinar 8 para generar un total de 8x 16 = 128 pines adicionales, sin mas que modificar la dirección I2C de ellos. Si te fijas en la parte inferior de la Breakout veras algo como esto:

Pines de direccion i2c

Hay 3 columnas rotuladas como A0, A1, A2 que son los 3 bits que podemos usar para cambiar la dirección del chip a partir de la dirección de base (0x20). En principio al no estar conectadas ninguna entiende que la dirección es la base 0x20.

Sin embargo, podemos usar estos 3 pines para crear una cantidad de 0 a 7 que se sumara a la dirección base. Por ejemplo, si conecto con el soldador A0 a VDD (Este pin valdrá 1) conecto A1 a VDD (También valdrá 1) y dejo libre A2 o bien lo conecto a GND, el resultado será

011 -> 3

Cambio de direccion I2c

Es decir que la dirección final será la suma de 0x20 Hex + 3 = 0x23 hex como resultado, y mediante este procedimiento podemos cambiar la dirección de otros 7 chips PCF8575 para conseguir las direcciones 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26 y 0x27. De este modo podemos conectar hasta los 8 unidades del PCF8575 al mismo bus I2C, permitiéndonos hasta 128 entradas salidas adicionales.

Y si soy tan de especial que aun necesito más de 128 pines… ¿Qué? Bueno, esto… ese será el tema de los próximos capítulos porque a mi no me corta nadie que soy de Bilbao.