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

10 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
  6. Alguem conseguiu fazer a leitura do modulo microSD num ESP32? Quando eu seleciono a placa esp 32 dev module no arduino IDE o #include SD.h muda de cor como se nao fosse lido por esse modelo de placa e quando carrego o codigo ele mostra a mensagem que não foi possivel ler o arquivo txt. O problema pode estar no modelo da placa ou na IDE?

    ResponderExcluir