Aqui estaremos discutindo como podemos definir o ESP32 no modo de suspensão profundo em tempo fixo para economizar energia. Antes de aprendermos a acordar esp32 do sono profundo usando timer, vamos entender o conceito de sono profundo:
O que é um sono profundo no ESP32
O ESP32 pode ser um dispositivo faminto por poder devido ao seu módulo Wi-Fi e Bluetooth integrado. Esp32 normalmente desenha 75mA para operações nominais enquanto pode subir até 240mA Ao transmitir dados sobre Wi -Fi. No entanto, podemos otimizar isso ativando o modo de suspensão profundo.
No modo de suspensão profundo, os periféricos digitais ESP32, RAM não utilizados e CPUs são desligados. Somente a lista seguinte de peças permanece operacional:
Quando o modo de suspensão profundo é ativado, a CPU principal é desligada; No entanto, o coprocessador ULP (UltralowPower) ainda pode ler dados de sensores e acordar a CPU sempre que for necessário.
Esta aplicação do ESP32 é útil quando queremos gerar saída em algum momento específico ou quando uma interrupção ou evento externo acontece. Isso salva o poder ESP32, pois sua CPU permanece fora pelo resto do tempo e só liga quando é chamado.
Juntamente com a memória principal da CPU ESP32, também é exibida ou apagada; portanto, qualquer coisa armazenada dentro desta memória não estará mais disponível. Apenas a memória RTC é mantida lá. Portanto, o ESP32 salva dados WiFi e Bluetooth dentro da memória RTC antes de entrar no modo de suspensão profundo.
Depois que o modo de suspensão profundo é redefinido ou removido, o chip ESP32 inicia a execução do programa desde o início.
O ESP32 pode ser acordado do sono profundo usando fontes diferentes.
Acorde fontes no ESP32
Múltiplas fontes estão disponíveis para acordar Esp32 da Deep Sleep:
Neste guia, abordaremos Timer acorda Fonte do ESP32.
Como usar o timer para acordar Esp32 do sono profundo
O controlador RTC que vem com o ESP32 contém um módulo de timer que pode acordar o dispositivo após um certo período de inatividade. Esse recurso possui vastos aplicativos onde precisamos de carimbo de hora ou precisamos executar instruções em horários específicos, mantendo o melhor consumo de energia.
O comando a seguir pode configurar o cronômetro ESP32 como uma fonte de despertar. Aceita tempo em microssegundos como argumento.
Esp_sleep_enable_timer_wakeup (time_in_micro-s)
Código de exemplo
Se você tiver a placa ESP32 instalada no Arduino IDE, o ESP32 vem com um exemplo de sono profundo que usaremos neste tutorial. No Arduino ide Sleep Timer Wakeup Exemplo pode ser aberto indo para: Arquivo> Exemplos> Esp32> Sono profundo> Timerwakeup
Uma nova janela será aberta com o esboço abaixo:
#Define US_TO_S_Factor 1000000ull
#Define time_to_sleep 5
Rtc_data_attr int bootcount = 0;
void print_wakeup_Reason ()
ESP_SLEEP_WAKEUP_CAUSE_T WAKEUP_REASAS;
WakeUp_Reason = ESP_SLEEP_GET_WAKEUP_CAUSE ();
Switch (WakeUp_Reason)
case esp_sleep_wakeup_ext0: serial.println ("Sinal externo da razão de despertar usando RTC_IO"); quebrar;
case esp_sleep_wakeup_ext1: serial.println ("Sinal externo da razão de despertar usando rtc_cntl"); quebrar;
case esp_sleep_wakeup_timer: serial.println ("WakeUp causado por timer"); quebrar;
case esp_sleep_wakeup_tuouchpad: serial.println ("WakeUp causado pelo touchpad"); quebrar;
case esp_sleep_wakeup_ulp: serial.println ("WakeUp causado pelo programa ULP"); quebrar;
Padrão: Serial.printf ("O sono profundo não causou acordado: %d \ n", wakeup_reason); quebrar;
Void Setup ()
Serial.começar (115200);
atraso (1000);
++bootcount;
Serial.println ("Número da inicialização:" + string (bootcount));
print_wakeUp_Reason ();
Esp_sleep_enable_timer_wakeup (time_to_sleep * us_to_s_factor);
Serial.println ("Configuração esp32 para dormir para cada" string + (time_to_sleep) +
"Segundos");
Serial.println ("vai dormir agora");
Serial.rubor();
ESP_DEEP_SLEEP_START ();
Serial.println ("Isso nunca será impresso");
Void Loop ()
Defina o sono profundo: O código começa descrevendo o tempo para o qual o ESP32 entrará no modo de suspensão. Isso pode ser modificado dependendo do tempo necessário. Aqui o tempo é convertido de microssegundos para segundos, por isso definimos 5 segundos para o modo de suspensão profunda ESP32. Vai acordar após cada 5 segundos.
Memórias de dados RTC: Próximo usando Rtc_data_attr Salvaremos dados sobre memória RTC. Este exemplo inclui o Bootcount variável que é armazenada dentro da memória RTC e conta o número de vezes o ESP32 acorda após cada sono profundo.
A memória RTC não é exibida quando o ESP32 está no modo de suspensão profundo. 8KB SRAM está incluído dentro da parte do RTC ESP32, também conhecida como RTC Fast Memory.
Esp32 Acorde Razão: Próximo usando o print_wakeup_reon () função, imprimimos a causa do despertar do sono profundo.
Em configurar() parte da taxa de transmissão é definida para comunicação em série e o ++Bootcount A variável é incrementada por 1 toda vez que o ESP32 acorda do sono profundo. A contagem total é impressa no monitor serial.
Finalmente usando a função ESP_DEEP_SLEEP_START (), O ESP32 é colocado no modo de suspensão.
Carregue o código para ESP32 usando o Arduino IDE.
Saída
A seguinte saída pode ser observada no monitor serial do Arduino IDE. Aqui podemos ver que depois de cada 5 seg esp32 acorda do sono profundo e o número da inicialização é incrementado toda vez que acorda.
Observação: Se pressionarmos o botão EN ESP32 redefinirá a contagem de inicialização para 0.
Conclusão
Aqui neste tutorial, configuramos o ESP32 para acordar do sono profundo usando um programa de timer. Simplesmente imprimimos uma mensagem depois que o ESP32 acorda; No entanto, usando este artigo, pode -se executar qualquer tarefa depois que o ESP32 acorda do sono profundo.