onewire — protokół magistrali 1-Wire

Moduł onewire implementuje protokół nadrzędnego urządzenia magistrali 1-Wire, używany przez urządzenia takie jak czujnik temperatury DS18x20. Wykorzystuje pojedynczy machine.Pin skonfigurowany jako open-drain do komunikacji z jednym lub większą liczbą urządzeń podrzędnych na wspólnej magistrali.

Przykład:

from machine import Pin
from onewire import OneWire

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

Klasy

class onewire.OneWire(pin: machine.Pin)

Tworzy urządzenie nadrzędne magistrali 1-Wire na podanym machine.Pin. Pin jest automatycznie konfigurowany jako open-drain z rezystorem podciągającym.

Stałe poleceń ROM:

SEARCH_ROM: int

Polecenie Search ROM (0xF0). Używane wewnętrznie przez scan() do wykrywania urządzeń na magistrali.

MATCH_ROM: int

Polecenie Match ROM (0x55). Używane wewnętrznie przez select_rom() do zaadresowania konkretnego urządzenia za pomocą jego 64-bitowego kodu ROM.

SKIP_ROM: int

Polecenie Skip ROM (0xCC). Adresuje jednocześnie wszystkie urządzenia na magistrali, pomijając dopasowywanie ROM.

Reset magistrali:

reset(required: bool = False) bool

Wysyła impuls resetu na magistralę. Zwraca True, jeśli co najmniej jedno urządzenie podrzędne odpowiedziało impulsem obecności, w przeciwnym razie False. Jeśli required ma wartość True i żadne urządzenie nie odpowie, zgłaszany jest wyjątek OneWireError.

Wejście/wyjście bitów/bajtów:

readbit() int

Odczytuje pojedynczy bit z magistrali i zwraca go jako 0 lub 1.

readbyte() int

Odczytuje pojedynczy bajt z magistrali i zwraca go jako liczbę całkowitą (0–255).

readinto(buf: bytearray) None

Odczytuje len(buf) bajtów z magistrali do podanego, wstępnie zaalokowanego bufora.

writebit(value: int) None

Zapisuje pojedynczy bit (0 lub 1) na magistralę.

writebyte(value: int) None

Zapisuje pojedynczy bajt (0–255) na magistralę.

write(buf: bytes | bytearray) None

Zapisuje bajty z buf na magistralę.

Adresowanie urządzeń:

select_rom(rom: bytes | bytearray) None

Wysyła reset, a następnie polecenie MATCH ROM, aby zaadresować urządzenie, którego 64-bitowy kod ROM znajduje się w rom (8-bajtowy bufor).

scan() list[bytearray]

Przeszukuje magistralę i zwraca listę 8-bajtowych kodów ROM (jeden bytearray na każde wykryte urządzenie). Zwraca pustą listę, jeśli nie ma żadnych urządzeń.

Cykliczna kontrola nadmiarowa (CRC):

crc8(data: bytes | bytearray) int

Oblicza 8-bitowy CRC Maxim/Dallas na podstawie data. Wynik wynosi 0, gdy data zawiera już prawidłowy końcowy bajt CRC, co może posłużyć do zweryfikowania odebranej zawartości pamięci scratchpad.

Wyjątki

exception onewire.OneWireError

Zgłaszany, gdy operacja 1-Wire nie powiedzie się. Obecnie zgłaszany przez OneWire.reset(), gdy required ma wartość True i żadne urządzenie podrzędne nie odpowie na impuls resetu.