Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 在一段时间不活动后启用esp32深度睡眠模式_Arduino_Sleep_Esp32 - Fatal编程技术网

Arduino 在一段时间不活动后启用esp32深度睡眠模式

Arduino 在一段时间不活动后启用esp32深度睡眠模式,arduino,sleep,esp32,Arduino,Sleep,Esp32,我在esp中设计了一个设备,它包含两个按钮,每个按钮都执行一项功能。然而,他一直在监控这些按钮,并耗尽电池。在一段时间的不活动之后,我如何实现esp的深度睡眠?例如,如果设备在30秒内没有读取,请激活睡眠模式。要退出该模式,只需按下任何现有按钮 我从团队中想到了一些东西,但它不起作用,因为milis()参数永远不会重置 void loop() { unsigned long timer=millis(); int botaoRfid = digitalRead(butRFID);

我在esp中设计了一个设备,它包含两个按钮,每个按钮都执行一项功能。然而,他一直在监控这些按钮,并耗尽电池。在一段时间的不活动之后,我如何实现esp的深度睡眠?例如,如果设备在30秒内没有读取,请激活睡眠模式。要退出该模式,只需按下任何现有按钮

我从团队中想到了一些东西,但它不起作用,因为milis()参数永远不会重置

void loop() 
{
  unsigned long timer=millis();
    int botaoRfid = digitalRead(butRFID);
    int botaoDig = digitalRead(butDIG);


  if(botaoRfid == HIGH){
    timer=0;
    Serial.println("botao RFID pressionado");
    checkRFID();
    }
   else if(botaoDig == HIGH){
    timer=0;
    Serial.println("botao DIGITAL pressionado");
    checkFingerprint();
    return;
    }
    else if(timer >=10000){
    Serial.println("Sleep…");
    esp_deep_sleep_start();    
    }
}

谢谢

这不是一个真正的问题,当您像这样重写代码时,
millis()
在启动后不会重置:

无符号长定时器=0;
无效设置()
{
}
void循环()
{
int botaoRfid=数字读取(但RFID);
int botaoDig=数字读取(butDIG);
如果(botaoRfid==高){
计时器=毫秒();
Serial.println(“botao RFID pressionado”);
检查RFID();
}
否则如果(botaoDig==高){
计时器=毫秒();
Serial.println(“博涛数码印刷”);
检查指纹();
返回;
}
如果(毫秒()-计时器>=10000),则为else{
Serial.println(“睡眠…”);
esp_deep_sleep_start();
}
}
这将使ESP32在10秒后进入深度睡眠,而不会重置为当前的
millis()
(当前在每个循环周期中都会发生这种情况,但您当然可以将该代码置于循环之外…)。但是,请注意,
millis()
将在大约49天后溢出,您必须正确处理此问题


此外,为了将ESP32从深度睡眠中唤醒,您必须定义一个PIN以监听,例如使用
esp\u sleep\u enable\u ext1\u wakeup(位掩码,模式)
。还列出了其他选项。

您好!谢谢你的帮助,但我认为它不起作用。这样,系统就不会进入深度睡眠模式,总是在等待输入。您是否从循环中删除了主毫秒()?这个主毫秒()是什么?我编辑了答案。如果没有帮助,您可能应该首先熟悉基本知识……我做了一个测试,发现(millis()-timer)总是大于5000