Arduino ESP32深度睡眠触摸唤醒(触摸唤醒)

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino ESP32深度睡眠触摸唤醒(触摸唤醒)相关的知识,希望对你有一定的参考价值。

Arduino ESP32深度睡眠触摸唤醒(触摸唤醒)


通过D4–GPIO4引脚触摸感应,触发唤醒功能。

实例代码

/*

  深度睡眠触摸唤醒(触摸T0唤醒)
*/

#define Threshold 40 //数值越大,灵敏度更高

RTC_DATA_ATTR int bootCount = 0;
touch_pad_t touchPin;

//打印 ESP32 从深度睡眠中醒来的原因
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("使用 RTC_IO 的外部信号引起的唤醒"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("使用 RTC_CNTL 的外部信号引起的唤醒"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("定时器引起的唤醒"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("触摸板引起的唤醒"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("ULP 程序引起的唤醒"); break;
    default : Serial.printf("唤醒不是由深度睡眠引起的: %d\\n", wakeup_reason); break;
  }
}

//打印 ESP32 从深度睡眠中醒来的原因
void print_wakeup_touchpad() {
  touchPin = esp_sleep_get_touchpad_wakeup_status();

  switch (touchPin)
  {
    case 0  : Serial.println("在 GPIO 4 上检测到触摸"); break;
    case 1  : Serial.println("在 GPIO 0 上检测到触摸"); break;
    case 2  : Serial.println("在 GPIO 2 上检测到触摸"); break;
    case 3  : Serial.println("在 GPIO 15 上检测到触摸"); break;
    case 4  : Serial.println("在 GPIO 13 上检测到触摸"); break;
    case 5  : Serial.println("在 GPIO 12 上检测到触摸"); break;
    case 6  : Serial.println("在 GPIO 14 上检测到触摸"); break;
    case 7  : Serial.println("在 GPIO 27 上检测到触摸"); break;
    case 8  : Serial.println("在 GPIO 33 上检测到触摸"); break;
    case 9  : Serial.println("在 GPIO 32 上检测到触摸"); break;
    default : Serial.println("唤醒不是通过触摸板"); break;
  }
}

void callback() {
  //占位符回调函数
}

void setup() {
  Serial.begin(115200);
  delay(1000); //花一些时间打开串行监视器
  //增加引导编号并在每次重启时打印
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //也打印 ESP32 和触摸板的唤醒原因
  print_wakeup_reason();
  print_wakeup_touchpad();

  //在触摸板D4 (GPIO4) 上设置中断,用于触摸唤醒
  touchAttachInterrupt(T0, callback, Threshold);

  //将触摸板配置为唤醒源
  esp_sleep_enable_touchpad_wakeup();

  //现在去睡觉
  Serial.println(" 要休眠了");
  esp_deep_sleep_start();
  Serial.println("这永远不会被打印");
}

void loop() {
  //这永远不会到达
}
  • 触摸测试的串口打印

以上是关于Arduino ESP32深度睡眠触摸唤醒(触摸唤醒)的主要内容,如果未能解决你的问题,请参考以下文章

Arduino ESP32 深度睡眠与外部唤醒(EXT0)

Arduino ESP32自带触摸传感器功能测试

Arduino ESP32 WIFI &蓝牙模式触控按键切换

ESP32电容式触摸传感器引脚

ESP8266深度睡眠计时器唤醒

玩转 ESP32 + Arduino (十七) deepsleep深睡眠模式