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.
Aqui detalhamos o componente que utilizamos, neste caso o NodeMCU ESP12, juntamente com o datasheet desse dispositivo.
Sensor de umidade
Módulo SD Card
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:
10 Comentários
Boa tarde, posso usar este exemplo no esp32? Obrigado!
ResponderExcluirBom dia Marcos.
ExcluirPode sim, eu usei e funciona perfeitamente.
Quais pinos devem ser usados no esp32?
Excluirestou precisando colocar Cartao SD no esp 8266 com rfid mas as portas do cartao SD e a mesma do RFID
ResponderExcluirCOMO USAR OS 2 JUNTOS
Rogerio, você conseguiu usar as 2 portas juntas ?
ExcluirPrezados, 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:
ResponderExcluir"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?
Ola FK; Tudo bem.
ResponderExcluirJá 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
ccsar, eu consegui aqui com um NodeMCU 8266 Amica, super de boa. Se quiser olha aqui.
Excluirhttps://github.com/sganzerla/sd-card-iot/tree/master/simple-write
Tive o seguinte erro, espero poder ajudar alguém:
ResponderExcluiresptool.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.
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