一、 實驗說明:讓 ESP32 發出聲音的聲音訊號輸出
在前面的教學中,我們學會了用 GPIO 控制視覺上的 LED 燈。這一篇我們要為 ESP32 的專題加入聲音回饋——使用蜂鳴器(Buzzer)!
無論是智慧家庭的按鍵提示音、儀器的過熱警報器、或是簡易的音樂播放器,蜂鳴器都是成本最低且最實用的音訊元件。本實驗我們將帶大家認識蜂鳴器的種類,並克服 ESP32 在聲音控制上的硬體特性,讓它發出多變的音調與旋律。
二、 實驗材料準備清單
本篇實作專案所需的硬體元件如下:
ESP32 開發板麵包板 (Breadboard)
- 主動式有源蜂鳴器(Active Buzzer)
被動式無源蜂鳴器 (Passive Buzzer)
杜邦跳線
USB 傳輸線
- 10kΩ直插電阻
- 按鍵開關
🛒 還沒有材料嗎? 歡迎直接購買米羅為您搭配好的 ESP32 物聯網應用學習套件,新手零基礎也能輕鬆上手!
三、 核心知識:主動式 vs. 被動式蜂鳴器,你選對了嗎?
初學者去電子材料行買蜂鳴器,最常買錯種類。蜂鳴器主要分為以下兩種:
主動式蜂鳴器(Active Buzzer):內建震盪源。只要通電(GPIO 輸出
HIGH),它就會自動發出固定的單音(通常是嗶~的單一高音)。優點是寫程式極簡單,缺點是無法改變音調、無法彈奏音樂。被動式蜂鳴器(Passive Buzzer):內部沒有震盪源。必須由微控制器輸入不同頻率的方形波訊號(PWM),它才會因相應的震動發出不同的音高(如:do re mi fa so)。如果想要播音樂、做豐富的警報聲,必須使用被動式蜂鳴器。
四、 電路接線與實作步驟
五、 實作實驗程式碼:
1. 程式(有源蜂鳴器):
int buzzPin = 15;
void setup()
{
pinMode(buzzPin, OUTPUT);
}
void loop()
{
digitalWrite(buzzPin, HIGH); //有源蜂鳴器響起
delay(2000);
digitalWrite(buzzPin, LOW); //有源蜂鳴器關閉
delay(2000);
}
2. 程式(無源蜂鳴器):
int buzzer=15;
void setup()
{
pinMode(buzzer,OUTPUT);
}
void loop()
{
int i;
while(1)
{
for(i=0;i<50;i++)
{
digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);
delay(1);
}
delay(1000);
for(i=0;i<100;i++)
{
digitalWrite(buzzer,HIGH);
delay(3);
digitalWrite(buzzer,LOW);
delay(3);
}
delay(1000);
}
}
程式說明:
針對無源蜂鳴器程式碼說明如下
- 第 1 列設置控制蜂鳴器的數位接口GPIO15 Pin。
- 第 3 列設置數位I\O腳模式,buzzer GPIO15 Pin為數位輸出Pin 。
- 第 8 列宣告變數。
- 第 11~17 列輸出一個頻率的短聲音。
- 第 18 列延遲1秒。
- 第 19~25 列輸出另一個頻率的長聲音。
- 第 26 列延遲1秒。
下載完程序就可以聽到ESP32的數位接口GPIO15 Pin外接蜂鳴器在發出一長一短的聲音。
3. 進階範例 – 電子門鈴(有源蜂鳴器):
程式(有源蜂鳴器):
int buzzPin=15;
int inpin=16;
int val;
void setup()
{
pinMode(buzzPin,OUTPUT);
pinMode(inpin,INPUT);
}
void loop()
{
val=digitalRead(inpin);
if(val==LOW)
{
digitalWrite(buzzPin,LOW);
}
else
{
digitalWrite(buzzPin,HIGH);
}
}
4. 燒錄與操作測試
點擊 Arduino IDE 的 [上傳 (Upload)] 按鈕。
六、 初學者常見卡關問題與排錯指南(Troubleshooting)
Q:程式上傳成功了,為什麼蜂鳴器只有微弱的「搭、搭」聲,或是完全不響?
買到錯誤種類:請確認您使用的是「被動式蜂鳴器」。如果誤用了主動式蜂鳴器卻給它高頻訊號,它就只會發出微弱的雜音。
接腳接反:蜂鳴器是有極性的,請重新確認正極(有標記 + 號或較長的一側)。
七、 結語與下一篇教學
恭喜你!到這一篇為止,你不僅掌握了視覺的 LED 控制,現在連聽覺的蜂鳴器音效控制也難不倒你了!學會了改變頻率後,只要對照音樂的「音高頻率表」,你就能讓 ESP32 彈奏出動人的生日快樂歌或聖誕歌曲囉!下一篇教學,我們將把焦點轉向另一個經典的基礎控制——「類比輸入(Analog Input)」與光敏電阻,開始讀取環境中的連續數值變化!
👉 上一篇回顧:【ESP32教學】第五篇:GPIO數位輸入原理與按鈕控制LED實作
👉 下一篇預告:【ESP32教學】第七篇:類比輸入(ADC)與光線感測器控制光感小夜燈實作



