Imagem-BANNER-DESTAQUE-BLOG- aprenda a alimentar seu esp32 com bateria

Aprenda a alimentar seu ESP32 com bateria carregada por energia solar 33

Como foi visto no post “Aprenda a fazer seu carregador solar de baterias” aqui do blog, é possível carregar baterias (no caso, baterias Li-Ion) a partir de energia solar. Indo além nesta linha de pensamento, neste post você aprenderá a alimentar um ESP32 com bateria, sendo esta carregada com energia solar.

Dessa forma, você poderá fazer projetos com ESP32 mantido por energia solar, uma das energias renováveis mais presentes no mundo.

Materiais necessários

Para este projeto, você precisará de:

Funcionamento

Para alimentar o ESP32 com bateria os seguintes passos devem ser seguidos:

  1. Primeiramente, dois ou mais painéis solares transformam a energia solar em energia elétrica;
  2. Em seguida, essa energia elétrica é aplicada ao Módulo Carregador de Bateria de Lítio TP4056, que fará o carregamento da Bateria Li-Ion 18650 ligada a ele;
  3. Esta mesma Bateria Li-Ion 18650 alimenta um Conversor Boost DC Ajustável Step Up, fazendo com que a tensão da bateria (que pode ir até 3,7V sem estar em carga, ou 4,2V quando em carga) seja transformada em 5,0V;
  4. A tensão de 5,0V gerada é aplicada ao ESP32 (entrada Vin do Módulo WiFi ESP32 Bluetooth), fazendo-o funcionar.

Assim como dito no post “Aprenda a fazer seu carregador solar de baterias“, quanto mais painéis solares forem utilizados (painéis solares de mesma tensão de saída), mais energia elétrica será destinada ao módulo carregador de bateria e, logo, mais rápido a bateria irá carregar. Portanto, para uma maior autonomia de funcionamento do ESP32 à bateria, quanto mais painéis solares forem usados, melhor.

Considerações – software do ESP32

É de fundamental importância que sistemas embarcados alimentados à bateria façam o melhor uso possível dela. Logo, é uma boa prática que o software embarcado no ESP32 alimentado à bateria tenha o seguinte ciclo de funcionamento:

  1. O ESP32 “acorda”: é ligado pela primeira vez (ou sai do modo deep sleep);
  2. O ESP32 faz suas tarefas: após acordar, o ESP32 faz todas as suas tarefas da forma mais rápida possível, de modo a utilizar a menor carga de bateria possível para isso;
  3. O ESP32 “dorme”: após fazer todas suas tarefas, o ESP32 deve entrar em modo deep sleep (modo onde gasta a menor quantidade de energia possível, explicado com mais detalhes no tópico a seguir). Antes de dormir, o ESP32 programa em quanto tempo deve ser acordado novamente;
  4. O ciclo se reinicia.

Ou seja, as tarefas a serem realizadas pelo ESP32 devem ser as mais rápidas possíveis, caso contrário a autonomia do ESP32 funcionando à bateria será afetada negativamente. Logo, a qualidade do software embarcado escrito influencia (e muito) na autonomia da bateria desse sistema embarcado, exigindo muita atenção do desenvolvedor.

Modo deep sleep – o que é?

Em resumo, o modo deep sleep consiste em um modo de operação onde o ESP32 desliga quase todos seus periféricos para economizar energia elétrica (ficam ligados somente o RTC e o processador ULP). Como grande parte dos periféricos estão desligados, o consumo de energia elétrica do ESP32 cai drasticamente, permitindo seu uso em sistemas embarcados alimentados à bateria conforme o ciclo de operação sugerido no tópico anterior.

No modo deep sleep, o consumo de corrente elétrica pode atingir, no mínimo, 10µA. Só para se ter uma base de comparação, em funcionamento pleno, o consumo de corrente elétrica pode chegar a 50mA (sem utilizar o WiFi).

Ou seja, “dormindo” (em deep sleep), o ESP32 consume 5.000 vezes menos corrente elétrica (e energia elétrica, consequentemente) se comparado ao modo de funcionamento pleno, configurando-se assim uma economia de energia elétrica muito expressiva.

Circuito esquemático

O circuito esquemático para alimentar um ESP32 com bateria pode ser visto na figura 1.

Como alimentar um ESP32 com bateria
Figura 1 – circuito esquemático do projeto

Software embarcado do projeto

