"Sobrevive ao sono profundo, mas não redefiniu, Powercycle ou reflexo".
Não use esta biblioteca se você quiser apenas os dados em algumas variáveis para sobreviver ao sono profundo. Basta marcar as variáveis RTC_DATA_ATTR e você está pronto. Há um tutorial aqui. Esta biblioteca é para você apenas se você possui código existente que usa EEPROM.h , e você está bem em ter algo escrito na EEPROM, não sobreviver à redefinição, perda de energia ou novo código.
Flash está sujeito a desgaste por ser reescrito. Flash nos próprios módulos do Espressif é garantido para 100.000 gravações, os módulos genéricos de flash SPI geralmente são classificados de 10.000 a 100.000. Mas isso geralmente assume que o chip está a 20 ° C (68 ° F). Dentro de um módulo, sempre será mais quente, e há muitas histórias de horror na rede de chips flash spi durar ordens de magnitude Flash Cycles menos do que o anunciado.
O Código Arduino do Espressif ESP32 inclui uma implementação da Arduino EEPROM que grava a EEPROM para piscar como blob em seu armazenamento de valor-chave do NVS. O que isso significa efetivamente é que, para todas as alterações de apenas um pouco na "EEPROM", toda a sua EEPROM é reescrita para piscar, a cópia antiga marcada é excluída e, se a página flash é preenchida, uma nova página será marcada ativa e assim por diante. Isso pode levar a mais desgaste flash do que se poderia esperar, os detalhes exatos estão aqui.
Se o seu aplicativo mantiver o ESP32 movido a bateria, mas o colocar em sono profundo, ele usa tão pouca energia, isso é efetivamente desligado no que diz respeito à duração da bateria. Você pode acordá -lo novamente depois que um certo período de tempo expirou e/ou se um gpio (ou seja, botão) for alto ou baixo.
Esta biblioteca emulará a EEPROM no RTC RAM, que permanece alimentada durante o sono profundo. Para saber mais sobre o sono profundo, verifique este tutorial fácil ou a documentação do Espressif, se você quiser todos os detalhes. Como mencionado acima, use esta biblioteca apenas se o seu código existente usar a EEPROM. Simplesmente ter algumas variáveis sobreviver ao sono profundo é muito mais fácil, verifique o tutorial.
Se você ligar para EEPROM.toNVS() , uma cópia dos seus dados da EEPROM será salvada na chave "EEPROM" no NVS Flash, exatamente como quando você usaria o EEPROM.h original. Sempre que o ESP32_RTC_EEPROM acorda com uma RAM RTC vazia (que é detecta pela presença de uma palavra mágica), ele tentará ver se há uma cópia salva do tamanho certo. Nesse caso, isso é carregado. Você também pode reverter manualmente para o último salvamento ligando para EEPROM.fromNVS() .
A função EEPROM.wasRestored() informará se o conteúdo foi ou não automático restaurado a partir de NVs neste ciclo de inicialização.
Adicione esta biblioteca usando o gerenciador da biblioteca ou clonando este repositório na pasta da biblioteca Arduino.
Substitua #include <EEPROM.h> em seu código por #include <ESP32_RTC_EEPROM.h> .
Não há 3, você terminou.
Esta biblioteca sempre reivindicará EEPROM_SIZE (definida em 2048, alteração no arquivo .h) bytes da RAM do RTC (possui 8k). Você pode definir um número mais baixo ao ligar para EEPROM.begin() , mas esse número apenas limita o que seu código pode ler/gravar (e quanto é gravado no NVS Flash toda vez que o backup), não o RAM real RAM usado.
Não posso repeti -lo com frequência: apenas útil em combinação com o sono profundo do ESP, os dados nesta EEPROM falsa não sobrevive à picaticina, redefinição ou reflexão