Files
ESPDocs/public/formacoes/2/index.html
T
Lucas RayanandClaude Opus 5.5 1860e34cbb
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
feat(formacoes): módulo 2 (DHT22 + LCD 16x2 no Wokwi), PDFs e página de entrada
- 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>
2026-11-02 13:11:28 -03:00

573 lines
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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 &lt;Wire.h&gt;
#include &lt;DHT.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
#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(&quot;LASER ESP32-S3&quot;);
lcd.setCursor(0, 1);
lcd.print(&quot;Iniciando...&quot;);
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(&quot;Falha no sensor &quot;);
Serial.println(&quot;Falha na leitura do DHT22&quot;);
} else {
lcd.setCursor(0, 0);
lcd.print(&quot;Temp: &quot;);
lcd.print(temperatura, 1);
lcd.write(0); // o caractere de grau criado acima
lcd.print(&quot;C &quot;);
lcd.setCursor(0, 1);
lcd.print(&quot;Umid: &quot;);
lcd.print(umidade, 1);
lcd.print(&quot; % &quot;);
Serial.printf(&quot;Temperatura: %.1f C | Umidade: %.1f %%\n&quot;, 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>{
&quot;version&quot;: 1,
&quot;author&quot;: &quot;Lucas Rayan Guerra&quot;,
&quot;editor&quot;: &quot;wokwi&quot;,
&quot;parts&quot;: [
{
&quot;type&quot;: &quot;board-esp32-s3-devkitc-1&quot;,
&quot;id&quot;: &quot;esp&quot;,
&quot;top&quot;: 0,
&quot;left&quot;: 0,
&quot;attrs&quot;: {}
},
{
&quot;type&quot;: &quot;wokwi-dht22&quot;,
&quot;id&quot;: &quot;dht&quot;,
&quot;top&quot;: 15,
&quot;left&quot;: -250,
&quot;attrs&quot;: {
&quot;temperature&quot;: &quot;26.5&quot;,
&quot;humidity&quot;: &quot;62&quot;
}
},
{
&quot;type&quot;: &quot;wokwi-lcd1602&quot;,
&quot;id&quot;: &quot;lcd&quot;,
&quot;top&quot;: 320,
&quot;left&quot;: -60,
&quot;attrs&quot;: {
&quot;pins&quot;: &quot;i2c&quot;
}
},
{
&quot;type&quot;: &quot;wokwi-resistor&quot;,
&quot;id&quot;: &quot;r_dht&quot;,
&quot;top&quot;: 9,
&quot;left&quot;: -173,
&quot;rotate&quot;: 90,
&quot;attrs&quot;: {
&quot;value&quot;: &quot;10000&quot;
}
},
{
&quot;type&quot;: &quot;wokwi-resistor&quot;,
&quot;id&quot;: &quot;r_sda&quot;,
&quot;top&quot;: 9,
&quot;left&quot;: -83,
&quot;rotate&quot;: 90,
&quot;attrs&quot;: {
&quot;value&quot;: &quot;4700&quot;
}
},
{
&quot;type&quot;: &quot;wokwi-resistor&quot;,
&quot;id&quot;: &quot;r_scl&quot;,
&quot;top&quot;: 9,
&quot;left&quot;: -63,
&quot;rotate&quot;: 90,
&quot;attrs&quot;: {
&quot;value&quot;: &quot;4700&quot;
}
}
],
&quot;connections&quot;: [
[
&quot;esp:TX&quot;,
&quot;$serialMonitor:RX&quot;,
&quot;&quot;,
[]
],
[
&quot;esp:RX&quot;,
&quot;$serialMonitor:TX&quot;,
&quot;&quot;,
[]
],
[
&quot;lcd:VCC&quot;,
&quot;esp:5V&quot;,
&quot;red&quot;,
[
&quot;h-20&quot;,
&quot;v-100&quot;
]
],
[
&quot;lcd:GND&quot;,
&quot;esp:GND.1&quot;,
&quot;black&quot;,
[
&quot;h-30&quot;,
&quot;v-90&quot;
]
],
[
&quot;lcd:SDA&quot;,
&quot;esp:8&quot;,
&quot;blue&quot;,
[
&quot;h-40&quot;,
&quot;v-200&quot;
]
],
[
&quot;lcd:SCL&quot;,
&quot;esp:9&quot;,
&quot;purple&quot;,
[
&quot;h-50&quot;,
&quot;v-170&quot;
]
],
[
&quot;dht:VCC&quot;,
&quot;r_dht:1&quot;,
&quot;red&quot;,
[
&quot;v12&quot;,
&quot;h-25&quot;,
&quot;v-159&quot;,
&quot;h100&quot;
]
],
[
&quot;dht:SDA&quot;,
&quot;esp:12&quot;,
&quot;gold&quot;,
[
&quot;v77&quot;
]
],
[
&quot;dht:GND&quot;,
&quot;esp:GND.1&quot;,
&quot;black&quot;,
[
&quot;v118&quot;
]
],
[
&quot;r_dht:1&quot;,
&quot;esp:3V3.1&quot;,
&quot;red&quot;,
[]
],
[
&quot;r_dht:2&quot;,
&quot;esp:12&quot;,
&quot;gold&quot;,
[
&quot;v181&quot;
]
],
[
&quot;r_sda:1&quot;,
&quot;esp:3V3.1&quot;,
&quot;red&quot;,
[]
],
[
&quot;r_sda:2&quot;,
&quot;esp:8&quot;,
&quot;blue&quot;,
[
&quot;v124&quot;
]
],
[
&quot;r_scl:1&quot;,
&quot;esp:3V3.1&quot;,
&quot;red&quot;,
[]
],
[
&quot;r_scl:2&quot;,
&quot;esp:9&quot;,
&quot;purple&quot;,
[
&quot;v152&quot;
]
]
],
&quot;dependencies&quot;: {}
}</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 &lt;Wire.h&gt;
void setup() {
Serial.begin(115200);
Wire.begin(8, 9); // SDA, SCL
delay(500);
Serial.println(&quot;Procurando dispositivos I2C...&quot;);
int encontrados = 0;
for (byte endereco = 1; endereco &lt; 127; endereco++) {
Wire.beginTransmission(endereco);
if (Wire.endTransmission() == 0) {
Serial.printf(&quot;Dispositivo em 0x%02X\n&quot;, endereco);
encontrados++;
}
}
if (encontrados == 0) Serial.println(&quot;Nenhum dispositivo. Confira SDA, SCL e alimentacao.&quot;);
}
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>