Comunicação I2C entre duas placas Arduino

Comunicação I2C entre duas placas Arduino
I2C é um protocolo de comunicação usado para conectar dispositivos a uma placa de microcontrolador Arduino UNO. O protocolo utiliza uma linha de dados compartilhada (SDA) e linha de relógio (SCL) para comunicação. A biblioteca de arame embutida no Arduino IDE permite fácil comunicação com dispositivos I2C através de funções de alto nível e suporta vários barramentos i2c.

Este artigo aborda:

  • O que é a comunicação i2c em Arduino
  • I2C pinos em Arduino
  • O que é I2C Wire Library
  • Conectando dois Arduino Board usando I2C como mestre e escravo
  • Esquemático
  • Código mestre
  • Código de escravos
  • Saída
  • Conclusão

O que é a comunicação i2c em Arduino

I2c (Circuito inter-integrado) é um protocolo popular para conectar microcontroladores a periféricos, como sensores e displays. Arduino Uno, uma placa de microcontrolador amplamente usada, pode ser configurada para se comunicar com outros dispositivos usando o protocolo de comunicação I2C.

Alguns destaques principais da comunicação I2C incluem:

Capacidade multi-mestre e multi-escravo: I2C suporta vários dispositivos mestre e vários dispositivos de escravos em um único barramento, permitindo comunicação entre vários dispositivos ao mesmo tempo.

Contagem baixa de pinos: I2C usa apenas duas linhas, SDA e SCL, para comunicação, que reduz o número de conexões necessárias e simplifica a fiação.

Dispositivos endereçáveis: Cada dispositivo I2C no barramento tem um endereço exclusivo, permitindo fácil identificação e comunicação com dispositivos específicos.

Alta velocidade: I2C é capaz de altas taxas de dados de até 3.4 Mbps, tornando-o adequado para aplicativos de transferência de dados de alta velocidade.

Economia de energia: I2C permite a comunicação de baixa potência entre os dispositivos, permitindo que os dispositivos sejam colocados em modos de baixa energia quando não se comunicando e acorde a pedido.

I2C pinos em Arduino

Na comunicação I2C, duas linhas são utilizadas:

  • Linha de dados (SDA): Linha de dados para trocar dados entre dispositivos mestre e escravo.
  • Linha de relógio (SCL): Linha do relógio para sincronizar a comunicação I2C entre dispositivos.

O mestre Arduino controla a linha do relógio I2C e inicia a comunicação com os periféricos, enquanto os dispositivos escravos respondem aos pedidos do mestre.

Na tabela abaixo, você encontrará as pinôs da interface i2C em várias placas do Arduino:

Quadro I2C pinos
Arduino Nano SDA-A4 | SCL-A5
Arduino Mega SDA-A4 | SCL-A5 e SDA-20 | SCL-21
Arduino Leonardo SDA-A4 | SCL-A5
Arduino Uno SDA-A4 | SCL-A5
Arduino Micro SDA-02 | SCL-03*

*Os pinos i2c podem variar dependendo de qual versão da placa você está usando gentilmente, consulte a respectiva folha de dados para obter mais detalhes.

O que é I2C Wire Library

A biblioteca de arame i2C está pré -instalada em um IDE que cria comunicação entre dispositivos i2c. A biblioteca contém funções para configurar e comunicar no barramento i2c, incluindo funções para inicializar o barramento como um dispositivo mestre ou escravo, enviar e receber dados e controlar a velocidade do relógio.

A biblioteca facilita a comunicação com os dispositivos I2C, abstraindo os detalhes de baixo nível do protocolo I2C e fornecendo funções simples e de alto nível que podem ser usadas em esboços de Arduino. Por exemplo, o começar() A função é usada para inicializar o barramento i2c como um dispositivo mestre ou escravo

A biblioteca também suporta o uso de vários ônibus I2C, permitindo comunicação com vários dispositivos ao mesmo tempo. Se você está lidando com vários sensores ou exibições para um projeto, isso é útil.

