onewire — פרוטוקול אפיק 1-Wire

המודול onewire מממש את פרוטוקול ה-master של אפיק 1-Wire, המשמש התקנים כגון חיישן הטמפרטורה DS18x20. הוא משתמש ב-machine.Pin יחיד המוגדר כ-open-drain כדי לתקשר עם התקן עבד אחד או יותר על האפיק המשותף.

דוגמה:

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)

בניית master של אפיק 1-Wire על ה-machine.Pin הנתון. הפין מוגדר אוטומטית כ-open-drain עם נגד pull-up.

קבועי פקודות ROM:

SEARCH_ROM: int

פקודת Search ROM (0xF0). משמשת באופן פנימי את scan() כדי לגלות התקנים על האפיק.

MATCH_ROM: int

פקודת Match ROM (0x55). משמשת באופן פנימי את select_rom() כדי לפנות להתקן מסוים לפי קוד ה-ROM שלו בן 64 הסיביות.

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) בתים מהאפיק אל החוצץ (buffer) המוקצה מראש הנתון.

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 כדי לפנות להתקן שקוד ה-ROM שלו בן 64 הסיביות נמצא ב-rom (חוצץ (buffer) בן 8 בתים).

scan() list[bytearray]

חיפוש באפיק והחזרת רשימה של קודי ROM בני 8 בתים (bytearray אחד לכל התקן שזוהה). מחזירה רשימה ריקה אם אין התקנים נוכחים.

בדיקת יתירות מחזורית:

crc8(data: bytes | bytearray) int

חישוב ה-CRC בן 8 הסיביות של Maxim/Dallas על data. התוצאה היא 0 כאשר data כבר כולל בית CRC עוקב תקין, דבר שניתן להשתמש בו כדי לאמת תוכן scratchpad שהתקבל.

חריגות

exception onewire.OneWireError

נזרקת כאשר פעולת 1-Wire נכשלת. כיום נזרקת על ידי OneWire.reset() כאשר required הוא True ואף התקן עבד אינו מגיב לפולס האיפוס.