Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


Módulo SD Card com ESP8266








Nesta montagem temos um SD Card conectado no ESP8266. Colocamos um DHT22, que mede temperatura e umidade e envia essas informações para o cartão SD.







Ligado o circuito, ele mostra 43.40 de umidade e, de temperatura, 26.80. Toda vez que ele mostra aquela mensagem “abrindo o arquivo com sucesso” é porque ele rodou uma vez no loop. O que acontece aí é o seguinte: apenas os valores estão sendo gravados no arquivo log, ou seja, a mensagem "abrindo o arquivo com sucesso" está apenas como aviso, ela não é gravada.




WiFi ESP8266 NodeMcu ESP-12E



Aqui detalhamos o componente que utilizamos, neste caso o NodeMCU ESP12, juntamente com o datasheet desse dispositivo.



Sensor de umidade


Na sequência, exponho detalhes sobre este outro componente, o DHT22, com a respectiva pinagem.



Módulo SD Card

Este é o nosso módulo de SD Card. Como vocês podem ver pela pinagem, ele é conexão SPI.



Montagem

O diagrama de montagem conta com o leitor, o DHT22, o NodeMCU ESP12. Este último, escolhi porque precisa de uma quantidade de IOs razoável, ou seja, o ESP01 também daria certo para esta montagem.



Bibliotecas

Para essa montagem você precisa da biblioteca do DHT da própria IDE do Arduino. Basta acessar “Sketch> Incluir Biblioteca> Gerenciar Bibliotecas” que você baixa o DHT. A mesma coisa você tem que fazer para a Biblioteca SD.



Código Fonte

//biblioteca responsável pela comunicação com o Cartão SD
#include <SD.h>
//biblioteca responsável pela comunicação com o sensor DHT22
#include <DHT.h>

// pino de dados do DHT será ligado no D6 do esp
#define DHTPIN D2     
// tipo do sensor
#define DHTTYPE DHT22   

// construtor do objeto para comunicar com o sensor
DHT dht(DHTPIN, DHTTYPE);
 
//pino ligado ao CS do módulo SD Card
#define CS_PIN  D8;
O código-fonte utilizado na montagem é simples, somente para mostrar o SD Card funcionando. Toda a sofisticação você tem que inserir depois, podendo utilizar outros inúmeros recursos, mas que não cabem a este exemplo.



Setup

void setup()
{
  Serial.begin(9600);
  Serial.print("Inicializando o cartão SD...");

  //inicializa o objeto para comunicarmos com o sensor DHT
  dht.begin();
  
  // verifica se o cartão SD está presente e se pode ser inicializado
  if (!SD.begin(CS_PIN)) {
    Serial.println("Falha, verifique se o cartão está presente.");
    //programa encerrrado
    return;
  }
  
  //se chegou aqui é porque o cartão foi inicializado corretamente  
  Serial.println("Cartão inicializado.");

}


Na função Setup, vamos iniciar nosso objeto para comunicar com o sensor e também inicializar o SD Card.



Loop
  //faz a leitura da umidade
  float umidade = dht.readHumidity();
  Serial.print("Umidade: ");
  Serial.println(umidade);
  //faz a leitura da temperatura
  float temperatura = dht.readTemperature();
  Serial.print("Temperatura: ");
  Serial.println(temperatura);

  File dataFile = SD.open("LOG.txt", FILE_WRITE);
  // se o arquivo foi aberto corretamente, escreve os dados nele
  if (dataFile) {
    Serial.println("O arquivo foi aberto com sucesso.");
      //formatação no arquivo: linha a linha >> UMIDADE | TEMPERATURA
      dataFile.print(umidade);
      dataFile.print(" | ");
      dataFile.println(temperatura);

      //fecha o arquivo após usá-lo
      dataFile.close();
  }
  // se o arquivo não pôde ser aberto os dados não serão gravados.
  else {
    Serial.println("Falha ao abrir o arquivo LOG.txt");
  }

  //intervalo de espera para uma nova leitura dos dados.
  delay(2000);

}


No loop, lemos umidade e jogamos dentro do float de umidade, lemos temperatura e jogamos dentro do float de temperatura. Isto é muito parecido com a linguagem C padrão.




Arquivos para download:






Postar um comentário

9 Comentários

  1. Boa tarde, posso usar este exemplo no esp32? Obrigado!

    ResponderExcluir
  2. estou precisando colocar Cartao SD no esp 8266 com rfid mas as portas do cartao SD e a mesma do RFID
    COMO USAR OS 2 JUNTOS

    ResponderExcluir
  3. Prezados, tentei fazer o mesmo projeto do vídeo (DHT+SdCard+ESP32). Montei o circuito conforme demostrado porém ao carregar o código para o ESP32 aparece a seguinte mensagem de erro na Arduino IDE, sem finalizar o carregamento:

    "A fatal error occurred: Timed out waiting for packet content"

    Notei que ao desconectar o pino MISO, não aparece o erro e o código é carregado no ESP32. Tentei carregar o código dessa forma (sem o conectar o pino MISO no ESP32) e depois de carregado conectar o pino MISO, porém ainda assim não consegui exito.

    Alguém poderia me ajudar?

    ResponderExcluir
  4. Ola FK; Tudo bem.
    Já fiz tudo que aprendi (acho que foi pouco então...)para ligar o NodeMCU SILABS em uma plaquinha SD Card da Catalex. Montei exatamente como no seu exemplo, mas da "Falha ao abrir o arquivo log.txt. A DHT22 funcionou de primeira. A SD card funcionou no Arduino Uno, mas eu não consigo ligar ela NodeMCU nem a paulada. A única coisa de diferente que ela tem em relação a que vc usou no exemplo são os pino, que no seu tem 16 pinos, a minha SD Card tem apenas seis, não tenho o 5v. Será que essa placa SD Card da Catalex com 6 pinos não vai funcionar? Pode me ajudar. Obrigado. César

    ResponderExcluir
    Respostas
    1. ccsar, eu consegui aqui com um NodeMCU 8266 Amica, super de boa. Se quiser olha aqui.

      https://github.com/sganzerla/sd-card-iot/tree/master/simple-write

      Excluir
  5. Tive o seguinte erro, espero poder ajudar alguém:

    esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
    esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

    Acontece sempre quando você conecta algo no pino D8 do Esp8266. Se tirar a parte que conecta ao pino D8 o sketch carrega, mas do contrário dá esse erro. Não sei como resolver ainda.

    ResponderExcluir