onewire — Protocolo de bus 1-Wire

El módulo onewire implementa el protocolo maestro del bus 1-Wire utilizado por dispositivos como el sensor de temperatura DS18x20. Emplea un único machine.Pin configurado como colector abierto (open-drain) para comunicarse con uno o varios dispositivos esclavos en el bus compartido.

Ejemplo:

from machine import Pin
from onewire import OneWire

ow = OneWire(Pin("P7"))
devices = ow.scan()
for rom in devices:
    print(rom)

Clases

class onewire.OneWire(pin: machine.Pin)

Construye un maestro de bus 1-Wire en el machine.Pin indicado. El pin se configura automáticamente como colector abierto (open-drain) con resistencia de pull-up.

Constantes de comandos ROM:

SEARCH_ROM: int

Comando Search ROM (0xF0). Lo utiliza internamente scan() para descubrir dispositivos en el bus.

MATCH_ROM: int

Comando Match ROM (0x55). Lo utiliza internamente select_rom() para direccionar un dispositivo específico mediante su código ROM de 64 bits.

SKIP_ROM: int

Comando Skip ROM (0xCC). Direcciona simultáneamente todos los dispositivos del bus, omitiendo la coincidencia de ROM.

Reinicio del bus:

reset(required: bool = False) bool

Emite un pulso de reinicio en el bus. Devuelve True si al menos un dispositivo esclavo respondió con un pulso de presencia; en caso contrario, False. Si required es True y ningún dispositivo responde, lanza OneWireError.

E/S de bits y bytes:

readbit() int

Lee un único bit del bus y lo devuelve como 0 o 1.

readbyte() int

Lee un único byte del bus y lo devuelve como un entero (0–255).

readinto(buf: bytearray) None

Lee len(buf) bytes del bus en el búfer preasignado indicado.

writebit(value: int) None

Escribe un único bit (0 o 1) en el bus.

writebyte(value: int) None

Escribe un único byte (0–255) en el bus.

write(buf: bytes | bytearray) None

Escribe los bytes de buf en el bus.

Direccionamiento de dispositivos:

select_rom(rom: bytes | bytearray) None

Emite un reinicio seguido de un comando MATCH ROM para direccionar el dispositivo cuyo código ROM de 64 bits está en rom (un búfer de 8 bytes).

scan() list[bytearray]

Busca en el bus y devuelve una lista de códigos ROM de 8 bytes (un bytearray por cada dispositivo detectado). Devuelve una lista vacía si no hay dispositivos presentes.

Comprobación de redundancia cíclica:

crc8(data: bytes | bytearray) int

Calcula el CRC de 8 bits de Maxim/Dallas sobre data. El resultado es 0 cuando data ya incluye un byte CRC final válido, lo que permite validar el contenido del scratchpad recibido.

Excepciones

exception onewire.OneWireError

Se lanza cuando falla una operación 1-Wire. Actualmente la lanza OneWire.reset() cuando required es True y ningún esclavo responde al pulso de reinicio.