0
respostas

Leitura do Módulo DHT11 e exibição no Display 128x64

Tanto a parte do leitor DHT quanto do Display não funcionaram corretamente, precisei fazer alguns ajustes para conseguir fazer funcionar, segue o código abaixo:

/* Leitor de Temperatura e Umidade utilizando um sensor DHT 11 e com o valor impresso em um Display I2C de 128 x 64 */

// Leitor de Temperatura DHT 11
#include <DHT.h>
#define DHTPIN D3
#define DHTTYPE DHT11                // Mudar caso seja outro sensor DHT  
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;
float hic;

// Display
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128            // Largura do display OLED, em pixels
#define SCREEN_HEIGHT 64            // Altura do display OLED, em pixels

#define OLED_RESET LED_BUILTIN
#define SCREEN_ADDRESS 0x3D
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Setup
void setup() {
  Serial.begin(115200);
  dht.begin();
  configurarDisplay();
}

// Loop
void loop() {
 medirTemperaturaUmidade();
 mostrarTemperaturaUmidade();
}

// Funções auxiliares
void medirTemperaturaUmidade(){
   delay(2000);

  h = dht.readHumidity();                   // Lendo a Umidade
  t = dht.readTemperature();                // Lendo a Temperatura em Celsius
  hic = dht.computeHeatIndex(t, h, false);  // Computando a Temperatura em Celsius
}

// Configuração do Display
void configurarDisplay(){
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextColor(WHITE);
  display.clearDisplay(); 
}

// Mostra a Temperatura e Umidade no Display
void mostrarTemperaturaUmidade(){
  mostrarMensagemNoDisplay("Temperatura", (t), " C");
  mostrarMensagemNoDisplay("Umidade", (h), " %");
}

// Configura os parâmetros do display para exibir a Temperatura em Celsius (C) e Umidade em Porcentagem (%)
void mostrarMensagemNoDisplay(const char* texto1, int medicao, const char* texto2){
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print(texto1);
  display.setTextSize(5);
  display.setCursor(20,20);
  display.print(medicao);
  display.setTextSize(2);
  display.print(texto2);
  display.display();
  delay(2000);
}