Conectando dois Arduino Board usando I2C como mestre e escravo

Para estabelecer a comunicação I2C entre duas placas Arduino UNO, os pinos SDA e SCL de ambos os conselhos devem ser conectados e compartilhar um terreno comum. A comunicação pode ser alcançada usando a biblioteca de fios embutidos em Arduino, que contém funções para configurar e comunicar no barramento i2c.

Esquemático

Abaixo, a imagem mostra duas placas do Arduino UNO conectadas na configuração do mestre-escravo:

Código mestre

Carregue abaixo o código para Master Arduino Board:

#include /*biblioteca de arame para comunicação i2c* /
int x = 0; /*Inicialize uma variável para armazenar um número*/
Void Setup ()
/*Inicie o barramento i2C como mestre*/
Arame.começar();

Void Loop ()
/*O endereço do barramento I2C é definido como 9 para dispositivo de escravos*/
Arame.BEGN TRANSMISSÃO (9);
Arame.escreva (x); /*envia x*/
Arame.ENDTRANSMISSÃO (); /*Pare de transmitir*/
x ++; /*Incremento x*/
if (x> 5) x = 0; /*Redefinir x assim que obtém 6*/
atraso (1000);

O código iniciado por inclui a biblioteca mestre i2c. É inicializada uma variável que armazenará os valores inteiros que começam de 0 a 5. O endereço I2C para o dispositivo escravo é definido como 9. Usando a função da biblioteca de arames

Na placa mestre, o começar() A função inicializará o barramento i2C como um dispositivo mestre

Depois que as placas estão configuradas, elas podem se comunicar sobre o barramento i2c. O mestre Arduino solicita dados do Slave Arduino Board e o escravo podem responder com os dados solicitados.

Código de escravos

Faça upload abaixo do código para o Slave Arduino Board, no qual o LED está conectado:

#incluir
int led = 13; /*Pino LED para saída*/
int x = 0; /*variável para receber valor do mestre arduino*/
Void Setup ()
pinmode (LED, saída); /*PIN LED SET como saída*/
Arame.começar (9); /*I2C Dispositivo escravo lerá os dados do Master no endereço#9*/
Arame.OnReceive (Receb TheEvent); /*Anexe uma função para acionar quando algo é recebido*/

Void ReceberEvent (int bytes)
x = fio.ler(); /*Leia um personagem do mestre i2C*/

Void Loop ()
/*Se o valor recebido for 0 piscar liderado por 200 ms*/
if (x == 0)
DigitalWrite (LED, alto);
Atraso (200);
DigitalWrite (LED, Low);
Atraso (200);

/*Se o valor recebido for 3 piscar liderado por 400 ms*/
if (x == 3)
DigitalWrite (LED, alto);
atraso (400);
DigitalWrite (LED, Low);
atraso (400);

Código iniciado incluindo biblioteca de arame e, em seguida, definimos o LED incorporado no pino 13 do escravo Arduino como saída. Em seguida, uma variável x está definido que receberá dados do mestre Arduino. Usando esse valor inteiro, piscaremos liderados em um personagem em particular assim que for recebido.

Em laço(), O personagem recebido é então traduzido para uma velocidade diferente de LED piscando, dependendo do personagem recebido. Se a condição for usada quando o caractere recebido do dispositivo mestre for 0, o LED piscará com 200ms e se o caractere recebido for 3 LED, piscará com atraso de 400ms.

Em caso de qualquer outro personagem, o LED permanecerá desligado.

Saída

Na saída, podemos ver o LED conectado com escravo arduino pisca toda vez que o mestre envia um personagem 0 ou 3.

Conclusão

A comunicação I2C permite que vários dispositivos se comuniquem usando um barramento comum. As placas Arduino podem ser configuradas para se comunicar usando o I2C conectando os pinos SDA e SCL e configurando as placas como mestre e escravo usando a biblioteca de arame em Arduino. Usar a comunicação de múltiplos dispositivos de I2C em um projeto é, portanto, mais fácil e mais eficiente.