Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "DHT.h" // Biblioteca Adafruit para sensor de temperatura DHT11
- #include <SPI.h> // Biblioteca de comunicação SPI Nativa
- #include <SD.h> // Biblioteca de comunicação com cartão SD Nativa
- #include <virtuabotixRTC.h> // Carrega a biblioteca virtuabotixRTC
- virtuabotixRTC myRTC(D0, D1, D2); // Determina os pinos ligados ao modulo myRTC(clock, data, rst)
- #define DHTPIN 0 // Define para o pino D3 do nodeMCU -> D3
- #define DHTTYPE DHT11 // DHT 11 que será utilizado para comunicação
- const int chipSelect = 4; // Constante que indica em qual pino está conectado o Chip Select do módulo de comunicação
- DHT dht(DHTPIN, DHTTYPE); // Objeto responsável pela comunicação microcontrolador/sensor
- File dataFile; // Objeto responsável por escrever/Ler do cartão SD
- bool cartaoOk = true;
- void setup()
- {
- Serial.begin(9600); // Inicialização da porta de comunicação Serial
- // Informacoes iniciais de data e hora
- // Apos setar as informacoes, comente a linha abaixo
- // (segundos, minutos, hora, dia da semana, dia do mes, mes, ano)
- //myRTC.setDS1302Time(30, 03, 14, 6, 15, 12, 2017);
- dht.begin(); // Inicialização do objeto de comunicação com sensor
- // Se não for possível se comunicar com o cartão SD o código não deve prosseguir
- if (!SD.begin(chipSelect)) {
- Serial.println("Erro na leitura do arquivo não existe um cartão SD ou o módulo está conectado corretamente ?");
- cartaoOk = false;
- return;
- }
- //Escreve o Cabeçalho no arquivo datalog.csv
- File logFile = SD.open("datalog.csv", FILE_WRITE);
- if (logFile)
- {
- //logFile.println(", , ,"); //Just a leading blank line, incase there was previous data
- logFile.println("TEMPERATURA (CELSIUS); UMIDADE (%); DIAS; MESES; ANOS; HORAS; MINUTOS; SEGUNDOS");
- logFile.close();
- }
- else
- {
- Serial.println("Não foi possível abrir o arquivo de LOG");
- return;
- }
- }
- void loop()
- {
- // Le as informacoes do CI
- myRTC.updateTime();
- // Imprime as informacoes no serial monitor
- Serial.print("Data : ");
- // Chama a rotina que imprime o dia da semana
- imprime_dia_da_semana(myRTC.dayofweek);
- Serial.print(", ");
- Serial.print(myRTC.dayofmonth);
- Serial.print("/");
- Serial.print(myRTC.month);
- Serial.print("/");
- Serial.print(myRTC.year);
- Serial.print(" ");
- Serial.print("Hora : ");
- // Adiciona um 0 caso o valor da hora seja <10
- if (myRTC.hours < 10)
- {
- Serial.print("0");
- }
- Serial.print(myRTC.hours);
- Serial.print(":");
- // Adiciona um 0 caso o valor dos minutos seja <10
- if (myRTC.minutes < 10)
- {
- Serial.print("0");
- }
- Serial.print(myRTC.minutes);
- Serial.print(":");
- // Adiciona um 0 caso o valor dos segundos seja <10
- if (myRTC.seconds < 10)
- {
- Serial.print("0");
- }
- Serial.println(myRTC.seconds);
- delay( 1000);
- // Caso o cartão esteja ok é criado um arquivo no cartão SD com o nome datalog.csv em modo de escrita
- if (cartaoOk){
- dataFile = SD.open("datalog.csv", FILE_WRITE);
- Serial.println("Cartão SD Inicializado para escrita :D ");
- }
- //Limpando Variáveis
- String leitura = ""; // Limpo campo contendo string que será armazenada em arquivo CSV
- float temperatura = 0 ; // Limpo variável de temperatura a cada nova leitura
- float umidade = 0; // Limpo variável de umidade a cada nova leitura
- float dias = 0; // Limpo variável de dias a cada nova leitura
- float meses = 0; // Limpo variável de meses a cada nova leitura
- float anos = 0; // Limpo variável de anos a cada nova leitura
- float horas = 0; // Limpo variável de horas a cada nova leitura
- float minutos = 0; // Limpo variável de minutos a cada nova leitura
- float segundos = 0; // Limpo variável de segundos a cada nova leitura
- dias = myRTC.dayofmonth;
- meses = myRTC.month;
- anos = myRTC.year;
- horas = myRTC.hours;
- minutos = myRTC.minutes;
- segundos = myRTC.seconds;
- //Leitura do sensor
- temperatura = dht.readTemperature(); // Função que realiza a leitura da temperatura do sensor dht11
- umidade = dht.readHumidity(); // Função que realiza a leitura da umidade do sensor dht11
- // Caso os valores lidos do sensor não sejam válidos executamos as seguintes linhas
- if (isnan(temperatura) || isnan(umidade)){
- Serial.println ("Falha na leitura do sensor"); // Informar ao usuário que houve uma falha na leitura do sensor
- delay(1500); // Aguardamos 1,5 segundos
- return ; // Retornamos a função para o seu ponto inicial
- }
- // Se tudo estiver ok, escrevemos os dados a serem armazenados em uma String
- // leitura = String(millis()) + ";" + String(temperatura) + ";" + String(umidade) + ";" + String(data)+";";
- leitura = String(temperatura) + ";" + String(umidade) + ";" + String(dias) + ";" + String(meses) + ";" + String(anos) + ";" + String(horas)+ ";" + String(minutos) + ";" + String(segundos) + ";" ;
- // Se o arquivo estiver realmente aberto para leitura executamos as seguintes linhas de código
- if (dataFile) {
- Serial.println(leitura); // Mostramos no monitor a linha que será escrita
- dataFile.println(leitura); // Escrevemos no arquivos e pulamos uma linha
- dataFile.close(); // Fechamos o arquivo
- }
- delay(300000); // Aguardamos 1,5 segundos para executar o loop novamente
- }
- void imprime_dia_da_semana(int dia)
- {
- switch (dia)
- {
- case 1:
- Serial.print("Domingo");
- break;
- case 2:
- Serial.print("Segunda");
- break;
- case 3:
- Serial.print("Terca");
- break;
- case 4:
- Serial.print("Quarta");
- break;
- case 5:
- Serial.print("Quinta");
- break;
- case 6:
- Serial.print("Sexta");
- break;
- case 7:
- Serial.print("Sabado");
- break;
- }
- }
Add Comment
Please, Sign In to add comment