Ampliar el número de pines digitales de Arduino por I2C


Tutorial en vídeo


Introducción

Un expansor de pines digitales es un dispositivo que permite añadir entradas y salidas extra a tu Arduino. Generalmente están basados en el chip PCF8574, que permite añadir 8 E/S mediante el bus de datos I2C. Esto es aún mas alucinante de lo que parece,ya que se pueden conectar multitud de expansores simultáneamente, pudiendo llegar a tener un Arduino con varias decenas de pines digitales.

La intensidad con la que trabaja este dispositivo por cada pin es muy baja, por tanto, igual que Arduino, se reserva para señales de mando y pequeños elementos de señalización.

Conexión

Los pines destinados a la comunicación I2C varían con el modelo de Arduino. Como hemos visto en otras ocasiones, Arduino UNO  usa el pin A4 y el A5 para comunicar por I2C. 

Como ocurre en otros protocolos de bus de datos, como KNX, cada expansor estará identificado con una dirección única, que hace que, pese a estar conectado a los mismos cables que otros dispositivos en paralelo, se puedan vincular órdenes a un solo dispositivos concreto.

Para elegir la dirección individual del módulo tenemos que seguir el código que se muestra en la siguiente tabla, y que va en relación con los tres pequeños interruptores o los tres puentes (jumpers) del expansor. 


Hay que alimentar el módulo con Vcc y GND y conectar dos cables para la comunicación I2C: SCA - Pin A5, SDL - Pin A4, como vemos en la siguiente figura:


Programación en ArduinoBlocks

En el apartado Entrada/Salida disponemos de los bloques necesarios para llevar a cabo esta conexión. En cada bloque hay que indicar la dirección del expansor y el pin que queremos activar como salida o leer como entrada:


Bloques de utilización de pines como salidas

- Mantener salidas activas con 5V:

- Mantener salidas inactivas con 0V:

- Lectura:

Ejemplos de uso

- Parpadeo de la salida 0 de un expansor con una dirección 0x20:

- Lectura de la entrada 0 de un expansor con una dirección 0x20:









Comentarios

Entradas populares de este blog

Publicar y almacenar datos en Internet con ThingSpeak

Gráficos y animaciones en pantallas OLED i2c

Utilizar ESP-01 como periférico WiFi en ArduinoBlocks (parte I)