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 ואף התקן עבד אינו מגיב לפולס האיפוס.