onewire — протокол шини 1-Wire

Модуль onewire реалізує протокол ведучого пристрою шини 1-Wire, який використовується такими пристроями, як температурний датчик DS18x20. Для зв’язку з одним або кількома веденими пристроями на спільній шині він використовує єдиний machine.Pin, налаштований у режимі відкритого стоку.

Приклад:

from machine import Pin
from onewire import OneWire

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

Класи

class onewire.OneWire(pin: machine.Pin)

Створює ведучий пристрій шини 1-Wire на заданому machine.Pin. Вивід автоматично налаштовується як відкритий стік з підтяжкою до живлення.

Константи команд ROM:

SEARCH_ROM: int

Команда Search ROM (0xF0). Використовується внутрішньо методом scan() для виявлення пристроїв на шині.

MATCH_ROM: int

Команда Match ROM (0x55). Використовується внутрішньо методом select_rom() для звернення до конкретного пристрою за його 64-бітним кодом ROM.

SKIP_ROM: int

Команда Skip ROM (0xCC). Звертається до всіх пристроїв на шині одночасно, пропускаючи зіставлення ROM.

Скидання шини:

reset(required: bool = False) bool

Надсилає імпульс скидання на шину. Повертає True, якщо хоча б один ведений пристрій відповів імпульсом присутності, або False в іншому випадку. Якщо required має значення True і жоден пристрій не відповідає, генерується виключення OneWireError.

Побітовий/байтовий ввід/вивід:

readbit() int

Зчитує один біт із шини та повертає його як 0 або 1.

readbyte() int

Зчитує один байт із шини та повертає його як ціле число (0–255).

readinto(buf: bytearray) None

Зчитує len(buf) байтів із шини у заздалегідь виділений буфер.

writebit(value: int) None

Записує один біт (0 або 1) на шину.

writebyte(value: int) None

Записує один байт (0–255) на шину.

write(buf: bytes | bytearray) None

Записує байти з buf на шину.

Адресація пристроїв:

select_rom(rom: bytes | bytearray) None

Надсилає скидання, після якого йде команда MATCH ROM, для звернення до пристрою, 64-бітний код ROM якого міститься у rom (8-байтний буфер).

scan() list[bytearray]

Сканує шину та повертає список 8-байтних кодів ROM (один bytearray на кожен виявлений пристрій). Повертає порожній список, якщо пристроїв не знайдено.

Перевірка циклічного надлишкового коду:

crc8(data: bytes | bytearray) int

Обчислює 8-бітний CRC за алгоритмом Maxim/Dallas для data. Результат дорівнює 0, якщо data вже містить коректний завершальний байт CRC, що дозволяє перевірити правильність отриманого вмісту блокноту.

Виключення

exception onewire.OneWireError

Генерується при помилці операції 1-Wire. Наразі генерується методом OneWire.reset(), коли required має значення True і жоден ведений пристрій не відповідає на імпульс скидання.