ESP32唤醒模式——多个GPIO模式

本文详细介绍了如何利用ESP32的GPIO 2和GPIO 15作为唤醒源进行深度睡眠模式的唤醒。通过修改示例代码,设置GPIO位掩码,并启用ext1唤醒源,当按钮被按下时,可以检测到触发唤醒的特定GPIO。实测中,通过串行显示器观察,验证了唤醒功能的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外部唤醒 – 多个 GPIO

现在,您应该能够使用不同的按钮唤醒 ESP32,并确定哪个按钮导致唤醒。在此示例中,我们将使用GPIO 2和GPIO 15作为唤醒源。

图解的

将两个按钮连接到 ESP32。在这个例子中,我们使用的是GPIO 2和GPIO 15,但您可以将按钮连接到任何 RTC GPIO。

在这里插入图片描述

法典

您需要对我们之前使用的示例代码进行一些修改:

  • 创建要使用的位掩码GPIO 15和GPIO 2.我们之前已经向您展示了如何执行此操作;
  • 启用 ext1 作为唤醒源;
  • 使用esp_sleep_get_ext1_wakeup_status()函数来获取触发唤醒的 GPIO。

下一个草图实现了所有这些更改。

/*
Deep Sleep with External Wake Up
=====================================
This code displays how to use deep sleep with
an external trigger as a wake up source and how
to store data in RTC memory to use it over reboots

This code is under Public Domain License.

Hardware Connections
======================
Push Button to GPIO 33 pulled down with a 10K Ohm
resistor

NOTE:
======
Only RTC IO can be used as a source for external wake
source. They are pins: 0,2,4,12-15,25-27,32-39.

Author:
Pranav Cherukupalli <[email protected]>
*/

#define BUTTON_PIN_BITMASK 0x8004 // GPIOs 2 and 15

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
   
   
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
   
   
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external si
### ESP32语音唤醒实现方案 ESP32系列芯片提供了强大的硬件和软件支持,用于实现实时语音唤醒功能。以下是关于如何利用ESP32及其相关库来完成这一目标的具体说明。 #### 1. 使用ESP-SR库中的Wake Word Engine ESP32的官方文档提供了一个名为`esp-skainet`的开源项目,其中包含了语音唤醒引擎的功能[^1]。该引擎允许开发者自定义唤醒词并将其集成到应用程序中。具体来说: - **唤醒词训练**:通过乐鑫提供的工具链,用户可以创建自己的唤醒模型。这些模型经过优化后可以直接部署在ESP32设备上运行。 - **资源消耗低**:由于采用了高效的算法设计,在保持较高精度的同时还能维持较低的计算开销,非常适合电池供电的应用场景。 ```python #include "espskainet.h" void setup_wake_word() { esp_err_t ret; // 初始化音频驱动程序 audio_board_init(); // 加载预训练好的唤醒模型文件 const char* model_path = "/path/to/model"; skn_model_handle_t handle = NULL; ret = skn_load_model_from_file(model_path, &handle); if (ret != ESP_OK || !handle) { printf("Failed to load wake word model\n"); return; } while(true){ int result = detect_voice_activity(); // 实现VAD检测函数 if(result == SUCCESSFUL_DETECTION){ process_audio_chunk(handle); // 将捕获的数据传递给skainet处理 bool is_awakened = check_if_awoken(); // 判断是否匹配到了设定的关键词 if(is_awakened){ trigger_event(); // 执行相应的操作比如点亮指示灯或者启动其他服务 } }else{ continue; // 如果未检测到声音则跳过本轮循环继续监听环境音源变化情况直到满足条件为止 } } } ``` #### 2. 基于ESP32-Korvo开发板构建解决方案 对于更复杂的实际产品需求而言,则推荐采用专门为此类用途而打造的产品级硬件平台——即ESP32-Korvo开发板[^2]。它内置了多个高品质麦克风组成的线性阵列结构以及必要的信号调理电路部分,从而极大地简化了外围元件选型工作量同时也提高了整体系统的鲁棒性和可靠性水平。 此外还集成了诸如MASE(Microphone Array Speech Enhancement)、AEC(Acoustic Echo Cancellation)之类的高级特性用来改善拾取效果特别是在嘈杂环境下表现尤为突出。 #### 3. 结合GPIO接口控制外部负载动作反应 无论是简单的灯光切换还是更加复杂一些的家庭自动化控制系统都可以借助通用目的输入输出端子(GPIO pins)轻松达成预期行为模式转换的目的[^3][^4]。例如当接收到特定触发事件之后便可以通过改变指定针脚电压等级的方式去激活关联继电器进而开启相应家用电器等等... ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值