搜索代码

ESP32 教程 14/55 - 使用 SunFounder ESP32 IoT 学习套件播放自定义音乐音符

ESP32 教程 14/55 - 使用 SunFounder ESP32 IoT 学习套件播放自定义音乐音符

在本教程中,我们将学习如何使用SunFounder ESP32微控制器,通过无源蜂鸣器和晶体管播放音符。该项目旨在演示如何通过ESP32的GPIO引脚控制蜂鸣器,以特定频率生成声音。

我们将把一个无源蜂鸣器连接到ESP32,这样我们就可以根据提供的频率产生不同的音符。此设置包括使用晶体管高速开关蜂鸣器,从而产生我们能听到的声波。如需进一步了解该项目,请务必观看视频(视频中00:30处)。

ESP32-13-蜂鸣器原理图

硬件说明

本项目使用的主要组件包括SunFounder ESP32微控制器、一个无源蜂鸣器和一个NPN晶体管(2N8050)。ESP32是一款功能强大的开发板,内置Wi-Fi和蓝牙功能,使其适用于各种物联网应用。在本例中,它将生成信号来控制蜂鸣器。

无源蜂鸣器的工作原理是:当对其施加交变电压时产生声音。与带有内置振荡器的有源蜂鸣器不同,无源蜂鸣器需要外部信号才能发声。晶体管充当开关,使ESP32无需直接供电即可控制蜂鸣器,从而确保不超过微控制器的额定电流。

S87050_晶体管

数据手册详情

制造商 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()函数包含一个运行50次的for循环。每次迭代都会快速打开和关闭蜂鸣器,从而产生一个音调。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)