Olá pessoal, tudo bom?
Por favor gostaria da ajuda de vocês, se puderem me ajudar.
Gostaria de saber como faço para enviar um arquivo txt que está salvo no sd card conectada a esp 32 para um pc.
Por exemplo: quando o pc se conecta na rede e o usuário abre o navegador e digita o endereço: 192.168.4.1/sdbm, gostaria que ele recebesse o arquivo txt que está dentro do sd card.
Da maneira que estou fazendo a placa abri o arquivo ler linha por linha e transmite o problema é que se tiver muita informação estoura a memoria e demora muito para enviar.
Vou explicar o que estou fazendo:
Estou desenvolvendo um sisteminha, só que ele está apresentando algumas falhas.
Primeiro vou falar como ele deveria funcionar e depois apresentar as falhas para quem puder me ajudar com pelo menos algum dos problemas.
Estou fazendo um sistema que trabalha em 3 modos diferentes, para ele economizar bateria.
Quando energizo o sistema ele já entra no modo 1.
1° modo: Neste modo o sistema desliga a comunicação wifi e Bluetooth e fica lendo a entrada analógica e armazenando o número de serie do sistema, data, horário e temperatura (dados obtidos pelo rtc) e o valor da entrada e salva no cartão micro sd a cada segundo essas informações formando a mensagem: Serie=001000/Data=17.10.2020/horario=11:35:38/Temp=29.00C/bat=3.30 bat é o valor da tensão na entrada analógica.
Quando o sistema está nesse modo 1 ele deve acionar o led rgb na cor verde, que fica piscando para mostrar que o sistema está no modo 1.
Se eu aproximar o imã do sensor de efeito hall o meu sistema deve passar do modo 1 de funcionamento para o modo 2.
2° modo de funcionamento ativa o wi-fi.
Quando o sistema entra no modo 2 de funcionamento ele ativa o wi-fi para que seja possível comunicar celular ou computador com a esp32.
A esp 32 trabalha no mado Ap criando a rede, para que o dispositivo se conecte a ela, devendo conectar na rede criada pela esp32 e o endereço: 192.168.4.1
Quando o sistema entra nesse modo é possível passar alguns comando através dos seguintes endereços:
192.168.4.1/LED //função que muda o estado do led da placa.
192.168.4.1/am //função que apaga os dados do sd card.
192.168.4.1/tr //função que imprime no navegador os dados coletados em tempo real.
192.168.4.1/sdes //função que escreve no micro sd os dados coletados no momento que foi dado o comando.
192.168.4.1/sdbm //função que imprime no navegador todos os dados que estavam salvos no arquivo do sd card.
192.168.4.1/sdbm1 //função que simula sdbm
Quando o sistema está nesse modo 2 ele deve acionar o led rgb na cor azul que fica piscando para indicar que o sistema está no modo 2.
Quando o sistema está no modo 2 e nenhum dispositivo trocou informação com a esp32 por mais de 1 minuto, ou seja mais de 1 minuto sem mandar uma das requisições 192.168.4.1(LED, am,sdes....), ele deve sair do modo 2 e ir para o modo 1.
Se o sistema está no modo 2 e eu aproximar um imã do sensor de efeito hall, o sistema deve sair do modo 2 e ir para o modo3.
3° modo quando o sistema entra nesse modo: o led vermelho irá piscar algumas vezes para indicar que o sistema entrou no modo 3. Quando o led para de piscar o sistema entra em deep sleep.
Estou fazendo dessa maneira porque o usuário não pode ter acesso fisicamente a placa para pressionar um botão liga/ desliga.
Então ele entra no deep sleep para economizar energia.
Quando o equipamento está no modo 3 e eu aproximo o imã do sensor hall o sistema deve ir para o modo 1 de funcionamento.
O foco é ser um sistema confiável nas leituras e na comunicação, mas com baixo consumo de energia já que o mesmo será energizado por baterias.
Os problemas que estou tendo são os seguintes:
-
em relação ao sd/ card A momentos em que quando quando ligo o sistema ele demora a funcionar porque demora um pouco para reconhecer o sd card. outra coisa que ocorre de vez enquando também é quando estou no modo 2 e volta para o modo 1, de vez quando fica dando erro ao tentar abrir o sd card, consequentemente ele não salva as leituras quando isso ocorre.
Até pensei em mudar para a memoria interna do esp32, mas o problema é o tamanho do espaço, porque meu sistema ele coleta amostrar a cada segundo e preciso dar certa que meu sistema consegue armazenar até 24 horas de amostras.
ou seja o sistema tem que ser capaz de armazenar pelo menos 86400 amostras de mensagem do tipo: Serie=001000/Data=17.10.2020/horario=11:35:38/Temp=29.00C/bat=3.30 que é equivalente a 24 horas de coleta de dados, dá aproximadamente 8 MB.
Como posso melhorar estes aspcetos? -
Quando o sistema está no modo 2 e dou o comando 192.168.4.1/sdbm ele deveria escrever na tela do navegador todos os dados que estavam salvos no arquivo do sd card, o problema é que só consegue mostrar, se for menos de 925 amostras e demora uns 15 segundos para essas amostras aparecerem no navegador a partir do momento que dou o comando.
gostaria que isso fosse mais instantâneo e que eu não tivesse esse problema da limitação das amostras, porque se por exemplo eu tiver 1200 amostras salvas no sd card ele só mostraria 925 amostras e não teria como eu ver qual foi o valor das outras 200.
Tem uma maneira melhor de fazer isso? pensei ao invés de fazer como estou fazendo de abrir o arquivo e ler as amostrar para mostrar no navegador, enviar o arquivo (.txt)isso é possível? enviar o o arquivo txt pelo navegador quando conecto a rede da placa e digito o comando 192.168.4.1/sdbm. Se for possível, como faço?