Search Code

ESP32 教學 14/55 - 使用 SunFounder ESP32 IoT 學習套件播放自訂音樂音符

ESP32 教學 14/55 - 使用 SunFounder ESP32 IoT 學習套件播放自訂音樂音符

喺呢個教學入面,我哋會學吓點樣用SunFounder ESP32微控制器,透過一個被動蜂鳴器同埋一個晶體管嚟播放音樂音符。呢個項目嘅目的係示範點樣透過ESP32嘅GPIO引腳控制蜂鳴器,用特定頻率嚟產生聲音。

我哋會將一個被動蜂鳴器連接到ESP32,咁樣就可以根據我哋提供嘅頻率嚟產生唔同嘅音樂音符。呢個設置包括用一個晶體管嚟高速開關蜂鳴器,產生我哋可以聽到嘅聲波。如果想進一步了解呢個項目,記得睇吓條片(片入面00:30)。

ESP32-13-buzzer-schematic

硬件講解

呢個項目用到嘅主要元件包括SunFounder ESP32微控制器、一個被動蜂鳴器同埋一個NPN晶體管(2N8050)。ESP32係一塊功能強大嘅開發板,內置Wi-Fi同藍牙功能,令到佢好適合用喺各種物聯網應用。喺呢個情況,佢會產生信號嚟控制蜂鳴器。

被動蜂鳴器嘅運作原理係當有交流電壓施加喺佢上面時就會產生聲音。同有內置振盪器嘅主動蜂鳴器唔同,被動蜂鳴器需要外部信號先至可以產生聲音。晶體管扮演開關嘅角色,令到ESP32可以控制蜂鳴器而唔使直接供電畀佢,確保唔會超過微控制器嘅電流額定值。

S87050_transistor

數據手冊詳情

製造商 SunFounder
零件編號 被動蜂鳴器
工作電壓 3.3 V - 5 V
共振頻率 2 kHz - 4 kHz
電流消耗 ≤ 30 mA
聲壓級 ≥ 70 dB
封裝 通孔式
備註/變體

 

  • 連接蜂鳴器時要確保極性正確。
  • 要喺晶體管基極加一個限流電阻。
  • 將蜂鳴器連接到符合其電壓額定值嘅電源。
  • 小心唔好超過晶體管嘅最大電流額定值。
  • 保持接線整齊,避免短路。
  • 上載程式碼之前先測試電路,避免損壞元件。
  • 用麵包板嚟方便連接元件。
  • 如果用到按鈕,記得做防彈跳處理。
  • 如果晶體管用喺高電流情況,考慮加散熱器。

接線指示

ESP32-13-buzzer-wriing

要接線,首先將被動蜂鳴器嘅正極端子連接到ESP32嘅3.3V引腳。蜂鳴器嘅負極端子應該連接到NPN晶體管嘅集電極。晶體管嘅發射極引腳就要接到ESP32嘅地線(GND)。

跟住,將一個1 kΩ電阻由晶體管嘅基極連接到ESP32嘅GPIO引腳14。呢個電阻用嚟限制流入晶體管基極嘅電流。最後,確保所有接地連接都綁埋一齊,為電路提供一個共同參考點。

程式碼示例同講解

const int buzzerPin = 14; // 蜂鳴器引腳

void setup()
{
  pinMode(buzzerPin, OUTPUT); // 設定為輸出
}

喺程式碼入面,我哋定義一個常數變數buzzerPin,設定為14,表示連接到晶體管基極嘅GPIO引腳。喺setup()函數入面,我哋將呢個引腳設定為OUTPUT,令到ESP32可以控制蜂鳴器。

void loop()
{
  for (int i = 0; i < 50; i++) // 循環50次,每次播放一個短音
  {
    digitalWrite(buzzerPin, HIGH); // 設定為HIGH令蜂鳴器發聲
    delay(3); // 等待3毫秒
    digitalWrite(buzzerPin, LOW); // LOW關閉蜂鳴器
    delay(3); // 
  }
  delay(1000); // 等待1秒先開始下一個循環
}

loop()函數入面有一個for循環,會運行50次。每次迭代都會快速開關蜂鳴器,產生一個音調。3毫秒嘅延遲控制蜂鳴器啟動同關閉嘅時間,而循環尾段嘅1秒延遲就提供一個停頓,然後先重複。

示範/預期效果

一旦完成接線同上載程式碼,你應該會聽到蜂鳴器產生一連串嘅短音。如果蜂鳴器冇聲,檢查吓你嘅連接,特別係晶體管嘅方向同電阻值。確保程式碼用咗正確嘅引腳,同埋ESP32有正確供電。

喺示範期間,如果你遇到問題,可能係因為接線錯誤或者用錯咗蜂鳴器嘅引腳。對照指示檢查接線,並確保電源充足(片入面08:15)。

影片時間戳

  • 00:00 開始
  • 1:52 項目介紹
  • 4:11 接線講解
  • 8:11 喺Arduino IDE選擇ESP32板同COM端口
  • 9:53 Arduino程式碼講解
  • 13:17 項目示範
  • 13:58 項目2程式碼同示範

圖片

ESP32-13-buzzer-wriing
ESP32-13-buzzer-wriing
ESP32-13-buzzer-schematic
ESP32-13-buzzer-schematic
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
S87050_transistor
S87050_transistor
813-ESP32 Tutorial 14/55- Arduino code for custom music tone
語言: C++
const int buzzerPin = 14; //buzzer pin
const int resolution = 8; 

// Frequencies of the 7 musical notes (in Hz)
int frequencies[] = {262, 294, 330, 349, 392, 440, 494};


// Function to play a frequency on the buzzer for a given duration
void playFrequency(int frequency, int duration) {
  ledcWriteTone(buzzerPin, frequency); // Start the tone
  delay(duration); // Wait for the specified duration
  ledcWriteTone(buzzerPin, 0); // Stop the buzzer
}

void setup() {
  ledcAttach(buzzerPin, 2000, 8); // Set up the PWM pin
}

void loop() {
  for (int i = 0; i < 7; i++) {
    playFrequency(frequencies[i], 300); // Play each note for 300ms
    delay(50); // Add a brief pause between the notes
  }
  delay(1000); // Wait for 1 second before replaying the sequence
}

資源與參考資料

文件📁

数据表 (pdf)