I2C Comunicación entre dos tableros Arduino

I2C Comunicación entre dos tableros Arduino
I2C es un protocolo de comunicación utilizado para conectar dispositivos a una placa de microcontrolador Arduino Uno. El protocolo utiliza una línea de datos compartida (SDA) y una línea de reloj (SCL) para la comunicación. La biblioteca de alambre incorporada en el Arduino IDE permite una fácil comunicación con dispositivos I2C a través de funciones de alto nivel y admite múltiples autobuses I2C.

Este artículo cubre:

  • ¿Qué es la comunicación I2C en Arduino?
  • Pins I2C en Arduino
  • ¿Qué es la biblioteca de cable I2C?
  • Conectando dos tableros Arduino usando I2C como maestro y esclavo
  • Esquemático
  • codigo maestro
  • Código de esclavos
  • Producción
  • Conclusión

¿Qué es la comunicación I2C en Arduino?

I2c (Circuito interintegrado) es un protocolo popular para conectar microcontroladores con periféricos como sensores y pantallas. Arduino Uno, una placa de microcontrolador ampliamente utilizada, se puede configurar para comunicarse con otros dispositivos utilizando el protocolo de comunicación I2C.

Algunos aspectos destacados principales de la comunicación I2C incluyen:

Capacidad de múltiples maestras y múltiples esclavos: I2C admite múltiples dispositivos maestros y múltiples dispositivos de esclavos en un solo bus, lo que permite la comunicación entre múltiples dispositivos al mismo tiempo.

Recuento de alfileres bajos: I2C usa solo dos líneas, SDA y SCL, para la comunicación, lo que reduce el número de conexiones requeridas y simplifica el cableado.

Dispositivos direccionables: Cada dispositivo I2C en el bus tiene una dirección única, lo que permite una fácil identificación y comunicación con dispositivos específicos.

Alta velocidad: I2c es capaz de altas tasas de datos de hasta 3.4 Mbps, lo que lo hace adecuado para aplicaciones de transferencia de datos de alta velocidad.

Ahorro de energía: I2C permite la comunicación de baja potencia entre dispositivos al permitir que los dispositivos se coloquen en modos de baja potencia cuando no se comuniquen y se despierte a pedido.

Pins I2C en Arduino

En la comunicación I2C, se utilizan dos líneas:

  • Linea de datos (SDA): Línea de datos para intercambiar datos entre dispositivos maestros y esclavos.
  • Línea de reloj (SCL): Línea de reloj para sincronizar la comunicación I2C entre dispositivos.

El maestro Arduino controla la línea de reloj I2C e inicia la comunicación con los periféricos, mientras que los dispositivos de esclavos responden a las solicitudes del maestro.

En la tabla a continuación, encontrará los pinos de la interfaz I2C en varios tableros Arduino:

Junta Pins I2C
Arduino nano SDA-A4 | SCL-A5
Mega Arduino SDA-A4 | SCL-A5 y SDA-20 | SCL-21
Arduino Leonardo SDA-A4 | SCL-A5
Arduino Uno SDA-A4 | SCL-A5
Arduino micro SDA-02 | SCL-03*

*Los pines I2C pueden variar dependiendo de la versión de la placa que esté utilizando amablemente ver la hoja de datos respectiva para obtener más detalles.

¿Qué es la biblioteca de cable I2C?

La biblioteca de cables I2C está preinstalada en un IDE que crea comunicación entre los dispositivos I2C. La biblioteca contiene funciones para configurar y comunicarse en el bus I2C, incluidas las funciones para inicializar el bus como un dispositivo maestro o esclavo, enviar y recibir datos, y controlar la velocidad del reloj.

La biblioteca facilita la comunicación con los dispositivos I2C abstraiendo los detalles de bajo nivel del protocolo I2C y proporcionando funciones simples de alto nivel que se pueden usar en los bocetos Arduino. Por ejemplo, el comenzar() La función se usa para inicializar el bus I2C como un dispositivo maestro o esclavo

La biblioteca también admite el uso de múltiples autobuses I2C, lo que permite la comunicación con múltiples dispositivos al mismo tiempo. Si está tratando con múltiples sensores o pantallas para un proyecto, esto es útil.

