27/07/2020
En el entorno de la programación de Arduino, la librería OneWire es una herramienta esencial para interactuar con una amplia gama de dispositivos utilizando el protocolo OneWire. Este protocolo, conocido por su simplicidad y eficiencia, permite la comunicación con múltiples sensores y actuadores a través de un solo cable, reduciendo significativamente la complejidad del cableado y los costos.

¿Qué es OneWire?
OneWire es un protocolo de comunicación maestro-esclavo que utiliza un único cable para la transmisión de datos. Cada dispositivo OneWire posee un número de registro único de 64 bits, permitiendo la coexistencia de múltiples esclavos en el mismo bus. Esto lo convierte en una solución ideal para aplicaciones con múltiples sensores, como sistemas de monitoreo ambiental, domótica, y más.
Algunas características clave de OneWire incluyen:
- Sistema de un solo maestro.
- Bajo costo.
- Bajas tasas de transferencia (hasta 16 kbps).
- Distancias relativamente largas (hasta 300 metros).
- Paquetes de datos pequeños.
Es importante destacar que la frecuencia del oscilador (Fosc) debe ser de al menos 4 MHz para utilizar la librería con termómetros digitales Dallas.
Librería OneWire: Funciones Principales
La librería OneWire para Arduino proporciona un conjunto de funciones para facilitar la comunicación con dispositivos compatibles. Entre las funciones más importantes se encuentran:
Ow_Reset()
Esta función realiza un reinicio del bus OneWire. Retorna 0 si un dispositivo está presente y 1 si no lo está.
Ow_Read()
Lee un byte de datos del bus OneWire.

Ow_Write()
Escribe un byte de datos en el bus OneWire.
Instalación de la Librería OneWire
La instalación de la librería OneWire en Arduino IDE es sencilla. Existen dos métodos principales:
Método 1: Instalación a través del Administrador de Librerías
- Abre el Arduino IDE.
- Ve a “Sketch” > “Importar Librería” > “Administrar Librerías…”.
- Busca "OneWire" en el buscador.
- Selecciona la librería de Paul Stoffregen (la más actualizada y estable) e instala.
Método 2: Instalación Manual
Si el método anterior falla o prefieres la instalación manual, puedes descargar la librería como un archivo .zip y copiar la carpeta resultante a la carpeta de librerías de Arduino. La ubicación de esta carpeta varía según el sistema operativo:
- Windows:
Documentos/Arduino/libraries - macOS:
Documentos/Arduino/libraries - Linux:
Documentos/Arduino/libraries
Después de copiar la carpeta, reinicia el Arduino IDE.
Funcionamiento de OneWire
El protocolo OneWire se basa en la transmisión de pulsos de diferentes duraciones para representar bits de datos. Un pulso corto representa un '1' y un pulso largo un '0'. La línea de datos está en alto cuando está inactiva y puede alimentar a un número limitado de dispositivos esclavos. Las tasas de transferencia alcanzan los 13 kbps, con un modo de sobremarcha que multiplica la velocidad por
El maestro inicia la transmisión con un pulso de reinicio, que baja la línea de datos durante al menos 480 μs. Después de esto, cualquier dispositivo esclavo presente envía un pulso de presencia para confirmar su existencia.
La detección de errores se realiza mediante un CRC de 8 bits. Cada dispositivo OneWire tiene un número de serie único de 64 bits, lo que permite identificarlos individualmente en el bus.
Ejemplos de Uso
A continuación, se muestra un ejemplo básico de cómo leer la temperatura de un sensor DS18B20 utilizando la librería OneWire :
#include <OneWire.h>OneWire ds(2); // DS18B20 en el pin 2void setup() { Serial.begin(9600);}void loop() { byte data[12]; byte addr[8]; if (ds.search(addr)) { if (addr[0] == 0x28) { // Verificar si es un DS18B20 ds.reset(); ds.select(addr); ds.write(0x44, 1); // Iniciar conversión delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); // Leer datos for (int i = 0; i < 9; i++) { data[i] = ds.read(); } // Convertir los datos a temperatura (código omitido por brevedad) // ... Serial.print("Temperatura: "); Serial.println(temperatura); // Imprimir la temperatura } else { Serial.println("Dispositivo no reconocido."); } } else { ds.reset_search(); Serial.println("No se encontraron dispositivos."); } delay(5000);}Este ejemplo muestra las funciones básicas de la librería: search()para buscar dispositivos, reset()y select()para seleccionar un dispositivo, y write()y read()para enviar y recibir datos. Recuerda adaptar el código al pin donde esté conectado tu sensor y al tipo de sensor utilizado.
Tabla Comparativa de Librerías OneWire
| Librería | Características | Ventajas | Desventajas |
|---|---|---|---|
| Librería OneWire de Paul Stoffregen | Funciones completas, robusta, bien documentada | Alta estabilidad, facilidad de uso | Ninguna significativa |
| Otras Librerías OneWire | Funcionalidades limitadas, documentación incompleta | Menos recursos necesarios | Mayor probabilidad de errores |
Es altamente recomendable utilizar la librería OneWire de Paul Stoffregen, debido a su estabilidad, documentación completa y amplia comunidad de usuarios. Otras librerías pueden presentar errores o falta de soporte.
Consultas Habituales
- ¿Cuántos dispositivos OneWire puedo conectar a un solo pin? Teóricamente, puedes conectar muchos dispositivos, pero para evitar problemas de cableado y ruido, se recomienda agruparlos en grupos más pequeños, cada uno conectado a un pin diferente.
- ¿Qué sucede si hay una colisión en el bus OneWire? El maestro reintentará la comunicación. La librería gestiona la detección y resolución de colisiones.
- ¿Cuál es la distancia máxima de transmisión en OneWire? Hasta 300 metros, aunque esto puede variar dependiendo de la calidad del cableado y los dispositivos utilizados.
La librería OneWire es una herramienta poderosa y versátil para la interacción con dispositivos en proyectos de Arduino. Su simplicidad y eficiencia la convierten en una opción popular para una gran variedad de aplicaciones.
Si quieres conocer otros artículos parecidos a Librería onewire para arduino puedes visitar la categoría Libros y Librerías.
