onewire --- โปรโตคอลบัส 1-Wire

โมดูล onewire ใช้งานโปรโตคอล 1-Wire bus master ที่ใช้กับอุปกรณ์ต่างๆ เช่น เซนเซอร์อุณหภูมิ DS18x20 โดยใช้ machine.Pin เดียวที่กำหนดค่าเป็น open-drain เพื่อสื่อสารกับอุปกรณ์ slave หนึ่งตัวหรือมากกว่าบน shared bus

ตัวอย่าง:

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 bus master บน 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 หากอุปกรณ์ slave อย่างน้อยหนึ่งตัวตอบสนองด้วย presence pulse มิฉะนั้นคืนค่า 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 เพื่อระบุอุปกรณ์ที่มีรหัส ROM 64 บิตอยู่ใน rom (บัฟเฟอร์ขนาด 8 ไบต์)

scan() list[bytearray]

ค้นหาบัสและคืนค่ารายการรหัส ROM ขนาด 8 ไบต์ (หนึ่ง bytearray ต่ออุปกรณ์ที่ตรวจพบ) คืนค่ารายการว่างหากไม่มีอุปกรณ์

การตรวจสอบ cyclic redundancy:

crc8(data: bytes | bytearray) int

คำนวณ CRC 8 บิตแบบ Maxim/Dallas สำหรับ data ผลลัพธ์จะเป็น 0 เมื่อ data มีไบต์ CRC ท้ายที่ถูกต้องอยู่แล้ว ซึ่งสามารถใช้ตรวจสอบความถูกต้องของข้อมูล scratchpad ที่รับมาได้

ข้อยกเว้น

exception onewire.OneWireError

เกิดขึ้นเมื่อการดำเนินการ 1-Wire ล้มเหลว ปัจจุบันเกิดจาก OneWire.reset() เมื่อ required เป็น True และไม่มี slave ตอบสนองต่อพัลส์รีเซ็ต