Conectando dos tableros Arduino usando I2C como maestro y esclavo

Para establecer la comunicación I2C entre dos tableros Arduino Uno, los pasadores SDA y SCL de ambos tableros deben conectarse juntos y compartir un terreno común. La comunicación se puede lograr mediante el uso de la biblioteca de cables incorporados en Arduino que contiene funciones para configurar y comunicarse en el bus I2C.

Esquemático

La imagen a continuación muestra dos tableros Arduino UNO conectados en la configuración del esclavo maestro:

codigo maestro

Cargue el código a continuación al Master Arduino Board:

#include /*biblioteca de alambre para la comunicación I2C* /
int x = 0; /*Inicializar una variable para almacenar un número*/
setup () void
/*Inicie el bus I2C como maestro*/
Cable.comenzar();

bucle void ()
/*La dirección del bus I2C está configurada como 9 para el dispositivo esclavo*/
Cable.begintransmission (9);
Cable.escribir (x); /*envía x*/
Cable.Endtransmission (); /*Deja de transmitir*/
x ++; /*Incremento x*/
if (x> 5) x = 0; /*Restablecer x una vez que obtenga 6*/
retraso (1000);

El código iniciado por incluye la biblioteca maestra I2C. Se inicializa una variable que almacenará los valores enteros a partir de 0 a 5. La dirección I2C para el dispositivo esclavo se define como 9. Usando la función de biblioteca de cables

En el tablero maestro, el comenzar() La función inicializará el bus I2C como un dispositivo maestro

Una vez que se configuran los tableros, pueden comunicarse entre sí a través del bus I2C. El maestro Arduino solicita datos de la junta de esclavo Arduino y el esclavo puede responder con los datos solicitados.

Código de esclavos

Cargar a continuación código a la placa de esclavo Arduino en la que está conectado el LED:

#incluir
int led = 13; /*Pin de LED para la salida*/
int x = 0; /*variable para recibir valor del maestro Arduino*/
setup () void
PinMode (LED, salida); /*Pin de LED establecido como salida*/
Cable.comenzar (9); /*El dispositivo esclavo I2C leerá los datos del maestro en la dirección#9*/
Cable.onreceive (recibeVent); /*Adjunte una función para activar cuando se recibe algo*/

vacío recibeVent (int bytes)
x = cable.leer(); /*Lea un personaje del I2C Master*/

bucle void ()
/*Si el valor recibido es 0 LED de parpadeo para 200 ms*/
if (x == 0)
DigitalWrite (LED, alto);
retraso (200);
DigitalWrite (LED, bajo);
retraso (200);

/*Si el valor recibido es 3 LED parpadeado para 400 ms*/
if (x == 3)
DigitalWrite (LED, alto);
retraso (400);
DigitalWrite (LED, bajo);
retraso (400);

Código iniciado por la biblioteca de cables y a continuación establecemos el LED incorporado en el pin 13 de Slave Arduino como salida. A continuación, una variable X se define que recibirán datos del maestro Arduino. Usando este valor entero, parpadearemos a un personaje en particular una vez que se reciba.

En bucle(), El personaje recibido se traduce a una velocidad diferente de parpadeo LED dependiendo del personaje recibido. Si la condición se usa cuando el carácter recibido del dispositivo maestro es 0, el LED parpadeará con 200 ms y si el carácter recibido es 3 LED parpadeará con un retraso de 400 ms.

En el caso de cualquier otro personaje, LED permanecerá apagado.

Producción

En la salida podemos ver el LED conectado con esclavo Arduino Blinks cada vez que Master envía un personaje 0 o 3.

Conclusión

La comunicación I2C permite que múltiples dispositivos se comuniquen entre sí utilizando un bus común. Los tableros Arduino se pueden configurar para comunicarse entre sí usando I2C conectando los pines SDA y SCL y configurando las tablas como maestro y esclavo usando la biblioteca de cables en Arduino. El uso de la comunicación de dispositivos múltiples I2C dentro de un proyecto es, por lo tanto, más fácil y más eficiente.