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 przezscan()do wykrywania urządzeń na magistrali.
- MATCH_ROM: int¶
Polecenie Match ROM (
0x55). Używane wewnętrznie przezselect_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 razieFalse. Jeśli required ma wartośćTruei żadne urządzenie nie odpowie, zgłaszany jest wyjątekOneWireError.
Wejście/wyjście bitów/bajtów:
- readinto(buf: bytearray) None¶
Odczytuje
len(buf)bajtów z magistrali do podanego, wstępnie zaalokowanego bufora.
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
bytearrayna każde wykryte urządzenie). Zwraca pustą listę, jeśli nie ma żadnych urządzeń.
Cykliczna kontrola nadmiarowa (CRC):
Wyjątki¶
- exception onewire.OneWireError¶
Zgłaszany, gdy operacja 1-Wire nie powiedzie się. Obecnie zgłaszany przez
OneWire.reset(), gdy required ma wartośćTruei żadne urządzenie podrzędne nie odpowie na impuls resetu.