O software embarcado do projeto consiste em um exemplo seguindo as boas práticas recomendadas no tópico “Considerações – software do ESP32”. Ao acordar, o ESP32 pisca dez vezes o LED ligado ao GPIO 5. Após fazer isso, o ESP32 entra em deep sleep por 1 minuto, reiniciando o ciclo todo novamente.

Código-fonte do projeto

O código-fonte do projeto pode ser visto abaixo.

/* Definição - GPIO do LED */
#define GPIO_LED          5

/* Definições - deep sleep */
#define FATOR_US_PARA_S   1000000  /* Fator de conversão de micro-segundos para segundos */
#define TEMPO_DEEP_SLEEP  60       /* Tempo para o ESP32 ficar em deep sleep (segundos) */

void setup() 
{
    /* Configura GPIO do LED e o inicializa desligado */
    pinMode(GPIO_LED, OUTPUT);
    digitalWrite(GPIO_LED, LOW); 
}

void loop() 
{
    int i;

    /* Pisca o LED 10 vezes */
    for (i=0; i<10; i++)
    {
        digitalWrite(GPIO_LED, HIGH);
        delay(250);
        digitalWrite(GPIO_LED, LOW);
        delay(250);
    }

    /* Entra em deep sleep */
    esp_sleep_enable_timer_wakeup(TEMPO_DEEP_SLEEP * FATOR_US_PARA_S);
    esp_deep_sleep_start();
}

Recapitulando: após a conversão de energia solar em energia elétrica feita pelos painéis solares, a bateria Li-Ion 18650 é carregada. Esta mesma bateria alimenta o ESP32, o qual possui um LED e um resistor (470Ω 1/4W) ligados ao GPIO 5. O ESP32, por sua vez, acorda de um em um minuto para piscar o LED dez vezes.

Desta forma, a bateria é utilizada (descarga) no tempo que o ESP32 está ativo (inicializando e, posteriormente, piscando o LED) e carregada enquanto o ESP32 está “dormindo” (em modo deep sleep).

Considerações finais

Este exemplo mostrou o uso do ESP32 com bateria (carregada por energia solar), respeitando boas práticas e entrando em modo deep sleep por uma parcela considerável do tempo.

Porém, em aplicações mais robustas e utilizadas na vida real, sensores e outros periféricos são utilizados. Sendo assim, os seguintes cuidados devem ser tomados nestes cenários:

  • Antes de entrar em modo deep sleep, desligue todos os periféricos (sensores, motores, LEDs, etc.). Caso contrário, estes continuaram alimentados durante o deep sleep do ESP32 e consumirão energia sem necessidade;
  • Para ligar e desligar a alimentação de periféricos, prefira o uso de transistores do tipo MOSFET canal N para o chaveamento.
    O principal motivo disso é que transistores MOSFET canal N entram em saturação em função da tensão entre Gate e Source, consumindo uma corrente muito pequena (na ordem de nano Amper ou menos) para isso. Dessa forma, gasta-se muito pouca energia elétrica da bateria para ligar ou desligar periféricos, contribuindo para uma maior autonomia do projeto. Uma ótima sugestão de MOSFET canal N para isso é o FQP30N06L;
  • Na prática, sistemas embarcados alimentados a bateria normalmente ficam em modo deep sleep por muitas horas (em algumas aplicações, até dias). Isso permite um maior tempo de carga da bateria, elevando a autonomia do sistema como um todo;
  • Baterias tem tempo grande de vida útil, mas não infinito. Após sua vida útil, uma bateria vai ter um desempenho muito inferior ao original. Dessa forma, manutenções periódicas para troca de bateria devem ser planejadas quando se trata de sistemas embarcados em campo;
  • Baterias tendem a ter sua vida útil reduzida (ou entrarem em risco de vazamento e fogo) quando submetidas a altas temperaturas. Projete o case / encapsulamento de seu projeto de modo a proteger ao máximo a bateria do calor.

Gostou deste post sobre como alimentar um ESP32 com bateria carregada por energia solar? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

