一、 實驗說明:讓 ESP32 讀取連續變化的電訊號!
在先前的專題中,我們多半是透過微控制器處理按鍵或開關的「數位訊號」(只有 0 與 1 的高低電位變化)。但在現實生活與物聯網應用中,有許多數據是連續變化的「類比訊號」(例如:燈光明暗、音量大小、溫度高低或旋鈕角度)。
本實驗我們將使用創客專案中最常見的可變電阻(電位器 Potentiometer),帶大家搞懂如何利用 ESP32 的 ADC(類比數位轉換器) 讀取連續電壓變化,並搭配 <analogWrite.h> 程式庫 實現 LED 燈光的滑順調光控制!
二、 實驗材料準備清單
本篇實作可變電阻調光專案所需的硬體元件如下:
ESP32 開發板
麵包板 (Breadboard)
可變電阻(電位器,建議使用 10kΩ)
LED 發光二極體
220Ω 限流電阻
杜邦跳線若干
USB 傳輸線
🛒 一次備齊創客工具!
歡迎直接購買米羅科技的 ESP32 物聯網應用學習套件,免去東奔西跑湊零件的煩惱。內含 DHT11感測器、各類感測器及基礎電子元件,是學校課堂教學與個人專案開發的最佳首選!
▼注意:假如使用下列程式碼發生編譯錯誤,則表示您目前安裝的ESP32函式庫較為新版,請務必將「#include <analogWrite.h>」這一行移除並重新編譯,則可編譯成功並正常運行。
三、 實作實驗程式碼:讀取旋鈕與調控 LED 明暗
請將以下程式碼複製到 Arduino IDE 中並上傳至 ESP32 開發板:
1. 範例程式碼
#include <analogWrite.h>
int potpin=36; // 可變電阻訊號線接在 ESP32 GPIO36 (VP / ADC1_CHANNEL_0)
int ledpin=15; // LED 燈接在 ESP32 GPIO15
int val=0; // 儲存可變電阻讀取值的變數
void setup()
{
pinMode(ledpin,OUTPUT); // 設定 GPIO15 為輸出模式
Serial.begin(9600); // 初始化 Serial 序列埠監控視窗,鮑率設定為 9600
}
void loop()
{
val=analogRead(potpin); // 讀取可變電阻的類比數值 (範圍 0 ~ 4095)
Serial.println(val); // 將讀取到的數值印在序列埠監控視窗
analogWrite(ledpin,val/16); // 將數值除以 16 換算為 0~255,輸出 PWM 控制 LED 亮度
delay(10); // 延遲 10 毫秒維持系統讀取穩定度
}
2. 燒錄與操作測試
點擊 Arduino IDE 的 「上傳 (Upload)」 按鈕。
開啟 「序列埠監控視窗 (Serial Monitor)」(鮑率設為 9600)。
順時針或逆時針旋轉可變電阻,監控視窗將顯示 0~4095 的數值變化,同時 LED 燈會隨著旋轉滑順變亮或變暗!
四、 初學者常見卡關問題與排錯指南(Troubleshooting)
1. 旋轉旋鈕時,序列埠監控視窗數字會變,但 LED 燈完全不亮?
LED 極性接反: LED 長腳為正極,必須連接至 GPIO15(透過限流電阻);短腳為負極,必須接在 GND。
杜邦線接觸不良: 請確認麵包板上的杜邦線是否有確實插緊在 GPIO15 腳位上。
2. 旋轉可變電阻時,數值跳動劇烈或完全無法降到 0?
電源端接錯: 請確認可變電阻兩端腳位是否分別插在 5V 與 GND。
避免使用 ADC2 腳位: 本範例選用的 GPIO 36 (ADC1) 非常穩定。若改用 ADC2 腳位(如 GPIO 2, 4, 12 等),當 ESP32 開啟 Wi-Fi 功能時會導致類比讀取受干擾或失效。
五、 結語與下一篇教學
恭喜你!成功掌握了使用可變電阻與 ESP32 ADC 類比輸入控制 LED 亮度的技巧。學會了類比訊號讀取後,你可以把前面幾篇學到的「DHT11 溫濕度數據」或「超音波測距數據」結合旋鈕控制,打造更多互動式的物聯網專題!下一篇教學,我們將帶大家解鎖更多實用的物聯網感測與控制專題!

