Librería wire para arduino: qué es y cómo usarla

22/03/2013

La librería Wire en Arduino es fundamental para la comunicación I2C (Inter-Integrated Circuit), un protocolo serial que permite la comunicación entre múltiples dispositivos utilizando solo dos cables: SDA (Serial Data) y SCL (Serial Clock).

¿Para qué sirve la librería Wire? La librería Wire facilita enormemente la interacción con dispositivos I2C en Arduino. Proporciona funciones sencillas para enviar y recibir datos, convirtiendo una tarea compleja en un proceso simple y eficiente. Sin ella, la programación de la comunicación I2C sería mucho más difícil y engorrosa.

Temario

I2C: El protocolo de comunicación

Antes de profundizar en la librería Wire, entendamos los conceptos básicos de I2C:

  • Comunicación serial: I2C transmite datos secuencialmente, bit a bit, a diferencia de la comunicación paralela que utiliza múltiples líneas.
  • Dos cables: SDA se utiliza para transmitir datos, mientras que SCL sincroniza la comunicación mediante pulsos de reloj.
  • Maestro-Esclavo: Un dispositivo actúa como maestro, iniciando la comunicación y dirigiéndose a dispositivos esclavos específicos mediante direcciones únicas.
  • Reconocimiento: El protocolo incluye un mecanismo de acuse de recibo para asegurar que los datos se transmiten correctamente.
  • Direcciones de 7 o 10 bits: Cada dispositivo I2C tiene una dirección única que lo identifica en el bus.

Funciones principales de la librería Wire

La librería Wire ofrece un conjunto de funciones esenciales para manejar la comunicación I2C:

Funciones para el modo Maestro:

  • Wire.begin() : Inicializa la librería y configura el Arduino como dispositivo maestro.
  • Wire.beginTransmission(slaveAddress) : Inicia una transmisión de datos hacia un dispositivo esclavo con la dirección especificada ( slaveAddress ).
  • Wire.write(data) : Envía datos al dispositivo esclavo. Puede ser un byte, una cadena de caracteres o un array.
  • Wire.endTransmission() : Finaliza la transmisión de datos.
  • Wire.requestFrom(address, numBytes) : Solicita una cantidad específica ( numBytes ) de datos a un dispositivo esclavo con la dirección address .
  • Wire.available() : Verifica cuántos bytes de datos están disponibles para ser leídos.
  • Wire.read() : Lee un byte de datos recibidos.

Funciones para el modo Esclavo:

  • Wire.begin(address) : Inicializa la librería y configura el Arduino como dispositivo esclavo con la dirección address .
  • Wire.onReceive(handler) : Define una función ( handler ) que se ejecuta cuando el esclavo recibe datos.
  • Wire.onRequest(handler) : Define una función ( handler ) que se ejecuta cuando el maestro solicita datos al esclavo.

Ejemplos prácticos de uso

Para ilustrar el uso de la librería Wire, veamos algunos ejemplos:

Ejemplo 1: Maestro escribiendo datos en un esclavo

#include <Wire.h>void setup() { Wire.begin(); // Inicializa como maestro}void loop() { Wire.beginTransmission(8); // Dirección del esclavo Wire.write('H'); // Envía un dato Wire.write('o'); Wire.write('l'); Wire.write('a'); Wire.endTransmission(); delay(1000);}

Ejemplo 2: Esclavo recibiendo datos

#include <Wire.h>void setup() { Wire.begin(8); // Inicializa como esclavo con dirección 8 Wire.onReceive(recibirDatos);}void loop() { // ...}void recibirDatos(int numBytes) { while (Wire.available() > 0) { char caracter = Wire.read(); Serial.print(caracter); } Serial.println();}

Tabla Comparativa de Funciones

Función Descripción Modo
Wire.begin() Inicializa la librería Maestro y Esclavo
Wire.beginTransmission(address) Inicia transmisión al esclavo Maestro
Wire.write(data) Escribe datos Maestro
Wire.endTransmission() Finaliza la transmisión Maestro
Wire.requestFrom(address, numBytes) Solicita datos al esclavo Maestro
Wire.available() Bytes disponibles para leer Maestro y Esclavo
Wire.read() Lee un byte Maestro y Esclavo
Wire.onReceive(handler) Función para recibir datos Esclavo
Wire.onRequest(handler) Función para responder a peticiones Esclavo

Consultas habituales sobre la librería Wire

  • ¿Cómo conectar dispositivos I2C? Se necesitan dos cables: SDA y SCL, conectados a los pines correspondientes del Arduino y al dispositivo I2C. A menudo se requieren resistencias pull-up en SDA y SCL.
  • ¿Qué son las resistencias pull-up? Son resistencias que mantienen los pines SDA y SCL en alto cuando no se está transmitiendo, evitando estados indefinidos.
  • ¿Cómo encontrar la dirección I2C de un dispositivo? La dirección suele estar indicada en la documentación del dispositivo. Algunos programas pueden ayudar a detectarla.
  • ¿Qué hacer si la comunicación I2C falla? Verificar las conexiones, las resistencias pull-up, las direcciones I2C y la correcta implementación del código.

Consideraciones adicionales

La librería Wire es una herramienta potente y versátil para la comunicación I2C en Arduino. Su uso adecuado permite integrar una amplia gama de sensores y dispositivos en proyectos de electrónica.

Recuerda que la correcta configuración de las direcciones I2C y el manejo adecuado de las funciones de la librería son cruciales para una comunicación exitosa.

Explorar ejemplos y la documentación de la librería Wire te ayudará a dominar su uso y a aprovechar al máximo las capacidades de la comunicación I2C en tus proyectos.

Si quieres conocer otros artículos parecidos a Librería wire para arduino: qué es y cómo usarla puedes visitar la categoría Libros y Librerías.

Subir