Librería wire.h: comunicación i2c con arduino - información

19/05/2000

El protocolo I2C es fundamental en proyectos con Arduino y la librería Wire.h facilita su uso. Este artículo te guiará a través de su funcionamiento, ventajas, problemas comunes y ejemplos prácticos para que puedas integrarlo en tus proyectos con total confianza.

Temario

¿Qué es la comunicación I2C y cómo funciona?

I2C (Inter-Integrated Circuit) o TWI (Two Wire Interface) es un protocolo serial de comunicación maestro-esclavo, desarrollado por Phillips Semiconductors. Se caracteriza por su eficiencia al usar solo dos cables: SDA (datos) y SCL (reloj), permitiendo conectar múltiples sensores y actuadores a un único microcontrolador.

En la arquitectura maestro-esclavo, un dispositivo maestro (usualmente tu Arduino) inicia y controla la comunicación, mientras que los dispositivos esclavos (sensores, actuadores) responden a sus solicitudes. Es similar a un salón de clases donde el profesor (maestro) interactúa con los estudiantes (esclavos).

Cada mensaje I2C consta de: condición de inicio, trama de dirección (identifica al esclavo), trama(s) de datos y condición de parada. Las resistencias pull-up en SDA y SCL son cruciales para el funcionamiento correcto del bus.

Ventajas de I2C sobre otros protocolos:

I2C se destaca por:

libreria wire h - Qué es la librería Wire H

  • Bajo consumo de pines: Solo necesita dos pines para controlar varios dispositivos.
  • Alta velocidad: Puede alcanzar velocidades de hasta 5 Mbps (mucho más rápido que el Serial).
  • Multi-maestro: Permite que varios microcontroladores compartan el mismo bus I2C.

En la siguiente tabla comparativa se muestran las diferencias entre I2C, Serial y SPI:

Protocolo Pines Velocidad Multi-Maestro
I2C 2 Hasta 5 Mbps
Serial 2 <300 Kbps No
SPI 4 o más Variable, alta No

¿Dónde se usa I2C?

La comunicación I2C se utiliza ampliamente en una gran variedad de dispositivos, incluyendo:

  • Sensores de temperatura ( TMP102 , MCP9808 )
  • Memorias EEPROM
  • Pantallas OLED
  • Lectores RFID
  • Acelerómetros
  • Giroscopios
  • Muchos más...

Librería Wire para I2C en Arduino

La librería Wire.h es la herramienta esencial para programar la comunicación I2C en Arduino. Viene preinstalada en el Arduino IDE y simplifica la interacción con el bus. Algunas funciones clave son:

  • Wire.begin(): Inicializa la librería y configura Arduino como maestro o esclavo.
  • Wire.beginTransmission(address): Inicia una transmisión al esclavo con la dirección address .
  • Wire.write(data): Envía datos al esclavo.
  • Wire.endTransmission(): Finaliza la transmisión.
  • Wire.requestFrom(address, quantity): Solicita una cantidad quantity de bytes al esclavo con la dirección address .
  • Wire.read(): Lee un byte recibido.
  • Wire.available(): Indica la cantidad de bytes disponibles para leer.
  • Wire.setClock(frequency): Establece la velocidad del reloj (frecuencia).
  • Wire.onReceive(handler) (para esclavos): Define una función handler que se ejecutará al recibir datos.
  • Wire.onRequest(handler) (para esclavos): Define una función handler que se ejecutará cuando se soliciten datos.

Ejemplo: Comunicación entre dos Arduinos con I2C

Este ejemplo muestra cómo hacer una comunicación bidireccional entre dos Arduinos usando la librería Wire.h. Un Arduino actúa como maestro y el otro como esclavo. El maestro solicita datos (ej. el tiempo en milisegundos) del esclavo.

libreria wire h - Dónde encontrar el cable Arduino H

Código Maestro:

#include <Wire.h>void setup() { Wire.begin(); // Inicializa como maestro Serial.begin(9600);}void loop() { Wire.beginTransmission(23); // Dirección del esclavo Wire.write('); // Envía un carácter de inicio Wire.endTransmission(); Wire.requestFrom(23, 1); byte len = Wire.read(); Wire.requestFrom(23, len); while (Wire.available()) { Serial.print((char)Wire.read()); } delay(500);}

Código Esclavo:

#include <Wire.h>String message;bool S = false;void setup() { Wire.begin(23); // Inicializa como esclavo con la dirección 23 Wire.onRequest(eventoSolicitud); Wire.onReceive(eventoRecepcion);}void loop() { delay(100);}void eventoRecepcion() { if (Wire.read() == ') { S = true; message = String(millis()); }}void eventoSolicitud() { if (S) { Wire.write(message.length()); S = false; } else { Wire.write(message.c_str()); }}

Problemas comunes en la comunicación I2C

  • Falta de resistencias pull-up: Asegúrate de tener resistencias pull-up (2kΩ - 10kΩ) en SDA y SCL.
  • Cables demasiado largos: Utiliza cables cortos para minimizar interferencias.
  • Incompatibilidad de voltaje: Todos los dispositivos deben operar al mismo voltaje (3V o 5V).
  • Direcciones I2C duplicadas: Cada dispositivo en el bus debe tener una dirección I2C única.

La librería Wire.h y el protocolo I2C son herramientas poderosas para expandir las capacidades de tus proyectos Arduino. Con este tutorial, ahora puedes integrar eficientemente múltiples sensores y actuadores, aprovechando las ventajas de la comunicación I2C. Recuerda tener en cuenta los problemas comunes para asegurar un funcionamiento sin problemas.

Si quieres conocer otros artículos parecidos a Librería wire.h: comunicación i2c con arduino - información puedes visitar la categoría Libros y Librerías.

Subir