Hoje discutiremos como podemos conectar vários dispositivos I2C com Arduino Nano e digitalizar seu endereço I2C usando o código IDE Arduino.
Introdução à comunicação I2C
O Arduino Nano pode se comunicar com outros dispositivos usando o Protocolo de Circuito Integrado (I2C). Os dados são trocados por dois fios usando o protocolo I2C. É amplamente utilizado em eletrônicos porque permite que vários dispositivos compartilhem um número limitado de conexões sem a necessidade de um canal de comunicação separado.
Para usar I2C no Arduino Nano, o SDA (Data Pin) e SCL (pino de relógio) é usado. Na maioria dos quadros de nano Arduino, esses pinos são A4 e A5, respectivamente. Você também precisará incluir a biblioteca de arame em seu esboço e inicializar a comunicação i2C usando o fio.BEGIN () função.
I2C é semelhante ao trabalhar com UART e SPI. Por exemplo, como o protocolo SPI I2C também tem suporte para dispositivos de mestre e múltiplo escravos. Da mesma forma, I2C é de alguma forma semelhante ao UART também por causa dos dois fios para comunicação. O UART usa dois fios para comunicação que é TX e RX, I2C também usa dois fios SDA e SCL para transferência de comunicação e dados.
A imagem acima representa o controle de dois dispositivos escravos usando um único mestre. Aqui um resistor de puxar está conectado ao SDA e SCL. I2C fornece sinais com dois níveis baixo e circuito aberto. I2C no Arduino Nano está no modo de circuito aberto. Puxe o resistor que usamos puxará I2C para alto nível.
Arduino Nano usa duas linhas para comunicação I2C:
Como digitalizar o endereço I2C em Arduino Nano usando Arduino IDE
O endereço I2C de um dispositivo deve ser único porque é usado para identificar o dispositivo no barramento i2c. Quando um dispositivo envia ou recebe dados no barramento i2c, ele o faz usando seu endereço I2C exclusivo. Se dois dispositivos no mesmo barramento i2c tiverem o mesmo endereço, será impossível distinguir entre eles, levando a erros de comunicação e comportamento não confiável.
Para garantir que cada dispositivo em um barramento I2C tenha um endereço exclusivo, os dispositivos I2C normalmente recebem um endereço fixo pelo fabricante. Esses endereços são tipicamente valores de 7 ou 10 bits, dependendo do protocolo I2C específico sendo usado.
Os dispositivos que usam o protocolo I2C têm endereços exclusivos que variam de 0 a 127. Por exemplo, se tivermos uma tela LCD com o mesmo endereço I2C, não conseguiremos nos comunicar entre eles usando a mesma placa Arduino.
Agora, interfaceemos dois dispositivos I2C com o Arduino Nano e encontraremos o endereço I2C usando o código Arduino.
Esquemático
Abaixo, a imagem mostra o esquema de Arduino Nano com OLED e I2C LCD Display conectado em A4 e A5 de Arduino Nano. O pino SDA está no A4 e o pino SCL corresponde a A5 de Arduino Nano.
Os pinos de conexão do Arduino Nano com OLED e I2C LCD é:
Tela OLED | Pin Arduino Nano |
---|---|
VCC | 3v3 |
Gnd | Gnd |
SCL | A5 |
SDA | A4 |
I2C LCD Display | Pin Arduino Nano |
---|---|
VCC | 5V |
Gnd | Gnd |
SCL | A5 |
SDA | A4 |
Código
Abra o Arduino IDE, conecte a placa Nano e envie o código fornecido para digitalizar o endereço I2C da tela OLED e I2C LCD.
#include /*biblioteca de arame importada* /
configuração void ()
Arame.começar(); /*I2C A comunicação começa*/
Serial.começar (9600); /*Taxa de transmissão para comunicação UART*/
enquanto (!Serial); /*Aguarde a saída serial*/
Serial.println ("\ ni2c scanner");
Void Loop ()
byte err, ADR; /*Variável para armazenar o endereço I2C*/
int number_of_devices;
Serial.println ("Scanning.");
número_of_devices = 0;
para (ADR = 1; ADR < 127; adr++)
Arame.BEGNTRANSMISSÃO (ADR);
err = fio.ENDTRANSMISSÃO ();
if (err == 0)
Serial.print ("dispositivo i2c no endereço 0x");
if (adr < 16)
Serial.print ("0");
Serial.impressão (ADR, hexadecimal);
Serial.println (" !");
número_of_devices ++;
caso contrário, se (err == 4)
Serial.print ("Erro desconhecido no endereço 0x");
if (adr < 16)
Serial.print ("0");
Serial.println (ADR, Hex);
if (number_of_devices == 0)
Serial.println ("Não I2C Dispositivos anexados \ n");
outro
Serial.println ("feito \ n");
atraso (5000); /*Aguarde 5 segundos após cada digitalização I2C*/
O código começou incluindo a biblioteca de arame que ajuda o Nano a estabelecer a comunicação I2C com os dispositivos. A próxima taxa de transmissão é definida para comunicação em série.
Na variável da seção de loop errar e ADR é definido. Duas variáveis armazenarão o endereço I2C após a digitalização. A para o loop é definido, que digitaliza os endereços I2C de dispositivos anexados ao Arduino Nano.
Após a digitalização do endereço I2C, ele será impresso no Monitor serial Arduino. O endereço I2C exibido estará em formato hexadecimal.
Hardware
Abaixo da imagem mostra o OLED 0.Tela I2C de 96 polegadas e tela I2C LCD está conectada ao Arduino Nano nos pinos GPIO A4 e A5. VCC e GND de ambos os displays estão conectados ao Arduino Nano 3v3/5V e GND Pin.
Saída
Monitor serial exibiu o endereço I2C dos displays OLED e I2C LCD. Ambos têm endereços I2C separados, o que significa que podemos usá -los juntos no mesmo quadro Arduino Nano.
No entanto, se tivermos dispositivos com o mesmo endereço I2C, podemos alterar o endereço deles. Para fazer isso, procure a folha de dados de um sensor específico.
Os endereços OLED e LCD I2C são obtidos usando Arduino Nano.
Conclusão
A digitalização de um endereço I2C antes de conectar vários dispositivos I2C com Arduino é importante, pois dois dispositivos com o mesmo endereço não podem se comunicar em um único barramento i2c. Este artigo inclui o código de varredura i2C usando o qual qualquer um dos endereços do dispositivo I2C pode ser encontrado, que está conectado ao Nano Board.