fbpx

Como utilizar o módulo expansor de portas I2C PCF8574

O módulo PCF8574 (Figura 1) é um componente que permite aumentar a quantidade de portas digitais de entrada/saída de um microcontrolador. Ele possui interface de comunicação I2C e utiliza apenas duas portas (SCL e SDA) para controlar os 8 pinos do chip.

A figura mostra uma foto de uma foto real do Módulo expansor de portas I2C PCF8574
Figura 1 – Módulo expansor de portas I2C PCF8574

O módulo PCF8574 é ideal para projetos grandes ou em que os pinos do microcontrolador não são suficientes. Ademais, você pode conectar até 8 módulos PCF8574 em série em um projeto, totalizando 64 portas de entrada/saída.

O modo de conexão em série de módulos PCF8574 pode ser observado na Figura 2.

A figura mostra uma foto de dois módulo PCF8574 conectado em série
Figura 2 – Dois módulos PCF8574 conectados em série

A pinagem do módulo expansor é bem simples de ser entendida, conforme mostrado na Figura 3.

Figura 3 – Pinos do módulo expansor PCF8574

Na sua estrutura, temos do lado esquerdo 4 pinos para comunicação com o microcontrolador, são eles VCC, GND, SDA e SCL.

Na parte superior há 9 pinos, sendo 8 portas digitais de entrada e saída (P0, P1, P2, P3, P4, P5, P6 e P7) e em pino de interrupção lógica (INT).

Na parte central do módulo temos os jumpers para ajuste do endereço I2C. O módulo expansor PCF8574 pode ser configurado com diferentes endereços dependendo das posições dos jumpers. Existem três jumpers de seleção do endereço (A0, A1 e A2), que são colocados em nível lógico baixo quando conectados ao pino – e nível alto quando conectados ao pino +. A Tabela 1 descreve os endereços possíveis:

Nesse tutorial aprenderemos como utilizar o módulo expansor de portas I2C PCF8574 em conjunto com o Arduino para acionar 8 LEDs de forma ordenada.

MATERIAIS NECESSÁRIOS

ESQUEMÁTICO DE LIGAÇÃO

A Figura 4 ilustra o esquemático de ligação para uso do módulo expansor de portas I2C PCF8574 em conjunto com o Arduino para acionar 8 LEDs de forma ordenada.

A Figura mostra o circuito de funcionamento do módulo expansor de portas I2C PCF8574 com Arduino, em ilustração.
Figura 4 – Esquemático de ligação para uso do módulo expansor de portas I2C PCF8574

Ao realizar a montagem observe os seguintes pontos:

  • Os polos negativos dos LEDs devem estar ligados ao GND do Arduino;
  • Os polos positivos dos LEDs devem ser conectados aos pinos do módulo expansor (P0, P1, P2, P3, P4, P5, P6, P7 e P8).
  • O pino SCL do módulo deve ser conectado com a porta A5 do Arduino UNO.
  • O pino SDA do módulo deve ser conectado com a porta A4 do Arduino UNO.
  • A alimentação do módulo deve ser feita utilizando o 5V do Arduino.

CONHECENDO O ENDEREÇO I2C DO SEU MÓDULO EXPANSOR

O endereço do módulo expansor de portas PCF8574 pode ser obtido consultando a Tabela 1. Para certificar que o endereço está correto, podemos executar um código exemplo da biblioteca wire.h. Para tal, abra o Arduino IDE e acesse o exemplo pelo seguinte caminho: Arquivo > Exemplos > Wire > i2c_scanner, conforme a Figura 5:

A figura mostra uma captura de tela do caminho a ser seguido para encontrar o codigo do endereço I2C na Arduino IDE
Figura 5 – Código para verificar o endereço I2C do módulo expansor de portas PCF8574

Realize o upload do código para o Arduino e abra o monitor serial. O código realizará o escaneamento do endereço do módulo PCF8574 e retornará seu valor na segunda linha exibida no monitor serial, conforme pode ser verificado na Figura 6.

A Figura mostra uma captura de tela do Endereço I2C encontrado na Arduino IDE.
Figura 6 – Endereço I2C no módulo expansor de portas PCF8574

ELABORANDO O CÓDIGO

Com o esquemático montado e de posse da informação do endereço I2C do módulo PCF8574, podemos proceder a programação. A proposta deste projeto é utilizar o módulo expansor de portas I2C PCF8574 em conjunto com o Arduino para acionar 8 LEDs de forma ordenada. Para tal, faremos uso da biblioteca “PCF8574.h”, que pode ser baixada através do seguinte link:

www.blogdarobotica.com/biblioteca-PCF8574

Aprenda a adicionar biblioteca no Arduino IDE: Clique aqui!

Acompanhe a lógica para a construção do código a partir dos seguintes passos:

1.Incluir a biblioteca “PCF8574.h”

Essa biblioteca será responsável por executar os comandos envolvendo o módulo expansor PCF8574.

2. Declarar o endereço I2C do módulo

Para declaração do endereço no código utilizaremos o comando: “PCF8574 pcf8574(X)”, sendo X é o endereço I2C do módulo PCF8574, que foi encontrado na Tabela 1 ou no código anterior.

3. Inicializar a comunicação serial e realizar as configurações iniciais

