onewire --- 1-Wire 匯流排協定

onewire 模組實作了 1-Wire 匯流排主控協定,可用於諸如 DS18x20 溫度感測器等裝置。它使用單一個設定為開汲極(open-drain)的 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)

在指定的 machine.Pin 上建構一個 1-Wire 匯流排主控端。該接腳會自動設定為附帶提升電阻(pull-up)的開汲極模式。

ROM 命令常數:

SEARCH_ROM: int

搜尋 ROM 命令(0xF0)。由 scan() 內部使用,用以探索匯流排上的裝置。

MATCH_ROM: int

比對 ROM 命令(0x55)。由 select_rom() 內部使用,依 64 位元 ROM 代碼定址特定裝置。

SKIP_ROM: int

略過 ROM 命令(0xCC)。同時定址匯流排上的所有裝置,略過 ROM 比對。

匯流排重設:

reset(required: bool = False) bool

在匯流排上發出重設脈衝。若至少有一個從屬裝置以存在脈衝(presence pulse)回應,則回傳 True,否則回傳 False。若 requiredTrue 且沒有任何裝置回應,則引發 OneWireError

位元/位元組 I/O:

readbit() int

從匯流排讀取單一位元,並以 01 回傳。

readbyte() int

從匯流排讀取單一位元組,並以整數(0--255)回傳。

readinto(buf: bytearray) None

從匯流排讀取 len(buf) 個位元組到指定的預先配置緩衝區中。

writebit(value: int) None

將單一位元(01)寫入匯流排。

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

計算 data 的 Maxim/Dallas 8 位元 CRC。當 data 本身已包含一個有效的尾端 CRC 位元組時,結果為 0,可用以驗證所接收的暫存器(scratchpad)內容。

例外

exception onewire.OneWireError

在 1-Wire 操作失敗時引發。目前由 OneWire.reset()requiredTrue 且沒有從屬裝置回應重設脈衝時引發。