lớp Signal -- điều khiển và cảm nhận thiết bị I/O bên ngoài

Lớp Signal là một phần mở rộng đơn giản của lớp Pin. Không giống như Pin, chỉ có thể ở trạng thái "tuyệt đối" 0 và 1, Signal có thể ở trạng thái "được kích hoạt" (bật) hoặc "không được kích hoạt" (tắt), trong khi bị đảo ngược (tích cực thấp) hoặc không. Nói cách khác, nó thêm hỗ trợ đảo ngược logic vào chức năng Pin. Mặc dù đây có vẻ là một bổ sung đơn giản, nhưng đây chính xác là những gì cần thiết để hỗ trợ một loạt rộng các thiết bị kỹ thuật số đơn giản theo cách di động trên các bo mạch khác nhau, đây là một trong những mục tiêu chính của MicroPython. Bất kể người dùng khác nhau có đèn LED tích cực cao hay tích cực thấp, rơle thường mở hay thường đóng -- bạn có thể phát triển một ứng dụng duy nhất, trông đẹp, hoạt động với từng loại trong số chúng, và nắm bắt sự khác biệt cấu hình phần cứng trong vài dòng trong tệp cấu hình của ứng dụng.

Ví dụ:

from machine import Pin, Signal

# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)

# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)

# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)

# Now lighting up them looks the same
led1.value(1)
led2.value(1)

# Even better:
led1.on()
led2.on()

Dưới đây là hướng dẫn khi nào nên sử dụng Signal vs Pin:

  • Sử dụng Signal: Nếu bạn muốn điều khiển các thiết bị bật/tắt đơn giản (bao gồm cả PWM phần mềm!) như đèn LED, bộ chỉ thị đa phân đoạn, rơle, còi, hoặc đọc các cảm biến nhị phân đơn giản, như nút bấm thường mở hoặc thường đóng, kéo cao hoặc kéo thấp, công tắc Reed, bộ phát hiện độ ẩm/lửa, v.v. Tóm lại, nếu bạn có thiết bị/cảm biến vật lý thực yêu cầu truy cập GPIO, bạn có thể nên sử dụng Signal.

  • Sử dụng Pin: Nếu bạn triển khai giao thức hoặc bus cấp cao hơn để giao tiếp với các thiết bị phức tạp hơn.

Sự phân tách giữa Pin và Signal xuất phát từ các trường hợp sử dụng ở trên và kiến trúc của MicroPython: Pin cung cấp chi phí overhead thấp nhất, điều này có thể quan trọng khi dùng giao thức bit-banging. Nhưng Signal thêm tính linh hoạt bổ sung trên Pin, với chi phí overhead nhỏ (nhỏ hơn nhiều so với khi bạn triển khai sự khác biệt thiết bị tích cực cao vs tích cực thấp trong Python thủ công!). Ngoài ra, Pin là đối tượng cấp thấp cần được triển khai cho từng bo mạch được hỗ trợ, trong khi Signal là đối tượng cấp cao có sẵn miễn phí khi Pin được triển khai.

Nếu còn nghi ngờ, hãy thử Signal! Một lần nữa, nó được cung cấp để giúp các nhà phát triển không cần xử lý sự khác biệt tẻ nhạt như tín hiệu tích cực thấp vs tích cực cao, và cho phép người dùng khác chia sẻ và thưởng thức ứng dụng của bạn, thay vì bị thất vọng vì nó không hoạt động với họ đơn giản vì đèn LED hoặc rơle của họ được nối dây theo cách hơi khác.

Constructors

class machine.Signal(pin_obj: Pin, *, invert: bool = False)
class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)

Tạo một đối tượng Signal. Có hai cách để tạo nó:

  • Bọc một đối tượng Pin hiện có -- phổ quát, hoạt động trên bất kỳ bo mạch nào.

  • Truyền trực tiếp các đối số constructor của Pin -- các đối số vị trí và từ khóa giống nhau được chấp nhận bởi Pin được chuyển tiếp đến một Pin được tạo nội bộ. Có sẵn trên nhiều nhưng không phải tất cả các bo mạch.

Các đối số:

  • pin_obj -- một thể hiện Pin hiện có để bọc.

  • pin_args / pin_kwargs -- các đối số để chuyển tiếp đến constructor Pin khi tạo chân cơ bản nội tuyến.

  • invert -- nếu True, tín hiệu bị đảo ngược (tích cực thấp).

Methods

value(x: Any = None, /) int | None

Phương thức này cho phép thiết lập và lấy giá trị của tín hiệu, tùy thuộc vào việc đối số x có được cung cấp hay không.

Nếu đối số bị bỏ qua thì phương thức này lấy mức tín hiệu, 1 nghĩa là tín hiệu được kích hoạt (hoạt động) và 0 - tín hiệu không hoạt động.

Nếu đối số được cung cấp thì phương thức này thiết lập mức tín hiệu. Đối số x có thể là bất cứ thứ gì chuyển đổi thành boolean. Nếu nó chuyển đổi thành True, tín hiệu hoạt động, nếu không thì không hoạt động.

Sự tương ứng giữa tín hiệu đang hoạt động và mức logic thực tế trên chân cơ bản phụ thuộc vào việc tín hiệu có bị đảo ngược (tích cực thấp) hay không. Đối với tín hiệu không đảo ngược, trạng thái hoạt động tương ứng với mức logic 1, không hoạt động - với mức logic 0. Đối với tín hiệu đảo ngược/tích cực thấp, trạng thái hoạt động tương ứng với mức logic 0, trong khi không hoạt động - với mức logic 1.

on() None

Kích hoạt tín hiệu.

off() None

Hủy kích hoạt tín hiệu.