Boa tarde a todos, estou com um projeto onde eu coleto dados de vários sensores e armazeno em um arquivo .txt utilizando o modulo micro sd.
Foi feito uma página web utilizando o arduino e o modulo wifi esp8266. A minha duvida é a seguinte: como que eu faço a leitura dos dados contidos no arquivo txt e mostre na pagina web?
Segue abaixo o código.
//Bibliotecas
#include <DHT.h>
#include <Wire.h>
#include <SD.h>
#include <Time.h>
#include <DS1307.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
//Constantes
SoftwareSerial esp8266(11, 12);
#define DEBUG true
#define pinA0_humSolo A0 // Define pino do sensor de umidade de solo
DHT dht(8, DHT22); // Define pino e tipo do sensor DHT
DS1307 rtc(A2, A3); // Define o pino do RTC
#define ONE_WIRE_BUS 10 //DS18
//inicializa o display
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 5, 6, 7);
//Variaveis
int chk;
//Variaveis para cartao SD
const int CS = 53;
char dataString[8];
char dataString2[7];
char dataString3[7];
char dataString4[7];
char dataString5[7];
char dataString6[7];
File meuArquivo;
Adafruit_BMP085 bmp;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(9600);
esp8266.begin(115200);
sendData("AT+RST\r\n", 2000, DEBUG); // rst
// Conecta a rede wireless
sendData("AT+CWJAP=\"COPELBEL99\",\"picapausemcasa\"r\n",10000,DEBUG);
delay(3000);
sendData("AT+CWMODE=3\r\n", 1000, DEBUG);
// Mostra o endereco IP
sendData("AT+CIFSR\r\n", 1000, DEBUG);
// Configura para multiplas conexoes
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG);
// Inicia o web server na porta 80
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);
// Informacoes iniciais no display
display.begin();
// Ajusta o contraste do display
display.setContrast(58);
// Apaga o buffer e o display
display.clearDisplay();
// Define tamanho do texto e cor
display.setTextSize(1);
display.setTextColor(BLACK);
// Retangulo temperatura
display.drawRoundRect(0,0, 44,24, 3, 2);
// Texto inicial temperatura
display.setCursor(11,3); // Seta a posição do cursor
display.println("TEMP");
display.setCursor(5,14);
display.println("----");
display.setCursor(29,14);
display.drawCircle(31, 15, 1,1);
display.println(" C");
// Retangulo umidade
display.drawRoundRect(45,0, 39 ,24, 3, 2);
// Texto inicial Umidade
display.setCursor(52,3);
display.println("UMID");
display.setCursor(50,14);
display.println("----");
display.setCursor(75,14);
display.println("%");
// Retangulo pressao
display.drawRoundRect(0,25, 84 ,23, 3, 2);
// Texto inicial Pressao
display.setCursor(22,28);
display.println("PRESSAO");
display.setCursor(55,38);
display.println("hPa");
display.setCursor(11,38);
display.println("------");
display.display();
delay(1000);
sensors.begin();// DS18 tempSolo
dht.begin();
pinMode(pinA0_humSolo, INPUT);
//Aciona o relogio
//rtc.halt(false);
//rtc.setDOW(MONDAY); //Define o dia da semana
//rtc.setTime(17, 56, 0); //Define o horario
//rtc.setDate(19, 06, 2018);
//Definicoes do pino SQW/Out
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
//alerta error sensor
if (!bmp.begin()) {
Serial.println("Erro no sensor de pressão atm!");
while (1) {}
}
// configura pino de Trigger como saída e inicializa com nivel baixo
pinMode(CS, OUTPUT);
Serial.begin(9600);
delay(100);
//Serial.print("Inicializando cartao SD...");
if (!SD.begin(CS)){
Serial.println("Falha na Inicializacao!");
return;
}
//Serial.println("Inicializacao terminada");
}
void loop()
{
// Verifica se o ESP8266 esta enviando dados
if (esp8266.available())
{
if (esp8266.find("+IPD,"))
{
delay(1500);
int connectionId = esp8266.read() - 48;
//Página web
String webpage = "<head><meta http-equiv=""content-type"" content=""text/html"">";
webpage += "</head><center><font color='grey'><h1><u>Monitoramento Agricola</u></h1></font></center>";
webpage += "<BODY>";
webpage += "</BODY>";
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend += webpage.length();
cipSend += "\r\n";
sendData(cipSend, 1000, DEBUG);
sendData(webpage, 1000, DEBUG);
String closeCommand = "AT+CIPCLOSE=";
closeCommand += connectionId; // append connection id
closeCommand += "\r\n";
sendData(closeCommand, 3000, DEBUG);
}
}
//delay(1000);
float hum;
float temp;
float temp2;
float pres;
float pres2;
float humAr;
float alt;
float tempM;
float tempSolo;
//Mede o tempo de duracao do sinal no pino de leitura(us)
hum = analogRead(pinA0_humSolo);
temp = dht.readTemperature();
temp2 = bmp.readTemperature();
pres = bmp.readPressure();
humAr = dht.readHumidity();
alt = bmp.readAltitude(101525);
sensors.requestTemperatures();
tempSolo = sensors.getTempCByIndex(0);
//calc
pres2 = pres / 100;
tempM = (temp + temp2) / 2;
// Atualiza valor da temperatura
display.fillRect(4,13, 25 , 10, 0);
display.setCursor(4,14);
display.println(tempM,1);
// Atualiza valor da umidade
display.fillRect(50,13, 23 , 10, 0);
display.setCursor(50,14);
display.println(humAr,1);
// Atualiza valor da pressao
display.fillRect(4, 37, 46 , 10, 0);
display.setCursor(11,38);
display.println(pres2,2);
display.display();
//adiciona a ultima leitura a string de gravacao
dtostrf(hum,6,2,dataString);
dtostrf(tempM,5,2,dataString2);
dtostrf(pres2,5,2,dataString3);
dtostrf(humAr,5,2,dataString4);
dtostrf(alt,5,2,dataString5);
dtostrf(tempSolo,5,2,dataString6);
if (meuArquivo = SD.open("log.txt",FILE_WRITE))
{/*
Serial.println("Gravou");
Serial.print("Hora: ");
Serial.print(rtc.getTimeStr());
Serial.print(" Data: ");
Serial.print(rtc.getDateStr(FORMAT_SHORT));
Serial.print(" ");
//Serial.print(rtc.getDOWStr(FORMAT_SHORT));
Serial.print(" Pres: ");
Serial.print(pres2);
Serial.print(" TempAr: ");
Serial.print(tempM);
Serial.print(" UmiAr: ");
Serial.print(humAr);
Serial.print(" TempSolo: ");
Serial.print(tempSolo);
Serial.print(" UmiSolo: ");
Serial.print(hum);
Serial.print(" Altitude: ");
Serial.println(alt);
*/
//Escreve no cartao SD por meio do objeto meuArquivo
meuArquivo.print(rtc.getTimeStr());
meuArquivo.print(" ");
meuArquivo.print(rtc.getDateStr(FORMAT_SHORT));
meuArquivo.print("|");
meuArquivo.print(dataString3);
meuArquivo.print("|");
meuArquivo.print(dataString2);
meuArquivo.print("|");
meuArquivo.print(dataString4);
meuArquivo.print("|");
meuArquivo.print(dataString6);
meuArquivo.print("|");
meuArquivo.print(dataString);
meuArquivo.print("|");
meuArquivo.println(dataString5);
meuArquivo.close();
}
else
{
// se o arquivo nao abrir, mostra msg de erro
Serial.println("Erro ao abrir log.txt");
}
delay(500);
}
String sendData(String command, const int timeout, boolean debug)
{
// Envio dos comandos AT para o modulo
String response = "";
esp8266.print(command);
long int time = millis();
while ( (time + timeout) > millis())
{
while (esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;
}