Hoy discutiremos cómo podemos conectar múltiples dispositivos I2C con Arduino Nano y escanear su dirección I2C usando el código Arduino IDE.
Introducción a la comunicación I2C
El Arduino Nano puede comunicarse con otros dispositivos utilizando el protocolo del circuito interintegrado (I2C). Los datos se intercambian a través de dos cables utilizando el protocolo I2C. Se usa ampliamente en electrónica porque permite que múltiples dispositivos compartan un número limitado de conexiones sin la necesidad de un canal de comunicación separado.
Para usar I2C en el Arduino Nano, se usa SDA (PIN de datos) y SCL (PIN del reloj). En la mayoría de las tablas de Arduino Nano, estos alfileres son A4 y A5, respectivamente. También deberá incluir la biblioteca de cables en su boceto e inicializar la comunicación I2C usando el cable.función begin ().
I2C es similar en trabajar para UART y SPI. Por ejemplo, al igual que el protocolo SPI I2C también tiene soporte para dispositivos de esclavos y maestros únicos y múltiples. Del mismo modo, I2C es de alguna manera similar a UART también debido a los dos cables para la comunicación. UART usa dos cables para la comunicación que es TX y RX, I2C también usa dos cables SDA y SCL para la comunicación y la transferencia de datos.
La imagen de arriba representa el control de dos dispositivos esclavos usando un solo maestro. Aquí una resistencia de pull up está conectada a SDA y SCL. I2C da señales con dos niveles bajos y circuitos abiertos. I2C en Arduino Nano está en modo de circuito abierto. Resistencia de tirar que usamos tirará de i2c a alto nivel.
Arduino Nano usa dos líneas para la comunicación I2C:
Cómo escanear la dirección I2C en Arduino Nano usando Arduino IDE
La dirección I2C de un dispositivo debe ser única porque se utiliza para identificar el dispositivo en el bus I2C. Cuando un dispositivo envía o recibe datos en el bus I2C, lo hace utilizando su dirección I2C única. Si dos dispositivos en el mismo bus I2C tienen la misma dirección, será imposible distinguir entre ellos, lo que lleva a errores de comunicación y un comportamiento poco confiable.
Para garantizar que cada dispositivo en un bus I2C tenga una dirección única, los dispositivos I2C generalmente se les asigna una dirección fija por el fabricante. Estas direcciones son típicamente valores de 7 o 10 bits, dependiendo del protocolo I2C específico que se utiliza.
Los dispositivos que usan el protocolo I2C tienen direcciones únicas que van desde 0 a 127. Por ejemplo, si tenemos una pantalla LCD con la misma dirección I2C, no podremos comunicarnos entre ellos utilizando el mismo tablero Arduino.
Ahora interactuaremos dos dispositivos I2C con Arduino Nano y encontraremos la dirección I2C usando el código Arduino.
Esquemático
A continuación, la imagen muestra esquema de Arduino Nano con pantalla LCD OLED e I2C conectada en el pin A4 y A5 de Arduino Nano. El pin SDA está en A4 y el pin SCL corresponde a A5 de Arduino Nano.
Los pasadores de conexión de Arduino Nano con OLED e I2C LCD son:
Pantalla OLED | Arduino nano pin |
---|---|
VCC | 3v3 |
Gnd | Gnd |
SCL | A5 |
SDA | A4 |
Pantalla LCD I2C | Arduino nano pin |
---|---|
VCC | 5V |
Gnd | Gnd |
SCL | A5 |
SDA | A4 |
Código
Abra Arduino IDE, conecte la placa nano y cargue el código dado para escanear la dirección I2C de la pantalla LCD OLED e I2C.
#include /*biblioteca de cables importada* /
Configuración vacía ()
Cable.comenzar(); /*La comunicación I2C comienza*/
De serie.comenzar (9600); /*Tasa de baudios para la comunicación UART*/
mientras (!De serie); /*Esperar la salida en serie*/
De serie.println ("\ Ni2c Scanner");
bucle vacío ()
byte err, adr; /*variable para almacenar la dirección I2C*/
int number_of_devices;
De serie.println ("escaneo.");
número_of_devices = 0;
para (ADR = 1; ADR < 127; adr++)
Cable.beginTransmission (ADR);
err = cable.Endtransmission ();
if (err == 0)
De serie.imprimir ("dispositivo I2C en la dirección 0x");
if (ADR < 16)
De serie.imprimir ("0");
De serie.imprimir (ADR, hex);
De serie.println (" !");
Number_of_devices ++;
más if (err == 4)
De serie.imprimir ("Error desconocido en la dirección 0x");
if (ADR < 16)
De serie.imprimir ("0");
De serie.println (ADR, hex);
if (number_of_devices == 0)
De serie.println ("No i2c dispositivos adjuntos \ n");
demás
De serie.println ("hecho \ n");
retraso (5000); /*espera 5 segundos después de cada escaneo I2C*/
El código iniciado incluyendo la biblioteca de cables que ayuda a Nano a establecer la comunicación I2C con los dispositivos. La siguiente tasa de baudios se define para la comunicación en serie.
En la variable de sección de bucle errar y ADR se define. Dos variables almacenarán la dirección I2C después de escanear. Se define un bucle para el bucle que escanea las direcciones I2C de dispositivos adjuntos a Arduino Nano.
Después de escanear la dirección I2C, se imprimirá en el monitor de serie Arduino. La dirección I2C mostrada estará en formato hexadecimal.
Hardware
La imagen de abajo muestra el OLED 0.La pantalla I2C de 96 pulgadas y la pantalla LCD I2C están conectadas a Arduino Nano en GPIO Pins A4 y A5. VCC y GND de ambas pantallas están conectados a Arduino Nano 3V3/5V y PIN GND.
Producción
Serial Monitor mostró la dirección I2C de las pantallas LCD OLED e I2C. Ambos tienen direcciones I2C separadas, lo que significa que podemos usarlas juntas en el mismo arduino Nano Board.
Sin embargo, si tenemos dispositivos con la misma dirección I2C, podemos cambiar su dirección. Para hacer esto, busque la hoja de datos de un sensor específico.
Las direcciones OLED y LCD I2C se obtienen usando Arduino Nano.
Conclusión
Escanear una dirección I2C antes de conectar múltiples dispositivos I2C con Arduino es importante ya que dos dispositivos con la misma dirección no pueden comunicarse en un solo bus I2C. Este artículo incluye el código de escaneo I2C utilizando el cual se puede encontrar cualquiera de las direcciones de dispositivo I2C que está conectada a la placa nano.