ESP32, IOT物聯網

【ESP32教學】第五篇:GPIO數位輸入原理與按鈕控制LED實作

一、 實驗說明:什麼是數位訊號輸入(Digital Input)?

在上一篇我們學會了用 GPIO 控制外部 LED 的「輸出」,這一篇我們要讓 ESP32 具備感應外界訊號的能力!

數位輸入(Digital Input)是指讓 ESP32 去偵測某個腳位目前的電壓狀態:

  • 偵測到 3.3V 高電位:程式會讀取到 HIGH (1)。

  • 偵測到 0V 低電位:程式會讀取到 LOW (0)。

本實驗我們將使用最常見的「按鈕開關」作為輸入訊號源。當我們按下按鈕時,改變輸入腳位的電位狀態,進而控制 LED 燈的明暗。這是所有感測器開關、防盜偵測與硬體互動的底層核心邏輯!

 

二、 實驗材料準備清單

本篇實作專案所需的硬體元件如下:

  • ESP32 開發板

  • 麵包板 (Breadboard)

  • 按鈕開關 (Push Button)

  • 直插LED

  • 220Ω 或 330Ω 電阻

  • 10kΩ 電阻

  • 杜邦跳線

  •  USB傳輸線

🛒  還沒有材料嗎? 歡迎直接購買米羅為您搭配好的 ESP32 物聯網應用學習套件,新手零基礎也能輕鬆上手!

 

三、 核心知識:為什麼需要上拉或下拉電阻?

初學者在做按鈕實驗時,常會遇到「沒按按鈕,LED 卻自己亂閃」的靈異現象。這是因為當按鈕沒有按下時,該 GPIO 腳位處於懸空狀態(Floating),容易受到環境中的電磁雜訊干擾,導致電位在 0 與 1 之間隨機跳動。

為了解決這個問題,我們必須使用電阻將腳位「強行固定」在已知狀態:

  1. 下拉電阻(Pull-down):將腳位透過電阻接地(GND),平時維持 LOW。按鈕按下時導通 3.3V,電位變成 HIGH

  2. 上拉電阻(Pull-up):將腳位透過電阻接 VCC(3.3V),平時維持 HIGH。按鈕按下時接地,電位變成 LOW

 

按鍵開關大家都應該比較了解,只有開與關兩種簡單的狀態,屬於數位訊號輸入元件,按下時為閉合(導通)狀態。

4pin button

 

四、 實作實驗程式碼與測試

線路確認無誤後,請將以下程式碼複製到 Arduino IDE 中並上傳:

1. 範例程式碼

int ledpin=16;
int inpin=15;
int val;
void setup()
{
  pinMode(ledpin,OUTPUT);
  pinMode(inpin,INPUT);
}
void loop()
{
  val=digitalRead(inpin);
  if(val==LOW)
  { 
    digitalWrite(ledpin,LOW);
  }
  else
  { 
    digitalWrite(ledpin,HIGH);
  }
}

 

程式說明:

  • 第 1 列定義數位接口GPIO16 Pin 。
  • 第 2 列定義數位接口GPIO15 Pin 。
  • 第 3 列定義變數val。
  • 第 6 列定義LED Pin為輸出Pin。
  • 第 7 列定義按鍵 Pin為輸入Pin。
  • 第 11 列讀取數位接口GPIO15 Pin電位值賦給val。
  • 第 12~19 列檢測按鍵是否按下,按鍵按下時LED亮起。

 

2. 燒錄與操作測試

  1. 點擊 Arduino IDE 的 [上傳 (Upload)] 按鈕。

  2. 上傳完畢後,用手指按下麵包板上的按鈕,外接的 LED 燈便會立刻同步點亮;放開按鈕,LED 燈隨即熄滅!

 

五、 初學者常見卡關問題與排錯指南(Troubleshooting)

  • Q:按下按鈕,LED 卻完全沒有反應?

          按鈕腳位接錯:四腳輕觸按鈕內部是兩兩導通的,請確認您杜邦線接的是「按下才會導通」的那一組對角腳位,若接錯了可能會變成恆亮或恆滅。

  • Q:什麼是按鍵彈跳(Debounce)?

    • 在實際應用中,機械按鈕在按下的瞬間,金屬片會產生微小的物理彈跳,導致晶片在百萬分之一秒內誤以為按鈕被「快速狂按了數次」。如果您的專案需要按一下切換一次狀態,使用 delay() 或計時器來進行「軟體除彈跳(Debounce)」,讓按鈕偵測更精準!

 

六、 結語與下一篇教學

恭喜你!到這一篇為止,你已經完整掌握了 ESP32 GPIO 最核心的「數位輸出」與「數位輸入」技術。有了這兩大基石,你就能自由發揮創意控制各種開關了!下一篇教學,我們將進入更精采的單元,學習如何讀取連續變化的環境數值——「類比輸入(Analog Input)」!

👉 上一篇回顧【ESP32教學】第四篇:GPIO數位輸出與LED燈程式控制實作

👉 下一篇預告【ESP32教學】第六篇:蜂鳴器控制與音調頻率播放實作 

 

 

相關文章