33 Comentários

  1. Olá tudo bem?
    Depois de programar, posso colocar um ESP32 numa fonte de 5v/1A? Não consegui encontrar no datasheet qual corrente específica.

  2. Olá, estou com um problema quanto ao uso desse esquemático. Em meu projeto há 1 painel de 1W, 1 bateria de 3350mAh, um TP4056 e alguns módulos que fazem a aquisição de dados de 5 em 5 minutos, incluindo o nível da bateria, capturado com uma divisão de tensão simples, equivalente a esse projeto https://iotprojectsideas.com/battery-status-monitoring-system-using-esp8266-arduino-iot-cloud/ contudo adicionei um Transistor BJT NPN no negativo do último resistor para impedir que o subsistema de leitura consumisse alguma corrente indesejada. Porém estou enfrentando um problema ao ler o nível de tensão da bateria quando coloco o sistema no sol, a leitura da bateria sofre uma variação indesejada, isso pode ser visto em
    https://marred-garlic-748.notion.site/Informa-es-sobre-o-projeto-9bfcf057920f452b8b52cfaced283911

    Se puder me auxiliar com esse detalhe, ou seja, solucionar essa variação indesejada, será de grande valia para meu projeto.

    Obrigado!

    1. Olá Mateus.

      Provavelmente é o chaveamento do transistor que está gerando essa oscilação. Para verificar se é isso o problema, você pode remover o transistor e ver se ocorre o mesmo.

      Ai caso o problema seja o transistor, tem duas opções: 1) Colocar um diodo ao invés do transistor 2) Usar um capacitor de filtro (100nf talvez) para amenizar esse ruido.

      Caso queira conversar mais a fundo sobre isso, ficamos disponíveis no e-mail [email protected]

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

      1. Acabei de enviar um e-mail com mais detalhes/questões!

  3. Olá, uma dúvida eu consigo fazer com que o painel solar alimente diretamente o sistema embarcado? Seria as seguintes situações.
    1- com sol e sistema ligado, painel alimenta o sistema
    2- sem sol e sistema ligado, bateria alimenta o sistema
    3- com sol e sistema desligado, painel alimenta bateria

    Eu consigo fazer isso? Ou é melhor seguir o que vcs fizeram?

    Agradeço desde já!

    1. Olá.

      Não será possível pois a tensão que o painel solar gera é muito alta para o sistema embarcado. Alguns conjuntos de painéis podem gerar 12 V, 24 V ou até mais. Essa tensão seria muito alta até mesmo para um regulador de tensão convencional.

      Portanto, o módulo de carregador nesse caso serve tanto para carregar a bateria quanto para regular a tensão para o esp32.

      O que você pode fazer é colocar uma chave liga/desliga entre a bateria e o esp32. Assim a bateria poderá continuar carregando mesmo com o sistema desligado.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

      1. Muito obrigada! Farei isso!

        Outra dúvida, você utilizou algum software para simular os componentes e/ou indicaria algum para tal?

        1. Olá.

          Não utilizei nenhum simulador. Por ter painel solar e esp32, seria difícil simular. Uma opção é substituir os painéis por uma fonte DC. Ai você pode tentar usar o https://wokwi.com/.

          Att.
          Vitor Mattos.
          Suporte Técnico MakerHero.

  4. Grato pela resposta.
    Outra dúvida.

    Foi dito que:
    “Na prática, sistemas embarcados alimentados a bateria normalmente ficam em modo deep sleep por muitas horas (em algumas aplicações, até dias).”

    Existe alguma forma de “despertar” sem ser definido por tempo, como foi mostrado nesse exemplo?

    Grato!

    1. Olá Marcelo.

      O autor citou isso pois os períodos de deep sleep são importantes para uma carga completa da bateria.

      No caso, para manter o esp32 (ou qualquer outra placa) sempre ativo, sugiro uma simples API para aquisição de tempo e clima, com intervalo de 1 a 5 minutos. Dessa forma terá um loop que fará o processador sempre trabalhar.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

  5. Olá, Pedro!

    Obrigatoriamente é preciso ter o Conversor Boost DC Ajustável Step Up para o ESP32 funcionar?
    Se ligar a bateria sem o conversor, o que acontece?

    Grato!

    1. Olá Marcelo.

      A função do boost nesse caso é importante para manter a tensão no esp32 estável, pois tanto os painéis solares quanto as baterias tendem a variar consideravelmente o nível de tensão.

      Caso não seja usado o boost, dependendo da aplicação, poderá haver falhas no funcionamento do esp32, como perda de comunicação, oscilação de tensão nas saídas, etc.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

  6. Boa noite, tudo bem ? Gostaria de saber qual corrente máxima que o ESP32 DEVKIT V1 pode receber no pino Vin. Obrigado.

    1. Olá,

      No caso o crítico é a tensão. A menos que seja um tipo de fonte que forneça uma corrente constante (o que é mais raro, a maioria das fontes são de tensão constante e tem uma corrente máxima de saída), o pino Vin irá drenar apenas a quantidade necessária de corrente, o que tem de ser respeitado é a tensão máxima.

      Abraços!
      Vinícius – Equipe MakerHero

  7. Olá tudo bem ? Gostaria de saber se você poderia me informar por quando tempo (dias ou horas ) eu consigo alimentar o Esp32 funcionando sem parar como no esquema que você fez acima, ou por exemplo eu tenho um circuito que consome cerca de 300 mah ( composto por um Esp32 com WiFi ON + sensor) u conseguiria mantê-lo funcionando dia e noite com 2 painéis solares de 6V e 3w de potencia e utilizando essa mesma bateria de 2200 mah que você utilizou ???

    1. Olá João,

      Com um consumo de 300 mA, somente com a bateria duraria cerca de 7 horas.

      O consumo, assumindo que foi medido em 5V, seria de 1,5 W

      Acredito que precisaria de uma bateria de maior capacidade para aguentar a noite toda, mas os painéis provavelmente seriam capazes de fazer a carga durante o dia, mesmo com uma intensidade solar não ideal, pois combinados teriam uma saída de até 6W, com folga para alimentar o circuito e carregar a bateria.

      Abraços!
      Vinícius – Equipe MakerHero

      1. Olá Vinicius ! Tudo Bem ? Obrigado pelo ultimo esclarecimento e pela disponibilidade. Só Gostaria de te Perguntar uma ultima vez, se esse carregador o TP4056 pode carregar qual quer bateria recarregável 18650 de 3.7V com correntes diferentes, Pois por exemplo eu imagino comprar uma bateria 18650 com carga de 4800 mah, já que esta possui uma corrente com o dobro da utilizada no circuito acima, e como você havia mencionado antes na minha situação (Onde eu preciso alimentar um circuito com o ESP32 consumindo dia e noite cerca de 300mah, sendo que durante o dia pelos painéis solares de 6V 3W e anoite com a bateria lion Litio) eu necessitaria de uma bateria maior, ai no caso esse carregador TP4056 poderia carregar essa bateria, já que ela e 18650 com a mesma tenção padrão de no máximo 4,2v mudando somente a corrente ?

        Vou deixar aqui em baixo o site que vende essa bateria que eu imagino que se encaixe no meu projeto que consome 300mah

        https://pt.aliexpress.com/item/1005002748461461.html?spm=a2g0o.cart.0.0.63773c00OjZa91&mp=1

        Desde já muito Obrigado pelas respostas !

        att Joao.

        1. Olá João,

          Sim, o TP4056 conseguiria carregar essa bateria também, apenas levaria mais tempo.
          A quantia mAh se refere à quanta energia a bateria consegue armazenar, também se relaciona à capacidade de corrente que ela consegue fornecer e à corrente de carga,
          pois para ter mais capacidade são construídas um pouco diferente em termos de quantidade de materiais.

          Você pode ver neste post aqui: https://www.arduinoecia.com.br/como-usar-carregador-de-bateria-de-litio-tp4056
          que é possível ajustar a corrente de carga do módulo, até 1 A, alterando o resistor R3.

          Cada bateria e capacidade tem a sua indicação de corrente de carga.

          Abraços!
          Vinícius – Equipe MakerHero

          1. Olá Boa Tarde Felipe! Tudo bem?

            Uma outra duvida a respeito desse assunto relacionado a economia de energia proporcionada pelo modo DEEP SLEEP no ESP32, e no fato de que caso eu esteja utilizando algum tipo de sensor nesse modulo, no caso um sensor que envia assim como um PUSH Button, ou seja um sinal de 0 e 1 apenas para o ESP32, como eu poderia fazer o desligamento desse sensor utilizando o MOSFET destacado no tutoria, especificamente o Transistor tipo N o FQP30N06L.
            Exemplificando, por exemplo, se eu estiver utilizando os pinos 3.3V, Gnd e apenas uma GPIO do ESP para acionar e recolher dados desse sensor, como eu colocaria o transistor nesse circuito? seria necessário também incrementar mais uma GPIO no Sistema e na Programação para desligar este sensor quando o Modulo estiver em Deep Sleep ?

            Muito obrigado Mesmo pelos últimos esclarecimentos de Forma Geral, estão me ajudando Bastante em Meu pequeno Projeto!!

            Att Joao.

            jquirinodamascena
          2. Olá João!

            De nada!

            Acredito que sim, precisaria utilizar uma GPIO para fazer o comando do mosfet e desligar/ligar o sensor.
            Mas creio que seria interessante testar, pois pode ser que seja uma complexidade grande para pouco ganho, poderia medir quanto de corrente esse sensor consome e se seria muito significativo o desligamento dele.

            Talvez o pessoal na comunidade no facebook tenha alguma experiência com isso, você pode postar sua ideia lá.

            Abraços!
            Vinícius – Equipe MakerHero

            Vinicius Pinheiro
  8. Como funciona suporte de duas bateria de litio ( paralela), este suporte tem placa vários chips que regula a tensão e tem proteção para circuito . Este suporte tem muitas entradas e saídas e eu não sei onde que fica a saída é a entrada e tambem qual voltagem e amperes só sei que meu esp32 pode suportar 5 volts e 1 amper no micro usb

    1. Olá Alonso,

      A qual suporte estais te referindo?

      Abraços!
      Vinícius – Equipe MakerHero

  9. Oi, boa noite. Sou um aprendiz no assunto e gostaria de indicações de qual a menor bateria que eu poderia utilizar junto ao esp32 para montar uma pulseira. Ela terá também led e vibracall. Poderia me explicar o que seria necessário para montar o circuito?

    Agradeço desde já, pois estou iniciando os meus estudos na área!

  10. A minha montagem é exatamente igual ao deste artigo(com exceção dos painéis solares, pois uso carregador de bateria para carregar a 18650), mas o meu ESP32 DevKit liga mas fica em loop no boot, não iniciando o WIFI nem executando corretamente o Sketch… o que será que pode estar acontecendo? O circuito do meu ESP32 é composto de 3 LEDs com resistores e um display OLED 0.96″. Os LEDs acendem e o mesmo acontece com o OLED mas o boot não se completa.

    1. Ricardo, boa noite.

      Quantas e quais placas solares (quantos Volts e qual potência) utilizou? A bateria está com quantos Volts de tensão em seus terminais (quando fora do carregador)?
      Pergunto pois, pelos sintomas, parece que a bateria está com pouca carga e, além disso, não há corrente elétrica suficiente para carregar a bateria e bootar o sistema.

      Atenciosamente,
      Pedro Bertoleti

      1. Caro Pedro, bom dia…A voltagem nos terminais da Bateria 18650 é de 4.21 Volts após a carga completa e a tensão na saída do Step Up MT3608 que eleva a tensão é de 5.01 Volts. Esta tensão alimenta o pino VIN do ESP32. E mesmo com estas tensões o Sketch não executa corretamente , ficando o ESP32 preso num loop sem fim na inicialização e nada do WIFI inicializar.

        RICARDO LUIZ CAVALCANTE FERNANDES
        1. Estou exatamente com o mesmo problema, estou usando um módulo que gera 5 ou 3.3V, e com ambos o ESP32 não está conectando o WiFi, pelo que li com o multímetro a tensão está menor um pouco quando lido nos pinos do ESP, a alimentação na saída do módulo está certa.

          Leonardo Rodrigues da Silva
          1. Olá boa tarde! Eu não sei se vocês já conseguiram resolver o problema, acredito que sim, mas caso não ainda, o ESP32 tem alguns pinos mais precisamente os ADC2 (tem que consultar o pinout do modelo específico pra ver quais são) estes não podem ser usados para fazer leituras analógicas se for utilizar o wi-fi em conjunto. Se for fazer qualquer medida analógica tem que usar os pinos do ADC1.

            dhs.danielsouza
          2. Olá Daniel.

            Obrigado pela contribuição!

            Att.
            Vitor Mattos.
            Suporte Técnico MakerHero.

  11. Como eu poderia carregar múltiplas baterias? (O consumo de energia do meu arduino+sensores exigem a utilização de mais de uma bateria)

    1. Nesse caso, é preciso de um Módulo Carregador de Bateria de Lítio TP4056 por bateria. Nesse caso, é altamente recomendável utilizar múltiplas placas solares.

  12. Era bom indicar que a biblioteca esp_sleep.h deve ser incluída no cabeçalho !

    1. Pasini, não é necessária essa inclusão. Ao menos, não quando usando Arduino IDE.