Release / Plano (reaproveitar a imagem?) (push) Successful in 7s
CI / Lint e auditorias (push) Successful in 1m48s
CI / Trivy (dependências e segredos) (push) Successful in 12s
CI / Imagem Docker (linux/arm64) (push) Failing after 2m27s
Release / ci (push) Failing after 4m31s
Release / Publica a imagem (linux/arm64) (push) Skipped
Release / Cria a release no Gitea (push) Skipped
- Formação 2 da LASER: slides visuais, apostila, projeto do Wokwi e scanner I2C, validados no simulador (leitura normal, temperatura negativa e sensor desconectado). Circuito com pull-ups de 10 kΩ e 4,7 kΩ para 3V3 e aviso sobre os pull-ups de 5 V da plaquinha PCF8574. - PDFs prontos dos slides e das apostilas dos módulos 1 e 2; slides-pdf agora também exporta a apostila. - Página de entrada em /formacoes e /formacoes/N, gerada por scripts/formacoes-viewer.mjs a partir do formacao.json de cada pasta. - A apostila passou de index.html para apostila.html. - Corrige o link do Fritzing da apostila 1 (/apostilas/1 não existe). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
573 lines
25 KiB
HTML
573 lines
25 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="pt-BR">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>LASER · Formação em ESP32 · Módulo 2: Estação de temperatura e umidade</title>
|
||
<meta name="description" content="Slides, apostila, código e projeto do Wokwi do módulo 2 da formação em ESP32 da LASER: DHT22, LCD 16x2 I2C e ESP32-S3.">
|
||
<meta name="author" content="Lucas Rayan Guerra">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;700;800&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
||
<link rel="icon" type="image/svg+xml" href="/marca/espdocs-marca.svg">
|
||
<link rel="stylesheet" href="/formacoes/assets/viewer.css">
|
||
</head>
|
||
<body>
|
||
<!-- Gerado por scripts/formacoes-viewer.mjs a partir do formacao.json. Não edite à mão. -->
|
||
|
||
<header class="topo">
|
||
<div class="envoltorio">
|
||
<a href="/formacoes"><img src="/formacoes/assets/laser.svg" alt="LASER"></a>
|
||
<span class="topo-liga">Liga Acadêmica de Sistemas Embarcados<br>Centro de Informática · UFPE</span>
|
||
<nav><a href="#arquivos">Arquivos</a><a href="#como-usar">Como usar</a><a href="/formacoes">Formações</a></nav>
|
||
</div>
|
||
</header>
|
||
|
||
<main>
|
||
<section class="abertura">
|
||
<div class="envoltorio">
|
||
<div>
|
||
<div class="selo">Formação em ESP32 · Módulo 2</div>
|
||
<h1>Estação de<strong>temperatura e umidade</strong></h1>
|
||
<p class="abertura-sub">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.</p>
|
||
<ul class="fichas"><li>Duração: <b>2 horas</b></li><li>Formato: <b>presencial</b></li><li>Simulador: <b>Wokwi</b></li><li>Framework: <b>Arduino</b></li></ul>
|
||
<div class="acoes">
|
||
<a class="botao primario" href="/formacoes/2/slide.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 5v14l11-7z"/></svg>Apresentar os slides</a>
|
||
<a class="botao" href="/formacoes/2/apostila.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 6c-2-1.5-5-2-8-1.5v14c3-.5 6 0 8 1.5 2-1.5 5-2 8-1.5v-14c-3-.5-6 0-8 1.5zM12 6v14"/></svg>Ler a apostila</a>
|
||
<a class="botao" href="#baixar"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12M6 10l6 6 6-6M5 20h14"/></svg>Baixar em PDF</a>
|
||
</div>
|
||
</div>
|
||
<div class="previas">
|
||
<a class="p-apostila" href="/formacoes/2/apostila.html" aria-label="Abrir a apostila"><img src="/formacoes/2/previa-apostila.jpg" alt="Capa da apostila do módulo 2" width="640" height="905"></a>
|
||
<a class="p-slides" href="/formacoes/2/slide.html" aria-label="Abrir os slides"><img src="/formacoes/2/previa-slides.jpg" alt="Capa dos slides do módulo 2" width="960" height="540"></a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<hr class="feixe">
|
||
|
||
<section class="bloco" id="baixar">
|
||
<div class="envoltorio">
|
||
<p class="rotulo">Comece por aqui</p>
|
||
<h2>Três formas de usar este material</h2>
|
||
<p class="bloco-sub">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.</p>
|
||
<div class="portas">
|
||
<article class="porta">
|
||
<a class="porta-imagem" href="/formacoes/2/slide.html"><img src="/formacoes/2/previa-slides.jpg" alt="" loading="lazy"></a>
|
||
<div class="porta-corpo">
|
||
<h3>Slides</h3>
|
||
<p>31 slides para projetar direto do navegador, com navegação por teclado e panorama.</p>
|
||
<div class="porta-meta">PDF · 31 págs · 1,6 MB</div>
|
||
<div class="acoes">
|
||
<a class="botao pequeno primario" href="/formacoes/2/slide.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 5v14l11-7z"/></svg>Apresentar</a>
|
||
<a class="botao pequeno" href="/formacoes/2/LASER-ESP32-Modulo-2-Slides.pdf" download><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12M6 10l6 6 6-6M5 20h14"/></svg>PDF</a>
|
||
</div>
|
||
</div>
|
||
</article>
|
||
<article class="porta">
|
||
<a class="porta-imagem" href="/formacoes/2/apostila.html"><img src="/formacoes/2/previa-apostila.jpg" alt="" loading="lazy"></a>
|
||
<div class="porta-corpo">
|
||
<h3>Apostila</h3>
|
||
<p>O conteúdo completo, com explicações, tabelas e o código comentado, paginado em A4.</p>
|
||
<div class="porta-meta">PDF · 20 págs · 761 KB</div>
|
||
<div class="acoes">
|
||
<a class="botao pequeno primario" href="/formacoes/2/apostila.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 6c-2-1.5-5-2-8-1.5v14c3-.5 6 0 8 1.5 2-1.5 5-2 8-1.5v-14c-3-.5-6 0-8 1.5zM12 6v14"/></svg>Ler</a>
|
||
<a class="botao pequeno" href="/formacoes/2/LASER-ESP32-Modulo-2-Apostila.pdf" download><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12M6 10l6 6 6-6M5 20h14"/></svg>PDF</a>
|
||
</div>
|
||
</div>
|
||
</article>
|
||
<article class="porta">
|
||
<a class="porta-imagem clara" href="/formacoes/2/circuito-wokwi.png" target="_blank" rel="noopener"><img src="/formacoes/2/circuito-wokwi.png" alt="" loading="lazy"></a>
|
||
<div class="porta-corpo">
|
||
<h3>Projeto no Wokwi</h3>
|
||
<p>O circuito e o código desta formação, testados no simulador: leitura normal, temperatura negativa e sensor desconectado.</p>
|
||
<div class="porta-meta">4 arquivos · simule sem instalar nada</div>
|
||
<div class="acoes"><a class="botao pequeno primario" href="/formacoes/2/modulo-2-wokwi.zip" download><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12M6 10l6 6 6-6M5 20h14"/></svg>Baixar o projeto</a><a class="botao pequeno" href="https://wokwi.com/projects/new/esp32-s3" rel="noopener"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg>Abrir o Wokwi</a></div>
|
||
</div>
|
||
</article>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="bloco" id="roteiro">
|
||
<div class="envoltorio">
|
||
<p class="rotulo">Roteiro da aula</p>
|
||
<h2>6 partes, 31 slides</h2>
|
||
<p class="bloco-sub">Cada parte abre os slides direto no ponto em que ela começa.</p>
|
||
<ol class="roteiro">
|
||
<li><a href="/formacoes/2/slide.html#4"><b>1</b><span>O DHT22<small>slide 4 · 5 slides</small></span></a></li>
|
||
<li><a href="/formacoes/2/slide.html#9"><b>2</b><span>LCD e I2C<small>slide 9 · 5 slides</small></span></a></li>
|
||
<li><a href="/formacoes/2/slide.html#14"><b>3</b><span>Wokwi<small>slide 14 · 3 slides</small></span></a></li>
|
||
<li><a href="/formacoes/2/slide.html#17"><b>4</b><span>Montagem<small>slide 17 · 2 slides</small></span></a></li>
|
||
<li><a href="/formacoes/2/slide.html#19"><b>5</b><span>O programa<small>slide 19 · 7 slides</small></span></a></li>
|
||
<li><a href="/formacoes/2/slide.html#26"><b>6</b><span>Para a bancada<small>slide 26 · 6 slides</small></span></a></li>
|
||
</ol>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="bloco" id="arquivos">
|
||
<div class="envoltorio">
|
||
<p class="rotulo">Todos os arquivos</p>
|
||
<h2>O que tem nesta formação</h2>
|
||
<p class="bloco-sub">Tudo o que foi usado na aula, com o que é cada arquivo e para que serve.</p>
|
||
|
||
<div class="grupo-arquivos">
|
||
<h3>Material de aula</h3>
|
||
<ul class="arquivos">
|
||
<li class="arquivo">
|
||
<div class="icone "><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 5h18v12H3z"/><path d="M8 21h8M12 17v4"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">slide.html</div>
|
||
<div class="arquivo-desc">Os slides da formação. Abrem no navegador, em tela cheia, prontos para projetar.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">72 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/slide.html">Abrir</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone "><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 4.5A1.5 1.5 0 0 1 5.5 3H20v16H5.5A1.5 1.5 0 0 0 4 20.5z"/><path d="M4 20.5A1.5 1.5 0 0 0 5.5 22H20"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">apostila.html</div>
|
||
<div class="arquivo-desc">A apostila completa, paginada em A4 no próprio navegador, com o passo a passo e o código comentado.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">43 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/apostila.html">Abrir</a></div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="grupo-arquivos">
|
||
<h3>Para baixar e imprimir</h3>
|
||
<ul class="arquivos">
|
||
<li class="arquivo">
|
||
<div class="icone pdf"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H6v18h12V7z"/><path d="M14 3v4h4"/><path d="M9 13h6M9 17h4"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">LASER-ESP32-Modulo-2-Slides.pdf</div>
|
||
<div class="arquivo-desc">Os slides em PDF 16:9, um slide por página.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">31 págs · 1,6 MB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/LASER-ESP32-Modulo-2-Slides.pdf" target="_blank" rel="noopener">Abrir</a><a href="/formacoes/2/LASER-ESP32-Modulo-2-Slides.pdf" download>Baixar</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone pdf"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H6v18h12V7z"/><path d="M14 3v4h4"/><path d="M9 13h6M9 17h4"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">LASER-ESP32-Modulo-2-Apostila.pdf</div>
|
||
<div class="arquivo-desc">A apostila em PDF A4, pronta para imprimir.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">20 págs · 761 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/LASER-ESP32-Modulo-2-Apostila.pdf" target="_blank" rel="noopener">Abrir</a><a href="/formacoes/2/LASER-ESP32-Modulo-2-Apostila.pdf" download>Baixar</a></div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="grupo-arquivos">
|
||
<h3>Projeto do Wokwi</h3>
|
||
<ul class="arquivos">
|
||
<li class="arquivo">
|
||
<div class="icone codigo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H6v18h12V7z"/><path d="M14 3v4h4"/><path d="M11 6h1M11 9h1M11 12h1M10.5 15h2v3h-2z"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">modulo-2-wokwi.zip</div>
|
||
<div class="arquivo-desc">Os quatro arquivos abaixo num só pacote.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">2 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/modulo-2-wokwi.zip" download>Baixar</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone codigo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 8-4 4 4 4M16 8l4 4-4 4M13.5 5l-3 14"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">sketch.ino</div>
|
||
<div class="arquivo-desc">O programa da estação: lê o DHT22 e escreve no LCD a cada 2 segundos.</div>
|
||
<details class="codigo-fonte"><summary>Ver código</summary><pre><code>// 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
|
||
}</code></pre></details>
|
||
</div>
|
||
<div class="arquivo-tam">2 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/wokwi/sketch.ino" download>Baixar</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone codigo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 8-4 4 4 4M16 8l4 4-4 4M13.5 5l-3 14"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">diagram.json</div>
|
||
<div class="arquivo-desc">O circuito: peças, posições, fios e os três resistores de pull-up.</div>
|
||
<details class="codigo-fonte"><summary>Ver código</summary><pre><code>{
|
||
"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": {}
|
||
}</code></pre></details>
|
||
</div>
|
||
<div class="arquivo-tam">2 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/wokwi/diagram.json" download>Baixar</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone codigo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 8-4 4 4 4M16 8l4 4-4 4M13.5 5l-3 14"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">libraries.txt</div>
|
||
<div class="arquivo-desc">As bibliotecas que o Wokwi instala antes de compilar.</div>
|
||
<details class="codigo-fonte"><summary>Ver código</summary><pre><code>DHT sensor library
|
||
Adafruit Unified Sensor
|
||
LiquidCrystal I2C</code></pre></details>
|
||
</div>
|
||
<div class="arquivo-tam">61 B</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/wokwi/libraries.txt" download>Baixar</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone codigo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 8-4 4 4 4M16 8l4 4-4 4M13.5 5l-3 14"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">scanner-i2c.ino</div>
|
||
<div class="arquivo-desc">Diagnóstico: lista o endereço de cada dispositivo no barramento I2C.</div>
|
||
<details class="codigo-fonte"><summary>Ver código</summary><pre><code>// 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() {}</code></pre></details>
|
||
</div>
|
||
<div class="arquivo-tam">664 B</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/wokwi/scanner-i2c.ino" download>Baixar</a></div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="grupo-arquivos">
|
||
<h3>Imagens da simulação</h3>
|
||
<ul class="arquivos">
|
||
<li class="arquivo">
|
||
<div class="icone imagem"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="2"/><path d="m21 17-5-5-9 8"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">circuito-wokwi.png</div>
|
||
<div class="arquivo-desc">O circuito completo rodando no Wokwi.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">44 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/circuito-wokwi.png" target="_blank" rel="noopener">Abrir</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone imagem"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="2"/><path d="m21 17-5-5-9 8"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">lcd-funcionando.png</div>
|
||
<div class="arquivo-desc">Teste 1: leitura normal, 26,5 °C e 62 %.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">8 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/lcd-funcionando.png" target="_blank" rel="noopener">Abrir</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone imagem"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="2"/><path d="m21 17-5-5-9 8"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">lcd-frio.png</div>
|
||
<div class="arquivo-desc">Teste 2: temperatura negativa, −5,2 °C e 88,4 %.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">8 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/lcd-frio.png" target="_blank" rel="noopener">Abrir</a></div>
|
||
</li>
|
||
<li class="arquivo">
|
||
<div class="icone imagem"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="2"/><path d="m21 17-5-5-9 8"/></svg></div>
|
||
<div>
|
||
<div class="arquivo-nome">lcd-falha.png</div>
|
||
<div class="arquivo-desc">Teste 3: fio de dados desconectado, erro detectado.</div>
|
||
|
||
</div>
|
||
<div class="arquivo-tam">7 KB</div>
|
||
<div class="arquivo-acoes"><a href="/formacoes/2/lcd-falha.png" target="_blank" rel="noopener">Abrir</a></div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="bloco" id="como-usar">
|
||
<div class="envoltorio">
|
||
<p class="rotulo">Como usar</p>
|
||
<h2>Passo a passo</h2>
|
||
<div class="guias">
|
||
<div class="guia">
|
||
<h3>Apresentando os slides</h3>
|
||
<p>Abra <a href="/formacoes/2/slide.html">slide.html</a> no navegador. O palco é 16:9 e se ajusta a qualquer tela ou projetor.</p>
|
||
<dl class="atalhos">
|
||
<dt><kbd>→</kbd><kbd>←</kbd></dt><dd>avançar e voltar (ou clique nas metades da tela)</dd>
|
||
<dt><kbd>F</kbd></dt><dd>tela cheia</dd>
|
||
<dt><kbd>O</kbd></dt><dd>panorama com todos os slides</dd>
|
||
<dt><kbd>B</kbd></dt><dd>tela preta, para pausar a projeção</dd>
|
||
</dl>
|
||
</div>
|
||
<div class="guia">
|
||
<h3>Lendo e imprimindo a apostila</h3>
|
||
<p>A <a href="/formacoes/2/apostila.html">versão online</a> se pagina em A4 sozinha ao abrir, o que leva alguns segundos.</p>
|
||
<p>Para papel, prefira o <a href="/formacoes/2/LASER-ESP32-Modulo-2-Apostila.pdf" download>PDF pronto</a>: ele já sai com margens, cores e quebras de página certas, sem configurar a impressora.</p>
|
||
</div>
|
||
<div class="guia">
|
||
<h3>Rodando no Wokwi</h3>
|
||
<ol><li>Abra <a href="https://wokwi.com/projects/new/esp32-s3">wokwi.com/projects/new/esp32-s3</a>. Não precisa de conta.</li><li>Cole o <code>sketch.ino</code> e o <code>diagram.json</code> nas abas de mesmo nome.</li><li>Em <i>Library Manager</i>, adicione <b>DHT sensor library</b> e <b>LiquidCrystal I2C</b>.</li><li>Clique no botão verde. Com a simulação rodando, clique no DHT22 para mudar temperatura e umidade.</li></ol>
|
||
|
||
</div>
|
||
<div class="guia">
|
||
<h3>Montando na bancada</h3>
|
||
<ol><li>Pull-up de <b>10 kΩ</b> no DATA do DHT22 e de <b>4,7 kΩ</b> no SDA e no SCL, todos para o <b>3V3</b>.</li><li>A plaquinha I2C do LCD costuma trazer pull-ups para 5 V: use um <b>conversor de nível BSS138</b> ou retire esses resistores.</li><li>Tela vazia? Gire o trimpot de contraste e rode o <code>scanner-i2c.ino</code> para conferir o endereço.</li><li>Os detalhes estão no capítulo 7 da apostila.</li></ol>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<footer class="rodape">
|
||
<div class="envoltorio">
|
||
<span><strong>LASER</strong> · Liga Acadêmica de Sistemas Embarcados · CIn · UFPE</span>
|
||
<span>Material de <strong>Lucas Rayan Guerra</strong> · uso livre para fins educacionais · <a href="mailto:contato@lucasrguerra.dev.br">contato@lucasrguerra.dev.br</a></span>
|
||
</div>
|
||
</footer>
|
||
</body>
|
||
</html>
|