Comunicación I2C con Arduino

La comunicación en electrónica sirve para que distintos dispositivos interactúen entre ellos, en este caso aprenderemos a usar la comunicación I2C (Inter-Circuitos Integrados), que es un bus de comunicaciones en serie con 2 líneas para transmitir la información.
La comunicación I2C utiliza direccionamiento cada dispositivo tiene una dirección de 7 bits, así que podría comunicarse con hasta 127 dispositivos.

diagrama I2C

En Arduino es muy fácil de encontrar dispositivos ya sean sensores, pantallas LCD… etc. que se comunican con el micro controlador por comunicación I2C, es popular porque tan solo con 2 líneas se pueden a conectar varios dispositivos, cada uno con una dirección.

Material necesario:

•    Dos placas Arduino
•    Un pulsador
•    Un led
•    Una resistencia de 10k Ohm
•    Una resistencia de 220 Ohm

Esquema de montaje:

esquema de montaje I2C

Nota: No olvidar de conectar los dos GND de las placas entre ellos.

Programa Arduino master:

#include <Wire.h> //Incluimos la librería para comunicación I2C

int estado = 0; //Asignamos el valor 0 a la variable estado
int pulsador = 9; //Asignamos el valor 9 a la variable pulsador

void setup() {
Wire.begin();
//Empezamos la comunicación I2C, el paréntesis está vacío porque es el master
}

void loop()
{
estado = digitalRead(pulsador); //Comprobamos el estado del pulsador

if(estado == 1){ //Si el estado del botón es igual a 1
Wire.beginTransmission(4); //Empezamos la transmisión con el dispositivo 4
Wire.write(1); //Escribimos un 1 a este dispositivo
Wire.endTransmission();  //Paramos la transmisión
}
else{ //de lo contrario
Wire.beginTransmission(4); //Empezamos la transmisión con el dispositivo 4
Wire.write(2); //Escribimos un 1 a este dispositivo
Wire.endTransmission(); //Paramos la transmisión
}
}

Programa Arduino Slave:

#include <Wire.h> //Incluimos la librería para comunicación I2C

int led = 10; //Asignamos el valor 10 a la variable led

void setup()
{
Wire.begin(4); //Empezamos la comunicación I2C con dirección 4 (dispositivo slave)
Wire.onReceive(receiveEvent); //Ira a la función receiveEvent cuando entre dato
}

void loop()
{
}

void receiveEvent(int howMany) {
int x = Wire.read(); //Leemos el dato recibido
switch (x) { //select case de la variable x
  case 1: //si es 1
  digitalWrite(led, HIGH); //enciende el led
  break;
  case 2:  //si es 2
  digitalWrite(led, LOW); //apaga el led
  break;
  }
}

Demostración:


2 comentarios

  1. tenco un arduino uno r3, el sda y scl estan ubucados igual?

  2.   JEF dijo

    que hace el cable el pin 5?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *