onewire — 1-Wire-Busprotokoll

Das Modul onewire implementiert das 1-Wire-Bus-Master-Protokoll, das von Geräten wie dem DS18x20-Temperatursensor verwendet wird. Es nutzt einen einzelnen machine.Pin, der als Open-Drain konfiguriert ist, um mit einem oder mehreren Slave-Geräten am gemeinsam genutzten Bus zu kommunizieren.

Beispiel:

from machine import Pin
from onewire import OneWire

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

Klassen

class onewire.OneWire(pin: machine.Pin)

Erzeugt einen 1-Wire-Bus-Master am angegebenen machine.Pin. Der Pin wird automatisch als Open-Drain mit Pull-up konfiguriert.

ROM-Befehlskonstanten:

SEARCH_ROM: int

Search-ROM-Befehl (0xF0). Wird intern von scan() verwendet, um Geräte am Bus zu erkennen.

MATCH_ROM: int

Match-ROM-Befehl (0x55). Wird intern von select_rom() verwendet, um ein bestimmtes Gerät über seinen 64-Bit-ROM-Code zu adressieren.

SKIP_ROM: int

Skip-ROM-Befehl (0xCC). Adressiert alle Geräte am Bus gleichzeitig und überspringt dabei den ROM-Abgleich.

Bus-Reset:

reset(required: bool = False) bool

Sendet einen Reset-Impuls auf dem Bus. Gibt True zurück, wenn mindestens ein Slave-Gerät mit einem Presence-Impuls geantwortet hat, andernfalls False. Wenn required True ist und kein Gerät antwortet, wird OneWireError ausgelöst.

Bit-/Byte-Ein-/Ausgabe:

readbit() int

Liest ein einzelnes Bit vom Bus und gibt es als 0 oder 1 zurück.

readbyte() int

Liest ein einzelnes Byte vom Bus und gibt es als Ganzzahl (0–255) zurück.

readinto(buf: bytearray) None

Liest len(buf) Bytes vom Bus in den angegebenen vorab zugewiesenen Puffer.

writebit(value: int) None

Schreibt ein einzelnes Bit (0 oder 1) auf den Bus.

writebyte(value: int) None

Schreibt ein einzelnes Byte (0–255) auf den Bus.

write(buf: bytes | bytearray) None

Schreibt die Bytes in buf auf den Bus.

Geräteadressierung:

select_rom(rom: bytes | bytearray) None

Sendet einen Reset gefolgt von einem MATCH-ROM-Befehl, um das Gerät zu adressieren, dessen 64-Bit-ROM-Code in rom (einem 8-Byte-Puffer) enthalten ist.

scan() list[bytearray]

Durchsucht den Bus und gibt eine Liste von 8-Byte-ROM-Codes zurück (ein bytearray pro erkanntem Gerät). Gibt eine leere Liste zurück, wenn keine Geräte vorhanden sind.

Zyklische Redundanzprüfung:

crc8(data: bytes | bytearray) int

Berechnet die 8-Bit-CRC nach Maxim/Dallas über data. Das Ergebnis ist 0, wenn data bereits ein gültiges abschließendes CRC-Byte enthält, was zur Validierung empfangener Scratchpad-Inhalte verwendet werden kann.

Ausnahmen

exception onewire.OneWireError

Wird ausgelöst, wenn eine 1-Wire-Operation fehlschlägt. Wird derzeit von OneWire.reset() ausgelöst, wenn required True ist und kein Slave auf den Reset-Impuls antwortet.