Tabla de Contenidos

[I2C] PCF8574: Módulo de expansión y código para Arduino

Existen en el mercado diferentes placas que integran este circuito y que nos permiten realizar proyectos de forma cómoda y rápida. Suelen disponer de la opción de configurar con A0, A1 y A2 la dirección final I2C del módulo mediante puentes o soldaduras.

Ejemplos de código y librerías para Arduino

Ejemplos sin librería

  1. El siguiente código muestra el uso del PCF8574 como salida. En el ejemplo, encendemos y apagamos en bucle cada uno de los pines. Observar que la señal del canal se envía negada, porque el PCF8574 actúa como sumidero de corriente y el pin está activo cuando la salida es LOW.
    pcf8574_salida.ino
    #include <Wire.h>
     
    const int pcfAddress = 0x20;
     
    void setup()
    {
       Wire.begin();
       Serial.begin(9600);
    }
     
    void loop()
    {
       for (short channel = 0; channel < 8; channel++)
       {
          // Escribir dato en cada uno de los 8 canales
          Wire.beginTransmission(pcfAddress);
          Wire.write(~(1 << channel));
          Wire.endTransmission();
     
          // Leer dato del canal
          delay(500);
       }
    }
  2. El siguiente código muestra el uso del PCF8574 como entrada. En el ejemplo realizamos la lectura progresiva de cada uno de los pines, y mostramos su valor por puerto serie.
    pcf8574_entrada.ino
    #include <Wire.h>
     
    const int pcfAddress = 0x20;
     
    void setup()
    {
       Wire.begin();
       Serial.begin(9600);
    }
     
    void loop()
    {
       short channel = 1;
       byte value = 0;
     
       // Leer dato del canal
       Wire.requestFrom(pcfAddress, 1 << channel);
       if (Wire.available()) {
          value = Wire.read();
       }
       Wire.endTransmission();
     
       // Mostrar el valor por el monitor serie
       Serial.println(value);
    }
  • si quieres definir varios pines al mismo tiempo es mas facil usar numero binarios.
    pcf8574.pinMode(0b11111111, OUTPUT); //Define P0 a P7 como salida.
    


Ejemplos con librería

  1. Alternativamente podemos emplear una librería como la desarrollada por SkyWood disponible en https://github.com/skywodd/pcf8574_arduino_library. La librería proporciona códigos de ejemplo para ilustrar su uso. No obstante, aquí tenéis un ejemplo resumido que muestra su uso
    pcf8574_lib.ino
    #include <Wire.h>
    #include "PCF8574.h"
     
    PCF8574 expander;
     
    void setup() 
    {
      Serial.begin(9600);
     
      expander.begin(0x20);
     
      /* Setup some PCF8574 pins for demo */
      expander.pinMode(0, OUTPUT);
      expander.pinMode(1, OUTPUT);
      expander.pinMode(2, OUTPUT);
      expander.pinMode(3, INPUT_PULLUP);
     
      /* Blink hardware LED for debug */
      digitalWrite(13, HIGH);  
     
      /* Toggle PCF8574 output 0 for demo */
      expander.toggle();
     
      /* Blink hardware LED for debug */
      digitalWrite(13, LOW);
    }
     
     
     
    void loop() 
    {
    }