Librería wire


Esta librería le permite comunicarse al arduino por i2c, ya sea como maestro a otros dispositivos o como esclavo recibiendo peticiones y respondiendo datos

oscar Escrito por oscar 03 March 2020 25841 3

Wire

Esta librería le permite comunicarse al arduino por medio de modulo interno i2c, ya sea como maestro a otros dispositivos o como esclavo recibiendo peticiones y respondiendo datos. Esta librería esta incluida por defecto en el entorno de desarrollo del arduino y no requiere descargarla.[1]

Pines i2c en arduino

En la siguiente tabla se muestra algunas de las principales placas y en que pines esta el modulo i2c

Notas

A partir de Arduino 1.0, la biblioteca hereda de las funciones Stream, por lo que es coherente con otras bibliotecas de lectura / escritura. Debido a esto, send () y reciben () han sido reemplazados por read () y write ().

Hay versiones de 7 y 8 bits de direcciones I2C . 7 bits identifican el dispositivo, y el octavo bit determina si se está escribiendo o leyendo. La biblioteca Wire utiliza direcciones de 7 bits en todo momento.

Para mas información del i2c en este post encontrara su definición y características.

Uso

Pata usar esta librería solo se requiere añadir la siguiente linea

#include <Wire.h>

Funciones

Wire.begin()

Descripción

Inicia la librería para unirse al bus I2C como maestro o esclavo. Esto normalmente debería llamarse solo una vez.

Sintaxis

Wire.begin(dirección)

Parámetros

  • #include <Wire.h>La dirección del esclavo de 7 bits (opcional); si no se especifica, únase al bus como maestro.

Retorna

Ninguna

Wire.requestFrom()

Descripción

Usado por el maestro para solicitar bytes de un dispositivo esclavo. Los bytes se pueden recuperar con las funciones disponibles() y read().

A partir de Arduino 1.0.1, requestFrom() acepta un argumento booleano que cambia su comportamiento por compatibilidad con ciertos dispositivos I2C.

Si es true, requestFrom() envía un mensaje de detención después de la solicitud, liberando el bus I2C.

Si es false, requestFrom() envía un mensaje de reinicio después de la solicitud. El bus no se liberará, lo que evita que otro dispositivo maestro solicite entre mensajes. Esto permite que un dispositivo maestro envíe múltiples solicitudes mientras está en control.

El valor por defecto es verdadero.

Sintaxis

Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)

Parámetros

  • address La dirección de 7 bits del dispositivo para solicitar bytes
  • quantity El número de bytes a solicitar
  • stop booleano. true enviará un mensaje de detención después de la solicitud, liberando el bus. false enviará continuamente un reinicio después de la solicitud, manteniendo la conexión activa.

Retorna

byte: el número de bytes devueltos por el dispositivo esclavo

beginTransmission()

Descripción

Comienza una transmisión al dispositivo esclavo I2C con la dirección dada. Posteriormente, pone en cola los bytes para la transmisión con la función write() y transmítalos llamando a endTransmission().

Sintaxis

Wire.beginTransmission(address)

Parámetros

  • address La dirección de 7 bits del dispositivo a transmitir

Retorna

Ninguna

endTransmission()

Descripción

Finaliza una transmisión a un dispositivo esclavo que comenzó con beginTransmission() y transmite los bytes que estaban en cola por write().

A partir de Arduino 1.0.1, endTransmission() acepta un argumento booleano que cambia su comportamiento por compatibilidad con ciertos dispositivos I2C.

Si es true, endTransmission() envía un mensaje de detención después de la transmisión, liberando el bus I2C.

Si es false, endTransmission() envía un mensaje de reinicio después de la transmisión. El bus no se liberará, lo que impide que otro dispositivo maestro transmita entre mensajes. Esto permite que un dispositivo maestro envíe múltiples transmisiones mientras está en control.

El valor por defecto es true.

Sintaxis

Wire.endTransmission()
Wire.endTransmission(stop)

Parámetros

  • stop booleano. true enviará un mensaje de detención, liberando el bus después de la transmisión. falso enviará un reinicio, manteniendo la conexión activa.

Retorna

byte, que indica el estado de la transmisión:

  • 0: éxito
  • 1: datos demasiado largos para caber en el búfer de transmisión
  • 2: NACK recibido al transmitir la dirección
  • 3: NACK recibido en la transmisión de datos
  • 4: otro error

write()

Descripción

Escribe datos de un dispositivo esclavo en respuesta a una solicitud de un maestro, o pone en cola bytes para la transmisión de un dispositivo maestro a esclavo (llamadas intermedias a beginTransmission() y endTransmission()).

Sintaxis

Wire.write(value)
Wire.write(string)
Wire.write(data, length)

Parámetros

  • value Un valor para enviar como un solo byte
  • string Una cadena para enviar como una serie de bytes
  • data Una matriz de datos para enviar como bytes
  • length El número de bytes a transmitir

Retorna

byte: write() devolverá el número de bytes escritos, aunque leer ese número es opcional.

available()

Descripción

Devuelve el número de bytes disponibles para recuperación con read(). Se debe invocar en un dispositivo maestro después de una llamada a requestFrom() o en un esclavo dentro del controlador onReceive().

disponible() hereda de la clase de utilidad Stream.

Sintaxis

Wire.available()

Parámetros

Ninguno

Retorna

El número de bytes disponibles para leer.

read()

Descripción

Lee un byte que se transmitió de un dispositivo esclavo a un maestro después de una llamada a requestFrom() o se transmitió de un maestro a un esclavo. read() hereda de la clase de utilidad Stream.

Sintaxis

Wire.read()

Parámetros

Ninguno

Retorna

El siguiente byte recibido

setClock()

Descripción

Esta función modifica la frecuencia del reloj para la comunicación I2C . Los dispositivos esclavos I2C no tienen una frecuencia mínima de reloj de trabajo, sin embargo, 100 KHz suele ser la línea de base.

Sintaxis

Wire.setClock(clockFrequency)

Parámetros

  • clockFrequency el valor (en hercios) del reloj de comunicación deseado. Los valores aceptados son 100000 (modo estándar) y 400000 (modo rápido). Algunos procesadores también admiten 10000 (modo de baja velocidad), 1000000 (modo rápido plus) y 3400000 (modo de alta velocidad). Consulte la documentación específica del procesador para asegurarse de que el modo deseado sea compatible.

Retorna

Nada

onReceive()

Descripción

Registra una función a llamar cuando un dispositivo esclavo recibe una transmisión de un maestro.

Sintaxis

Wire.onReceive(handler)

Parámetros

handler

La función a llamar cuando el esclavo recibe datos; Esto debería tomar un único parámetro int (el número de bytes leídos del maestro) y no devolver nada, por ejemplo: void myHandler (int numBytes)

Retorna

Nada

onRequest()

Descripción

Registre una función que se llamará cuando un maestro solicite datos de este dispositivo esclavo.

Sintaxis

Wire.onRequest(handler)

Parámetros

la función a llamar, no toma parámetros y no devuelve nada, por ejemplo: void myHandler()

Retorna

Nada

Referencias

[1] arduino https://www.arduino.cc/en/Reference/Wire, Consultado marzo 2020


Comentario

Debe aceptar antes de enviar
fercho123567
fercho123567

26 October 2021 13:05

la usare para configuracion de i2c

04 October 2022 10:26

¿Esto es sólo para Arduino? ¿Qué sucede si tengo un microcontrolador Cypress PSoC?
oscar
oscar

04 April 2023 10:12

Esta libreris esta diseñada solo para arduino