DHT22 + LCD 16x2 + ESP32-S3, simulados no Wokwi.

Dois sensores numa caixinha, um fio de dados.
16 bits de umidade · 16 de temperatura · 8 de verificação
Ninguém empurra a linha para cima.
Quem puxa é o resistor.
Sem o pull-up de 10 kΩ, a linha sobe devagar demais, os tempos saem errados e a leitura vira "Falha no sensor".
32 caracteres, 4 fios, 1 endereço.
Cada caractere é uma grade de 5 × 8. E você pode desenhar até 8 caracteres seus.
O trimpot azul da plaquinha ajusta o contraste. Tela vazia? Gire ele primeiro.
Os três resistores vão para o 3V3. Nunca para o 5V: os pinos do ESP32-S3 não toleram 5 V.
Um laboratório de eletrônica no navegador. Sem instalar nada, sem conta.
Os três estão em formacoes/2/wokwi/, prontos para colar.
wokwi.com/projects/new/esp32-s3sketch.ino + diagram.jsonDHT sensor library
LiquidCrystal I2Cbotão verdeTudo na coluna esquerda da placa.

Configurar, iniciar, repetir.
#include <Wire.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define PINO_DHT 12 // fio amarelo
#define TIPO_DHT DHT22
#define PINO_SDA 8 // I2C padrão do ESP32-S3
#define PINO_SCL 9
DHT dht(PINO_DHT, TIPO_DHT);
LiquidCrystal_I2C lcd(0x27, 16, 2); // endereço, colunas, linhas
Mude uma linha. Tudo que depende da montagem está no topo.
O endereço I2C do display.
0b01100
0b10010
0b10010
0b01100
0
0
0
0
byte grau[8] = { ... };
lcd.createChar(0, grau);
lcd.write(0);
Bit 1 = ponto aceso.
void setup() {
Serial.begin(115200);
Wire.begin(PINO_SDA, PINO_SCL);
dht.begin();
lcd.init();
lcd.backlight();
lcd.createChar(0, grau);
lcd.setCursor(0, 0);
lcd.print("LASER ESP32-S3");
lcd.setCursor(0, 1);
lcd.print("Iniciando...");
delay(2000); // o DHT22 precisa de ~2 s para a primeira leitura
lcd.clear();
}
A mensagem cobre os 2 s que o DHT22 leva para a primeira leitura.
void loop() {
float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();
if (isnan(umidade) || isnan(temperatura)) {
lcd.setCursor(0, 0);
lcd.print("Falha no sensor ");
Serial.println("Falha na leitura do DHT22");
} else {
isnan(): a leitura falhou. Mostre o erro, não um número inventado.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura, 1);
lcd.write(0); // o caractere de grau criado acima
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Umid: ");
lcd.print(umidade, 1);
lcd.print(" % ");
// ... envia o mesmo texto pelo Serial ...
delay(2000); // 1 leitura a cada 2 s
Os espaços em "C " apagam as sobras da leitura anterior.



Na simulação, clique no DHT22 e mova os controles de temperatura e umidade.
O que o Wokwi perdoa e o hardware não.
no GPIO, com a plaquinha em 5 V,
mesmo com os 4,7 kΩ para 3V3
Conversor de nível BSS138
ou remover os pull-ups da plaquinha
Teste: multímetro entre SDA e VCC da plaquinha. Entre 2 e 10 kΩ, há um pull-up.
for (byte endereco = 1; endereco < 127; endereco++) {
Wire.beginTransmission(endereco);
if (Wire.endTransmission() == 0) {
Serial.printf("Dispositivo em 0x%02X\n", endereco);
encontrados++;
}
}
Procurando dispositivos I2C...
Dispositivo em 0x27
Saída real no Wokwi.
Na sua placa pode aparecer 0x3F.
Pull-up de 10 kΩ, fio no GPIO12, VCC e GND.
Contraste, endereço, ou SDA e SCL trocados.
A energia chegou, o I2C não.
Falta o 5V ou o lcd.backlight().
Guarde a menor e a maior temperatura desde que a placa ligou.
Acenda o LED RGB do GPIO38 acima de 30 °C.
Mostre o índice de calor com computeHeatIndex().
Reescreva o loop() usando millis().
Apostila, código e arquivos do Wokwi em espdocs.cienciaembarcada.com.br/formacoes/2.