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:

การเรียก 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 ที่เหมาะสม ดู การแปลงระดับสัญญาณ สำหรับวงจร