feat(formacoes): módulo 2 (DHT22 + LCD 16x2 no Wokwi), PDFs e página de entrada
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>
This commit is contained in:
Lucas RayanandClaude Opus 5.5 committed 2026-11-02 13:11:28 -03:00
1 parent 71c5708726
commit 1860e34cbb
32 files changed
+6469 -1943

No files matched your search

+572
View File
@@ -0,0 +1,572 @@
<!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>