Na função setup(), inicializamos a comunicação serial através da instrução “Serial.begin(9600);”.

Logo após, definimos os pinos de digitais do módulo PCF8574 como saída (OUTPUT) por meio da instrução “pcf8574.pinMode(Pn, OUTPUT);”, em que n é o número do pino.

Em seguida, usamos a estrutura condicional para verificar se a inicialização do módulo PCF8574 ocorreu bem.

4. Ligar dos LEDs de forma ordenada

Iniciamos a função loop() realizando o acionamento dos LEDs de forma ordenada com intervalo de 1 segundo. Para ligar os LEDs usamos a instrução “pcf8574.digitalWrite(Pn, HIGH);”, em que n representa número do pino.

5. Desligar os LEDs de forma ordenada

Logo em seguida, realizamos o desligamento dos LEDs de forma ordenada. Para tal, usamos a instrução “pcf8574.digitalWrite(Pn, LOW);”, sendo n o número do pino. Por fim, temos como o resultado o seguinte código:

Por fim, temos como o resultado o seguinte código:

 /*
  -  LIGAR E DESLIGAR LEDS EM ORDEM COM MÓDULO EXPANSOR DE PORTAS I2C PCF8574 -
  =================================================
  === BLOG DA ROBOTICA - www.blogdarobotica.com ===
  =================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  === CASA DA ROBOTICA - www.casadarobotica.com ===
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ==================================================
*/

#include "PCF8574.h" //Inclui a bliblioteca "PCF8574.h" para controlar o módulo expansor.

PCF8574 pcf8574(0x20); //Declaração do endereço I2C achado

void setup() {

  Serial.begin(9600); //Inicia a comunicação serial
  pcf8574.pinMode(P0, OUTPUT); //Define o pino P0 do módulo como saída
  pcf8574.pinMode(P1, OUTPUT); //Define o pino P1 do módulo como saída
  pcf8574.pinMode(P2, OUTPUT); //Define o pino P2 do módulo como saída
  pcf8574.pinMode(P3, OUTPUT); //Define o pino P3 do módulo como saída
  pcf8574.pinMode(P4, OUTPUT); //Define o pino P4 do módulo como saída
  pcf8574.pinMode(P5, OUTPUT); //Define o pino P5 do módulo como saída
  pcf8574.pinMode(P6, OUTPUT); //Define o pino P6 do módulo como saída
  pcf8574.pinMode(P7, OUTPUT); //Define o pino P7 do módulo como saída

  Serial.print("Iniciando..."); //Exibe uma mensagem de inicialização no monitor serial assim que o código começa a funcionar

  if (pcf8574.begin()) { //Verifica a inicialização do módulo PCF8575
    Serial.println("OK"); //Manda uma mensagem de OK caso a inicialização seja feita com sucesso
  } else {
    Serial.println("N-OK"); //Manda uma mensagem de N-OK caso ocorra algum erro de comunicação
  }
}

void loop() {

  pcf8574.digitalWrite(P0, HIGH); //Liga o LED conectado ao pino P0
  delay(1000); //Tempo de espera entre a ligação de um led e outro em milissegundos

  pcf8574.digitalWrite(P1, HIGH); //Liga o LED conectado ao pino P1
  delay(1000);

  pcf8574.digitalWrite(P2, HIGH); //Liga o LED conectado ao pino P2
  delay(1000);

  pcf8574.digitalWrite(P3, HIGH); //Liga o LED conectado ao pino P3
  delay(1000);

  pcf8574.digitalWrite(P4, HIGH); //Liga o LED conectado ao pino P4
  delay(1000);

  pcf8574.digitalWrite(P5, HIGH); //Liga o LED conectado ao pino P5
  delay(1000);

  pcf8574.digitalWrite(P6, HIGH); //Liga o LED conectado ao pino P6
  delay(1000);

  pcf8574.digitalWrite(P7, HIGH); //Liga o LED conectado ao pino P7
  delay(1000);

  pcf8574.digitalWrite(P0, LOW); //Desliga o LED conectado ao pino P0
  delay(1000); //Tempo de espera entre o desligamento de um led e outro em milissegundos

  pcf8574.digitalWrite(P1, LOW); //Desliga o LED conectado ao pino P1
  delay(1000);

  pcf8574.digitalWrite(P2, LOW); //Desliga o LED conectado ao pino P2
  delay(1000);

  pcf8574.digitalWrite(P3, LOW); //Desliga o LED conectado ao pino P3
  delay(1000);

  pcf8574.digitalWrite(P4, LOW); //Desliga o LED conectado ao pino P4
  delay(1000);

  pcf8574.digitalWrite(P5, LOW); //Desliga o LED conectado ao pino P5
  delay(1000);

  pcf8574.digitalWrite(P6, LOW); //Desliga o LED conectado ao pino P6
  delay(1000);

  pcf8574.digitalWrite(P7, LOW); //Desliga o LED conectado ao pino P7
  delay(1000);
}

Por fim, temos o funcionamento do projeto, mostrado no Vídeo 1.

Video 01: Funcionamento do módulo expansor de portas I2C PCF8574

Espero ter ajudado,

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Jonas Souza

Dúvidas? Deixe seu comentário

Jonas Souza

Graduando em Engenharia Elétrica. Atua no setor desenvolvimento de tutoriais para o Blog da Robótica.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.