Os dataloggers são dispositivos extremamente úteis para coletar e armazenar dados de sensores e outros dispositivos de medição. Normalmente, esses dispositivos utilizam cartões SD para armazenar os dados coletados.
No entanto, o ESP32 é um microcontrolador avançado que possui uma memória flash interna de alta capacidade, a qual pode ser utilizada para armazenar dados coletados. Neste blog, exploraremos como criar um datalogger com o ESP32 sem a necessidade de um cartão SD externo.
Ao seguir as instruções e exemplos que apresentaremos, você poderá facilmente criar seu próprio datalogger com ESP32, sem a necessidade de um dispositivo de armazenamento externo.
Sumário
1. Introdução
Para criar um datalogger, é necessário armazenar os dados das leituras de uma forma minimamente definitiva. Por isso, muitas vezes utiliza-se um cartão SD para fazer o armazenamento. No entanto, neste caso, vamos utilizar a memória flash do ESP32 para fazer esse armazenamento.
Na figura a seguir, é possível ver o ESP32 sem a placa metálica que cobre seus componentes. Nela, é possível identificar os componentes utilizados na sua construção, incluindo o próprio microcontrolador ESP32 e a memória flash, mostrada em destaque.
A imagem a seguir apresenta as principais divisões da memória flash do ESP32. É importante ressaltar que a região em azul é reservada para o programa que será executado pelo microcontrolador, enquanto a área amarela é usada para armazenar o código durante gravações por Wi-Fi (OTA). A região em vermelho é reservada para funções e tarefas específicas do dispositivo, as quais não podem ser acessadas pelo usuário.
A área verde na figura corresponde a uma parte da memória flash que pode ser livremente utilizada no código, atuando como uma espécie de memória EEPROM, embora seja tecnologicamente um segmento da flash. É nessa região que armazenaremos os dados coletados pelo nosso datalogger.
O código utilizado neste blog foi desenvolvido com base no exemplo FSBrowser, que pode ser encontrado na própria IDE do Arduino. Para acessá-lo, basta seguir os seguintes passos: vá em "Arquivo", depois em "Exemplos", desça até "WebServer" e, em seguida, selecione "FSBrowser", conforme mostrado na figura a seguir.
Vale ressaltar que, para visualizar este exemplo, é necessário selecionar a placa ESP32 na aba de ferramentas da IDE do Arduino.
O programa que vamos utilizar neste tutorial pode ser baixado aqui. No entanto, para utilizá-lo, é necessário realizar alguns passos adicionais, os quais serão mostrados nos próximos tópicos.
2. Como instalar o “ESP32 sketch data upload”
O datalogger que será construído com a ESP32 terá a seguinte interface gráfica, a qual poderá ser acessada através do navegador. Essa interface será gerada e armazenada pelo microcontrolador, mas, para isso, é necessário carregar os arquivos correspondentes no ESP32. A imagem abaixo ilustra a interface gráfica que será utilizada.
Para realizar o carregamento dos arquivos da interface gráfica no ESP32, utilizamos a ferramenta "ESP32 Sketch Data Upload", a qual pode ser acessada na IDE do Arduino, como mostrado em destaque na figura a seguir.
No entanto, essa ferramenta não é instalada automaticamente na IDE do Arduino. Para instalar o “ESP32 sketch data upload”, primeiro faça o download dos arquivos aqui. Mostrado na figura a seguir.
Para prosseguir, é necessário localizar a pasta padrão onde a IDE do Arduino salva os sketch. Geralmente, essa pasta é armazenada em uma pasta chamada "Arduino" dentro da pasta "Documentos" do computador. No entanto, é possível encontrá-la facilmente através da IDE. Basta acessar a opção "Arquivo" e, em seguida, "Preferências". Na janela que abrir, você encontrará o caminho para a pasta de sketches.
Vá até o local, se não existir, crie uma pasta com o nome tools.
Agora extraímos o arquivo que acabamos de baixar, para a pasta tools. Como mostrado na figura a seguir.
Feito isso, basta reiniciar a IDE, que é a ferramenta disponível.
3. Carregando o datalogger no ESP32
Disponibilizamos todos os arquivos do datalogger para download através deste link. No entanto, é importante ressaltar que ele utiliza nossa biblioteca de temporização sem delay, portanto, para utilizar o datalogger, você precisará instalá-la em sua IDE. Para isso, recomendamos que acesse o blog "Temporizador sem delay no Arduino: Biblioteca pronta". Lá você encontrará todas as instruções necessárias para realizar a instalação da biblioteca com sucesso.
Agora que a biblioteca de temporização sem delay está instalada na sua IDE, é possível carregar o sketch FSBrowser_time_v7 no ESP32. Após realizar o carregamento do código, você poderá visualizar o resultado no monitor serial. No entanto, é importante ressaltar que temos um erro ao tentar abrir o arquivo, isso ocorre porque ainda não carregamos os arquivos utilizando o ESP32 sketch data upload.
O próximo passo é realizar o carregamento da interface e do gerenciador de arquivos do datalogger para o ESP32. Para isso, você deve fechar o monitor serial e, em seguida, acessar a opção "ESP32 sketch data upload" no menu "Ferramentas". Após o carregamento dos arquivos, você poderá visualizar o resultado no monitor serial. A figura a seguir ilustra o resultado que deve ser exibido no monitor serial após o carregamento dos arquivos:
Para acessar os gráficos das leituras realizadas pelo datalogger através do navegador, basta utilizar o endereço http://esp32fs.local/. Ao acessar esse endereço, você poderá visualizar os gráficos das leituras de maneira semelhante à figura abaixo:
Para acessar os arquivos que contêm os dados completos das medições realizadas pelo datalogger, basta utilizar o endereço http://esp32fs.local/edit. Ao acessar esse endereço, você poderá visualizar os arquivos, de maneira semelhante à figura a seguir:
Na parte esquerda da interface, é possível visualizar os arquivos de dados numerados de 001 a 010. Esses arquivos armazenam as leituras realizadas pelo datalogger em um formato de fila, onde as leituras mais recentes são sempre adicionadas ao arquivo 10. Quando o arquivo 10 atinge sua capacidade máxima, o arquivo 1 é deletado e os demais são renomeados, de forma que o arquivo 2 se torna o novo arquivo 1, o 3 se torna o novo arquivo 2, e assim sucessivamente até que o arquivo 10 se torne o arquivo 9. As próximas leituras são então adicionadas novamente ao arquivo 10 até que ele fique completo e o ciclo recomece. Além desses arquivos individuais, há também um arquivo total que armazena a soma dos dados de todos os 10 arquivos.
Na figura a seguir, é possível visualizar o conteúdo do arquivo 9. É importante notar que ele armazena 8 leituras, o que nos leva a concluir que essa é a capacidade máxima de cada arquivo.
Para alterar esse valor devemos utilizar as duas primeiras variáveis do código, mostradas a seguir.
long tamArquivoMax = 200;
long quantArqMax = 10;// tem que ser 2 ou mais...
As variáveis, quantArqMax e tamArquivoMax, são responsáveis por determinar o número máximo de arquivos que serão armazenados e o tamanho máximo de cada arquivo, respectivamente. É importante ressaltar que o valor mínimo para quantArqMax é 2.
Antes de realizar qualquer alteração nessas variáveis, é fundamental verificar a quantidade de memória disponível no dispositivo. Para isso, podemos analisar o monitor serial. Na figura a seguir, podemos observar que o datalogger está utilizando apenas 24096 bytes, entre dados e códigos HTML, de um total de 1378241 bytes disponíveis.
Com essa informação em mãos, podemos ajustar as variáveis de acordo com as necessidades do projeto, garantindo que não ultrapassem a capacidade de memória do dispositivo.
Na configuração atual, o sistema está ocupando apenas 2000 bytes (2 kB) com os arquivos das leituras, o que representa apenas uma fração ínfima da memória disponível no dispositivo. Com mais de 1300000 bytes livres (1,3 MB), podemos facilmente aumentar o armazenamento do datalogger para 200 kB.
Para fazer esse aumento, podemos aumentar o número de arquivos para 1000, com um tamanho máximo do arquivo de 200 bytes. Outra possibilidade seria manter o número de arquivos em 10, mas aumentar o tamanho máximo do arquivo para 20000 bytes. Qualquer variação desses valores que multiplicados resultam em 200000 bytes (200 kB) seria uma alternativa viável.
Dessa forma, é possível ajustar as configurações de armazenamento de acordo com as necessidades do projeto, desde que sejam respeitadas as limitações de memória do dispositivo.
Como exemplo utilizamos a seguinte configuração.
long tamArquivoMax = 2000;
long quantArqMax = 100;// tem que ser 2 ou mais...
Na figura a seguir podemos ver quanta memória foi ocupada pelos arquivos salvos, após a alteração no código.
Este é o fim deste blog, mas é importante ressaltar que existem muitas outras possibilidades de aprimoramento e personalização deste projeto. Para saber mais sobre essas opções e descobrir outros detalhes interessantes sobre o ESP32, recomendamos que assista o nosso vídeo, onde o Cristiano analisa o código e compartilha muitas outras informações úteis.
Autor: Thales Ferreira
コメント