ESP32控制蜂鸣器

lcysts
11
2025-08-03

什么是蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于各类等电子产品中作发声器件,相对于扬声器控制简单,方便使用。

台式电脑的主机开机会"滴"一声、洗衣机按下按键及洗衣完成都会有声响,以上这些声音都是通过蜂鸣器来发出的,通过这些可与用户形成一定的交互。

蜂鸣器的类别

蜂鸣器可以分为有源蜂鸣器和无源蜂鸣器,但是注意,这里的有源和无源并非指电源,而是指震荡源。无论是有源蜂鸣器还是无源蜂鸣器,它们本质上都是由脉冲信号驱动的,比如下面这样的脉冲信号

但是区别就在于:

有源蜂鸣器内部本身就自带震荡源,只需要外部接上直流电,这个内置的震荡源就能将稳定的电压值,转换成固定频率的脉冲信号,所以有源蜂鸣器的使用很简单,上电鸣叫,断电停止;

温馨提示

由于有源蜂鸣器内置的震荡源是固定不变的,所以它产生的脉冲信号频率也是固定的,所以使用有源蜂鸣器时,它只能发出一个音调的声音

对于无源蜂鸣器,其内部没有内置的震荡源,所以需要外部输入脉冲信号才能驱动,比如通过上一节讲解的PWM信号输入,不同的占空比和频率,输出的音调将不一样。

经过上面的对比可知,有源蜂鸣器使用简单,但是效果单一,无源蜂鸣器稍微麻烦,但是可以发出不同音调的声音。

有源蜂鸣器和无源蜂鸣器的识别

有源蜂鸣器

有源蜂鸣器整个元件是密封的,区分正负极

无源蜂鸣器

无源蜂鸣器漏出电路板(穿开裆裤的是无源),不区分正负极

ESP32驱动蜂鸣器

驱动有源蜂鸣器

将ESP32 23号引脚连接到蜂鸣器正极,GND连接到蜂鸣器负极,然后间断性改变23号引脚电平值,可以让蜂鸣器间断性鸣叫

#include <Arduino.h>

#define BUZZLE_PIN 23

void setup() {
    pinMode(BUZZLE_PIN, OUTPUT);
}

void loop() {
    digitalWrite(BUZZLE_PIN, HIGH);
    delay(1000);
    digitalWrite(BUZZLE_PIN, LOW);
    delay(1000);
}

驱动无源蜂鸣器

可以使用analogWrite函数输出PWM信号,驱动无源蜂鸣器,并且在循环内逐渐增大PWM占空比,注意听蜂鸣器音调变化

#include <Arduino.h>

#define PIN 23  // 蜂鸣器引脚

void setup() {
    pinMode(PIN, OUTPUT);
}

void loop() {
    // 不断增加PWM占空比,注意听音调变化
    for (int i = 0; i < 255; i += 10) {
        analogWrite(PIN, i);
        delay(3000);
    }
}

动物装饰