ESP32 有源蜂鸣器(MH-FMG)

作者:追风剑情 发布于:2026-6-10 21:35 分类:物联网

硬件接线
蜂鸣器模块引脚 连接 ESP32 引脚 说明
VCC 3.3V 或 5V 建议接 3.3V(多数模块兼容)
GND GND 共地
I/O GPIO 23 任意空闲 GPIO,高电平触发

注意:有源蜂鸣器通电即响,只要 I/O 引脚输出高电平(3.3V)就会发声,低电平停止。

buzzer_control.h

#ifndef BUZZER_CONTROL_H
#define BUZZER_CONTROL_H

#include <stdbool.h>

// 初始化蜂鸣器 GPIO
void buzzer_init(void);

// 设置蜂鸣器状态 (true: 鸣叫, false: 停止)
void buzzer_set(bool state);

// 短暂鸣叫一次(持续指定毫秒)
void buzzer_beep_once(int duration_ms);

#endif

buzzer_control.c

#include "buzzer_control.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

#define BUZZER_GPIO  23   // 可修改为你实际使用的 GPIO

static const char *TAG = "BUZZER";

void buzzer_init(void)
{
    gpio_config_t io_conf = {
        .pin_bit_mask = (1ULL << BUZZER_GPIO),
        .mode = GPIO_MODE_OUTPUT,
        .pull_up_en = GPIO_PULLUP_DISABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE
    };
    gpio_config(&io_conf);
    // 初始状态为低电平,不发声
    gpio_set_level(BUZZER_GPIO, 0);
    ESP_LOGI(TAG, "Buzzer initialized on GPIO %d", BUZZER_GPIO);
}

void buzzer_set(bool state)
{
    gpio_set_level(BUZZER_GPIO, state ? 1 : 0);
    ESP_LOGD(TAG, "Buzzer %s", state ? "ON" : "OFF");
}

void buzzer_beep_once(int duration_ms)
{
    buzzer_set(true);
    vTaskDelay(pdMS_TO_TICKS(duration_ms));
    buzzer_set(false);
}

标签: IoT

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号