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.
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.
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.
Deixe um comentário