National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

點亮 LED:machine.Pin

輸出腳位、限流電阻與讓 LED 閃爍
Interaction 25 minute(s)

Learning Objectives

  • 用 machine.Pin 把一支 GPIO 腳位設成輸出,寫 1 與 0 控制 LED 亮暗
  • 說明 LED 為什麼要串一顆限流電阻,以及長腳、短腳怎麼接
  • 用 time.sleep 控制亮暗的時間,寫出永遠閃爍的程式
  • 依序控制多顆 LED,做出紅綠燈的時序

寫程式控制真實世界的第一步

在電腦上寫程式,結果出現在螢幕上;在微控制器上寫程式,結果會出現在真實世界:燈會亮、馬達會轉、喇叭會響。 這些事情的起點都一樣:讓一支腳位輸出高電位或低電位。

這一課要回答:

  1. 程式怎麼讓 ESP32 的某一支腳位「通電」?
  2. LED 要怎麼接,才不會燒掉 LED 或開發板?
  3. 微控制器的程式為什麼常常寫成永遠不會結束的迴圈?

GPIO:可以由程式決定用途的腳位

ESP32 開發板兩側的金屬針腳,大部分是 GPIO(General Purpose Input/Output,通用輸入輸出)。 「通用」的意思是:同一支腳位可以由程式設定成輸出(送出電壓去控制東西)或輸入(讀取外面的電壓,下一課會用到)。

設成輸出時,腳位只有兩種狀態:

程式寫入 腳位電壓 稱為
1 約 3.3V 高電位(HIGH)
0 約 0V 低電位(LOW)

ESP32 的工作電壓是 3.3V,所以「高電位」是 3.3V,不是 5V。之後接感測器或模組時,要確認它們能接受 3.3V 的訊號。

LED 怎麼接

LED(發光二極體)有兩支腳,電流只能從一個方向流過:

  • 長腳是正極(陽極),接到 GPIO 腳位
  • 短腳是負極(陰極),接到 GND(接地)

LED 本身的電阻很小,直接接在 3.3V 上,電流會大到燒壞 LED,也可能傷到開發板的腳位。所以一定要串聯一顆限流電阻。 電阻值可以這樣估算(「自造者入門」軌第 03 課會詳細算):

電阻 =(電源電壓 - LED 的順向電壓)÷ 想要的電流
     =(3.3V - 2.0V)÷ 0.01A
     = 130Ω   → 選用常見、略大一點的 220Ω

紅色 LED 的順向電壓大約 2V,藍色、白色大約 3V,實際數值以 LED 的規格為準。電阻大一點只是比較暗,比電阻太小安全。

GPIO23 ──[ 220Ω ]──▶|── GND
                  (LED:長腳在左、短腳在右)

許多 ESP32 開發板在 GPIO2 接了一顆板上 LED,不用接線就能測試;但不是每一塊板子都有,也不一定在 GPIO2,要看板子的說明。

微控制器的程式為什麼不結束

電腦上的程式做完事就結束,回到作業系統。微控制器通常只做一件事,而且要一直做: 溫度計要一直量、紅綠燈要一直換。所以 MicroPython 的程式常常寫成:

while True:
    # 讀感測器、控制輸出、等一下

ESP32 開機時會自動執行存在板子上的 main.py(第 16 課會介紹),裡面通常就是這樣的無窮迴圈,直到斷電或按下重設鍵。

下一個範例只有四行,用 not 把目前的狀態反過來寫回去,LED 就會一直閃。模擬器不能真的跑到永遠, 所以電路規格設定只模擬 2 秒,時間到就停下來,像把電源拔掉一樣。

逐步看:永遠閃爍

每執行一次第 7 行,LED 就換一次狀態。看最後一步:模擬時間到 2 秒時程式停在 sleep 裡,不是程式出錯。

逐步看:紅綠燈

三顆 LED 各接一支腳位。用一個函式一次設定三顆燈,再等一段時間,程式比較好讀,也不容易漏掉某一顆。

互動練習:自己寫閃爍程式

在下面改程式,按「模擬執行」。模擬結束後會照真實速度播放,也可以拖曳時間軸。依序完成任務:

  1. 先直接執行起始程式,看 LED 閃。
  2. 讓 LED 在 5 秒內至少閃 8 次。
  3. 讓 LED 每 0.4 秒亮一次(亮 0.2 秒、暗 0.2 秒)。
  4. 回答一個問題。

小測驗:腳位與接線

1.

執行 led = Pin(23, Pin.OUT) 之後再執行 led.value(1),GPIO23 的電壓大約是多少?

2.

紅色 LED 的順向電壓約 2V,接在 3.3V 的腳位上,想讓電流約 10 mA,限流電阻大約要多少?

3.

LED 接反了(長腳接 GND、短腳接 GPIO),寫入 1 時會怎樣?

第 1 次作答

小測驗:程式與時間

1.

下面的程式在模擬器裡執行,會印出什麼?

from machine import Pin
led = Pin(23, Pin.OUT)
led.value(1)
led.value(not led.value())
print(led.value())
2.

while True: 迴圈裡只有 led.value(1)、time.sleep(0.3)、led.value(0)、time.sleep(0.7),LED 一秒內亮多久?

第 1 次作答

重點整理

  • Pin(編號, Pin.OUT) 把 GPIO 設成輸出;value(1) 輸出 3.3V,value(0) 輸出 0V,value() 讀目前的狀態。
  • LED 長腳接 GPIO、短腳接 GND,一定要串限流電阻(3.3V 下常用 220Ω)。
  • time.sleep(秒) 讓程式暫停;亮與暗各等多久,決定閃爍的節奏。
  • 微控制器的程式通常寫成 while True 無窮迴圈,一直做同一件事。
  • 多顆 LED 依序設定時,先設好全部的燈再等待,時序比較清楚。

下一課讀取按鈕:腳位設成輸入,讓程式知道外面發生了什麼事。

這一課完成了!
Next lesson:按鈕、中斷與彈跳
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。