Slides
31 slides para projetar direto do navegador, com navegação por teclado e panorama.
Um DHT22, um display LCD 16x2 e um ESP32-S3, simulados no Wokwi com o framework Arduino. Dois protocolos de comunicação, um programa curto e os cuidados elétricos que fazem o circuito funcionar também fora da tela.
Comece por aqui
Para apresentar, para estudar e para pôr a mão no circuito. Os PDFs são a versão final, para quem só quer o material pronto.
Roteiro da aula
Cada parte abre os slides direto no ponto em que ela começa.
Todos os arquivos
Tudo o que foi usado na aula, com o que é cada arquivo e para que serve.
// Formação em ESP32 · LASER · Módulo 2
// Estação de temperatura e umidade: DHT22 + LCD 16x2 I2C + ESP32-S3
#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
// Símbolo de grau: 8 linhas de 5 pixels
byte grau[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0, 0, 0, 0 };
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();
}
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 {
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(" % ");
Serial.printf("Temperatura: %.1f C | Umidade: %.1f %%\n", temperatura, umidade);
}
delay(2000); // o DHT22 aceita no máximo uma leitura a cada 2 s
}{
"version": 1,
"author": "Lucas Rayan Guerra",
"editor": "wokwi",
"parts": [
{
"type": "board-esp32-s3-devkitc-1",
"id": "esp",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-dht22",
"id": "dht",
"top": 15,
"left": -250,
"attrs": {
"temperature": "26.5",
"humidity": "62"
}
},
{
"type": "wokwi-lcd1602",
"id": "lcd",
"top": 320,
"left": -60,
"attrs": {
"pins": "i2c"
}
},
{
"type": "wokwi-resistor",
"id": "r_dht",
"top": 9,
"left": -173,
"rotate": 90,
"attrs": {
"value": "10000"
}
},
{
"type": "wokwi-resistor",
"id": "r_sda",
"top": 9,
"left": -83,
"rotate": 90,
"attrs": {
"value": "4700"
}
},
{
"type": "wokwi-resistor",
"id": "r_scl",
"top": 9,
"left": -63,
"rotate": 90,
"attrs": {
"value": "4700"
}
}
],
"connections": [
[
"esp:TX",
"$serialMonitor:RX",
"",
[]
],
[
"esp:RX",
"$serialMonitor:TX",
"",
[]
],
[
"lcd:VCC",
"esp:5V",
"red",
[
"h-20",
"v-100"
]
],
[
"lcd:GND",
"esp:GND.1",
"black",
[
"h-30",
"v-90"
]
],
[
"lcd:SDA",
"esp:8",
"blue",
[
"h-40",
"v-200"
]
],
[
"lcd:SCL",
"esp:9",
"purple",
[
"h-50",
"v-170"
]
],
[
"dht:VCC",
"r_dht:1",
"red",
[
"v12",
"h-25",
"v-159",
"h100"
]
],
[
"dht:SDA",
"esp:12",
"gold",
[
"v77"
]
],
[
"dht:GND",
"esp:GND.1",
"black",
[
"v118"
]
],
[
"r_dht:1",
"esp:3V3.1",
"red",
[]
],
[
"r_dht:2",
"esp:12",
"gold",
[
"v181"
]
],
[
"r_sda:1",
"esp:3V3.1",
"red",
[]
],
[
"r_sda:2",
"esp:8",
"blue",
[
"v124"
]
],
[
"r_scl:1",
"esp:3V3.1",
"red",
[]
],
[
"r_scl:2",
"esp:9",
"purple",
[
"v152"
]
]
],
"dependencies": {}
}DHT sensor library
Adafruit Unified Sensor
LiquidCrystal I2C// Scanner I2C: lista o endereço de cada dispositivo no barramento.
// Use antes do programa principal se o LCD não mostrar nada.
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin(8, 9); // SDA, SCL
delay(500);
Serial.println("Procurando dispositivos I2C...");
int encontrados = 0;
for (byte endereco = 1; endereco < 127; endereco++) {
Wire.beginTransmission(endereco);
if (Wire.endTransmission() == 0) {
Serial.printf("Dispositivo em 0x%02X\n", endereco);
encontrados++;
}
}
if (encontrados == 0) Serial.println("Nenhum dispositivo. Confira SDA, SCL e alimentacao.");
}
void loop() {}Como usar
Abra slide.html no navegador. O palco é 16:9 e se ajusta a qualquer tela ou projetor.
A versão online se pagina em A4 sozinha ao abrir, o que leva alguns segundos.
Para papel, prefira o PDF pronto: ele já sai com margens, cores e quebras de página certas, sem configurar a impressora.
sketch.ino e o diagram.json nas abas de mesmo nome.scanner-i2c.ino para conferir o endereço.