【第七节】ESP32-S3 霍尔传感器应用实战:磁场检测与蜂鸣器控制
🚀 ESP32-S3 霍尔传感器应用实战:磁场检测与蜂鸣器控制
本文介绍了如何基于 ESP32-S3 实现霍尔传感器的磁场检测,并在检测到磁场变化时控制蜂鸣器发声及 GPIO 信号输出控制的应用。
🧩 一、硬件连接说明
元件 | 连接引脚(GPIO) | 说明 |
---|---|---|
霍尔传感器 | GPIO21 | 检测磁场变化(HIGH 表示磁场存在) |
无源蜂鸣器 | GPIO42 | 响应磁场检测发出提示音 |
控制输出引脚 | GPIO4 | 可外接继电器、LED等控制设备 |
🔧 二、功能说明
- 当霍尔传感器检测到磁场(GPIO21为HIGH)时:
- GPIO4 输出拉低;
- 蜂鸣器响起 500ms;
- 随后 GPIO4 拉高、蜂鸣器关闭。
🧠 三、完整代码与说明
const int hallEffectPin = 21; // 霍尔开关连接的GPIO引脚
const int buzzerPin = 42; // 无源蜂鸣器连接的GPIO引脚
const int controlPin = 4; // 控制信号的GPIO引脚
const int buzzerFrequency = 1000; // 蜂鸣器播放的频率(Hz)
const int buzzerDuration = 500; // 蜂鸣器响的持续时间(毫秒)unsigned long buzzerStartTime = 0; // 蜂鸣器开始响的时间
bool buzzerPlaying = false; // 蜂鸣器是否正在播放声音void setup() {pinMode(hallEffectPin, INPUT); // 设置霍尔开关引脚为输入pinMode(controlPin, OUTPUT); // 设置控制引脚为输出digitalWrite(controlPin, HIGH); // 默认将GPIO7设为高电平// 初始化串口Serial.begin(115200);// 初始化LEDC模块ledcSetup(0, buzzerFrequency, 8); // 通道0,频率1000Hz,分辨率8位ledcAttachPin(buzzerPin, 0); // 将蜂鸣器引脚绑定到通道0Serial.println("系统初始化完成");
}void loop() {// 读取霍尔开关的状态bool hallState = digitalRead(hallEffectPin);Serial.println(hallState);// 如果霍尔传感器未检测到磁场if (!buzzerPlaying && (hallState == HIGH)) {Serial.println("检测到磁场");digitalWrite(controlPin, LOW); // 拉低GPIO4ledcWriteTone(0, buzzerFrequency); // 播放蜂鸣器声音buzzerStartTime = millis();buzzerPlaying = true;}// 超时关闭蜂鸣器和恢复GPIO状态if (buzzerPlaying && (millis() - buzzerStartTime >= buzzerDuration)) {ledcWriteTone(0, 0); // 关闭蜂鸣器digitalWrite(controlPin, HIGH); // 恢复GPIO为高电平buzzerPlaying = false;Serial.println("恢复GPIO7为高电平");}
}
🔍 四、项目亮点
- 利用霍尔传感器检测磁场变化,适用于门禁、磁性旋转测量等场景;
- 控制引脚可接电机/继电器,实现联动控制;
- 使用
LEDC
模块精确控制无源蜂鸣器发声; - 结构清晰,适合嵌入式新手学习 GPIO 控制和状态响应机制。
📌 五、总结
本文展示了一个典型的基于 ESP32-S3 的传感器触发响应控制系统。通过霍尔传感器检测磁场,并触发蜂鸣器发声及控制引脚输出,为实际工程中“接近检测”“磁控响应”等提供了基础框架。
欢迎将本项目扩展到更多控制场景中,如加计数逻辑、BLE 通知、状态记录等!