3.7. GPIO เอาต์พุต¶
machine.LED ซ่อนการเดินสายของตัวแสดงสถานะในตัวของ camera ไว้ การขับฮาร์ดแวร์ ภายนอก ใดๆ เริ่มต้นด้วย machine.Pin ในโหมดเอาต์พุต -- อุปกรณ์ต่อพ่วงดิบที่อยู่เบื้องหลังการโต้ตอบ GPIO อื่นทุกประเภท
3.7.1. การขับพิน¶
สร้างพินด้วย Pin.OUT เพื่อทำให้เป็นเอาต์พุต จากนั้นกำหนดค่า:
from machine import Pin
led = Pin("P0", Pin.OUT)
led.on() # drive high (about 3.3 V)
led.off() # drive low (about 0 V)
สามวิธีที่เทียบเท่ากันในการตั้งค่าสถานะ ทั้งหมดใน machine.Pin:
pin.value(1)/pin.value(0)-- รูปแบบที่ชัดเจน
การเรียก value() โดยไม่มีอาร์กิวเมนต์จะอ่านค่าสถานะปัจจุบันของพินกลับมา -- ซึ่งใช้ได้กับทั้งอินพุตและเอาต์พุต
3.7.2. การขับ LED ภายนอก¶
LED สีแดงที่ 10 mA จาก 3.3 V ต้องการตัวต้านทานประมาณ 130 Ω ต่ออนุกรม (หน้าอิเล็กทรอนิกส์คำนวณตัวเลขไว้แล้ว) ต่อพิน P0 ผ่านตัวต้านทานนั้นไปยังแอโนดของ LED และต่อแคโทดของ LED ไปยังกราวนด์ ตัวอย่างการกระพริบ:
import time
from machine import Pin
led = Pin("P0", Pin.OUT)
while True:
led.on()
time.sleep_ms(500)
led.off()
time.sleep_ms(500)
LED จะสลับเปิดและปิดหนึ่งครั้งต่อวินาที กระแสผ่าน LED (และด้วยเหตุนี้ความสว่างของมัน) ถูกกำหนดโดยตัวต้านทาน สัดส่วนเปิด/ปิดควบคุมเฉพาะความถี่ที่มันติด ไม่ใช่ความสว่างขณะที่มันติดอยู่
Tip
Constructor รับค่าเริ่มต้นเป็น keyword argument: Pin("P0", Pin.OUT, value=0) กำหนดพินเป็นเอาต์พุตที่เริ่มต้นที่ low หากไม่มีอาร์กิวเมนต์นี้ พินจะอยู่ในสถานะเริ่มต้นใดก็ตามก่อนการเรียก value() ครั้งแรก
3.7.3. โหมด Open-drain¶
โหมด Pin.OUT เริ่มต้นเป็น push-pull: พินจะขับทั้งสูง (ไปยัง Supply) และต่ำ (ไปยังกราวนด์) อย่างแข็งขัน บางครั้งนั้นไม่ถูกต้อง ใช้ Pin.OPEN_DRAIN เมื่อพินควรดึงสายให้ต่ำหรือปล่อยมัน (float):
pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off() # actively drive low
pin.on() # release; an external pull-up brings the line high
การใช้งานหลักคือการแชร์สาย เอาต์พุต open-drain หลายตัวสามารถแชร์สายเดียวได้เพราะไม่มีตัวใดขับมันให้สูงอย่างแข็งขัน ตัวใดตัวหนึ่งสามารถดึงสายให้ต่ำได้ ถ้าทุกตัวปล่อย pull-up ภายนอกจะดึงสายให้สูง นี่คือรูปแบบการเดินสายที่อยู่เบื้องหลังบัสการสื่อสารที่แชร์กัน
Warning
Open-drain ไม่ใช่ วิธีแก้ปัญหาทั่วไปสำหรับการขับอุปกรณ์ที่มีแรงดันสูงกว่า การต่อพิน open-drain กับ pull-up ที่ 5 V ปลอดภัยบนพินที่ทนต่อ 5 V แต่จะทำลายพินที่ไม่ทนทานผ่านไดโอดป้องกันบนชิปทันทีที่พินปล่อยและสายลอยขึ้นไปถึง 5 V การส่งสัญญาณข้ามแรงดันต้องใช้ level shifter ที่เหมาะสม ดู การแปลงระดับสัญญาณ สำหรับวงจร