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 на каждое обнаруженное устройство). Возвращает пустой список, если устройства отсутствуют.

Циклический избыточный код (CRC):

crc8(data: bytes | bytearray) int

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

Исключения

exception onewire.OneWireError

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