Usando o ULP do ESP32 em projetos Low Power

Este post faz parte da série Co-processador Ultra Low Power do ESP32. Leia também os outros posts da série:

Vamos dar início à programação do ULP do ESP32 e finalmente testar esse item incrível e relativamente raro entre microcontroladores. A programação do sistema principal é feita em C/C++, entretanto, o ULP é programado em Assembly e, por conta disso, afasta muitas pessoas que não têm um contato tão grande com programação de baixa abstração. Mas vamos em frente que tudo será devidamente explicado e comentado.

 

O código basicamente irá colocar o ESP32 em Deep Sleep, enquanto o ULP lê um sensor analógico (LDR) para detectar sombras no local. Caso perceba uma sombra, efetuará uma ação como acordar o ESP32 e incrementar uma variável persistente entre os ciclos de Sleep <-> Wakeup, que também é outro item importante, já que a Flash tem ciclo de escrita baixo.

 

Fluxograma do código executado pelo ULP do ESP32.
Figura 1 - Fluxograma do código.

 

 

Código em C++:

 

Código em Assembly:

 

Testando esse código, podemos observar que mesmo com o sistema principal em Deep Sleep, o ULP continua em execução normal, que no caso é fazendo a leitura do sensor analógico (LDR) e, caso o valor (luminosidade) chegue ao valor definido, irá piscar um LED indicativo e acordará o sistema principal, que também mostrará no Serial Monitor a quantidade de vezes que ocorreu o Wakeup. Em teoria, removendo todos os componentes extras do circuito, como sensores e atuadores, o consumo com o sistema principal em Deep Sleep enquanto o ULP está em execução deve ser <=150 uA. Imagine quantas aplicações podemos dar a esse pequeno guerreiro para projetos de Low Power? Praticamente um microcontrolador dentro de outro, porém de baixo consumo energético!

 

Utilizamos uma variável na memória RAM do RTC Domain, logo, não perdemos informação durante ou após o Deep Sleep, sendo uma ótima maneira de manter dados entre ciclos de Sleep <-> Wakeup sem precisar se preocupar com ciclos baixos de escrita na Flash.

 

No próximo post dessa série sobre o ULP do ESP32, vamos colocá-lo para ajudar o sistema principal no processamento, ficando encarregado de ler os sensores e ativar atuadores, já que essa tarefa interfere no bom funcionamento do Flow code.

 

 

Saiba mais

 

MSP430 - Modos de Low-Power

Idealização de um projeto IoT portátil

Embarcados interview: Jack Ganssle

Outros artigos da série

<< Conhecendo o co-processador ULP (Ultra Low Power) do ESP32Utilizando o ULP do ESP32 para co-processamento >>
Este post faz da série Co-processador Ultra Low Power do ESP32. Leia também os outros posts da série:

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

José Morais
Estudante de Engenharia da Computação pela USC, pretende se aprimorar e fazer a diferença nesta imensa área da tecnologia. Apaixonado por IoT, sistemas embarcados, microcontroladores e integração da computação nos mais diversos fins práticos e didáticos.

Deixe um comentário

1 Comentário em "Usando o ULP do ESP32 em projetos Low Power"

avatar
 
  Notificações  
recentes antigos mais votados
Notificar
Fabio Luiz
Membro
fabio Luiz

Show de bola esse tutorial, aguardando os proximos!!