Display de temperatura com ESP32-C6, DHT11 e TM1637

Posted by

Hoje vamos implementar um display de temperatura com ESP32-C6, DHT11 e TM1637. Utilizaremos a placa dev board ESP32-C6 que eu desenvolvi (detalhes aqui), seu sensor de temperatura onboard DHT11. Além disso também usaremos um display 7 segmentos 4 dígitos TM1637 e um LED para ficar piscando.

O diagrama esquemático está abaixo, o DHT11 é conectado ao pino D3 internamente e o LED vai no pino D10. O display TM1637 usa dois pinos, DIO no D0 e CLK no D1 da placa ESP32-C6.

Projeto de termômetro com ESP32-C6, DHT11 e display TM1637
Projeto de termômetro com ESP32-C6, DHT11 e display TM1637

A montagem é simples, minha placa dev board ESP32-C6 é encaixada na protoboard e quase não ocupa espaço. Repare no LED vermelho sobre a protoboard e os cabos branco e cinza saindo para o display TM1637.

ESP32-C6 com sensor DHT11 e display TM1637
ESP32-C6 com sensor DHT11 e display TM1637

O código é visto abaixo, é uma mistura deste e deste sketch. Tanto o sketch do sensor DHT11 como do display TM1637 são bem conhecidos, sem segredos. A única parte mais interessante é que fiz o código sem usar delay(), uso contagem de tempo com micros() para escalonar as tarefas.

#include <Arduino.h>
#include <TM1637Display.h>

#include "DHT.h"

#define DHTPIN D3     // Digital pin connected to the DHT sensor

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

int tempcelsius;

// Module connection pins (Digital Pins)
#define CLK D1
#define DIO D0


const uint8_t cletter[] = {
	SEG_A | SEG_D | SEG_E | SEG_F            //Letter 'C'
	};

TM1637Display display(CLK, DIO);

long currenttime;
long oldtime= 0;
int sweepcounter;
int lastcounter;

void setup() {

  display.clear();
  dht.begin();
  pinMode(D10, OUTPUT);

}

void loop() {

currenttime= micros();
if(currenttime - oldtime >= 100000){
  oldtime= micros();
  sweepcounter++;
  if(sweepcounter - lastcounter == 5){
    lastcounter= sweepcounter;
    digitalWrite(D10, !digitalRead(D10));
  }
  if(sweepcounter == 1){
   
    display.setBrightness(0x0f);
    if(sweepcounter == 1){
      display.clear();
    }
    
  }else if(sweepcounter == 50){

    // Read temperature as Celsius (the default)
    float t = dht.readTemperature();
    tempcelsius= int(round(t));
    }
    

    display.showNumberDecEx(tempcelsius, false, 1, 3);
    display.setSegments(cletter, 1, 3); //Letter 'C'
    
  }else if(sweepcounter == 70){
    sweepcounter= 0;
    lastcounter= 0;
  }else{

  }
  }
    

Palavras finais

A placa dev board ESP32-C6 tem todo o poder das ESP32, utilizando o circuito interno da linha Xiao da SeedStudio. Isso faz com que ela utilize poucos componentes externos, tanto que coloquei sensores e até um LED endereçável na placa.

Implementar um display de temperatura com o circuito proposto ficou super tranquilo. Ainda mais utilizando todo poder e facilidade da IDE do Arduino.

Uma resposta

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *