Plano de curso de IoT com ESP32: um módulo de Internet das Coisas em 8 semanas
Plano de curso de IoT com ESP32: tabela de 8 semanas, soluções para a rede da escola e o hotspot, código de servidor web Wi-Fi, segurança e ética, lista de materiais para 8 grupos e rubrica final.
Ao montar um plano de curso de IoT com ESP32 para o ensino médio ou técnico, divida o módulo em quatro camadas: primeiro a placa percebe o ambiente (GPIO e sensores), depois entra em uma rede (Wi-Fi), depois compartilha dados (servidor web, cliente HTTP, mensagens) e, por fim, aprende a funcionar com bateria e a se proteger (deep sleep e segurança). Com duas aulas por semana, essas quatro camadas cabem com folga em oito semanas: duas semanas de hardware, duas de rede e servidor, duas de troca de dados, uma de energia e segurança e uma semana de projeto final. No fim, os alunos entregam um dispositivo que lê um sensor, mostra a leitura em uma página aberta no celular ou envia uma mensagem para o celular quando algo acontece, tem a autonomia da bateria calculada e não deixa a senha à vista dentro do código.
Este post é a continuação do plano da primeira aula de ESP32; instalação, drivers, o botão BOOT e o primeiro LED foram vistos lá e não se repetem aqui. Aqui você encontra uma tabela semana a semana com objetivos, projetos reais do BlueGrays, conceitos e produtos, um roteiro semanal de aula de 80 minutos, por que a rede da escola costuma deixar o ESP32 de fora e como resolver isso, cinco perguntas para a equipe de TI, um código de servidor web Wi-Fi que compila, uma seção de segurança e ética, uma lista de materiais para 8 grupos e os critérios do projeto final. Os exemplos partem desta suposição: você tem 24 alunos trabalhando em 8 grupos de três e duas aulas por semana (2 × 40 minutos). Se a sua turma for diferente, ajuste os tempos na mesma proporção.

Como o módulo funciona: perceber, conectar, compartilhar, economizar energia
Uma aula de Internet das Coisas (IoT) não ensina a internet em si; ensina como um dispositivo conversa com os outros dispositivos de uma rede. Para isso, primeiro é preciso algo para medir: uma placa que entra no Wi-Fi, mas não mede nada, não tem o que dizer na rede. Por isso as duas primeiras semanas são, de propósito, sem Wi-Fi: os alunos trabalham com um botão, um LDR e um sensor de temperatura e umidade, e definem a escolha dos pinos e os intervalos de leitura. Na semana três a placa entra na rede, na semana quatro vira servidor, na semana cinco passa a ser um cliente que pede dados a outro servidor e na semana seis avisa sobre um evento com uma mensagem. A semana sete fica para dois temas que a maioria das oficinas curtas de IoT pula: autonomia da bateria e segurança. Cada camada é construída sobre a anterior, então não mude a ordem; se a semana do Wi-Fi for mal, resolva o problema de conexão antes de seguir em frente.
O plano de aulas de IoT com ESP32 em 8 semanas
Todos os projetos da tabela estão prontos no BlueGrays com esquema do circuito, lista de peças e código. Os projetos das quatro primeiras semanas, incluindo os de conexão Wi-Fi e de servidor web, são totalmente grátis; os projetos de cliente HTTP, Telegram, WebSocket e deep sleep usados a partir da semana 5 são Premium. Ou seja, nenhum aluno precisa de Premium no primeiro mês; o que fazer quando o Premium for necessário está no fim deste post.
| Semana | Objetivo | Projeto do BlueGrays | Conceito | Produto |
|---|---|---|---|---|
| 1 | Ler uma entrada e acionar uma saída | Controle de LED com botão no ESP32 (momentâneo), Controle de LED com botão no ESP32 (alternância) (Grátis) | GPIO, INPUT_PULLUP, entrada e saída digitais, variável de estado | Um LED ligado e desligado por botão e o mapa de pinos do grupo |
| 2 | Medir o ambiente | Leitura da intensidade da luz com módulo LDR e ESP32, Temperatura e umidade com ESP32 e DHT22 (com display LCD) (Grátis) | Leitura analógica (12 bits, 0–4095), ADC1 e ADC2, I2C, bibliotecas, intervalo de leitura | Uma tabela de luz com 10 leituras no Monitor Serial, temperatura e umidade no LCD |
| 3 | Conectar a placa a uma rede | Conexão Wi-Fi STA com ESP32 e display LCD (Grátis) | Modo estação (STA) do Wi-Fi, SSID, endereço IP, RSSI (dBm), WiFi.status(), reconexão | IP, endereço MAC e intensidade do sinal anotados no diário de rede |
| 4 | Transformar a placa em servidor | Servidor web assíncrono com ESP32 (IP no LCD) (Grátis) e o código deste post | Servidor web, requisição e resposta HTTP, porta 80, caminhos de URL (/, /on, /off) | Uma página que liga e desliga um LED pelo celular e mostra o valor da luz |
| 5 | Transformar a placa em cliente | ESP32 HTTPClient + API de clima (com display LCD), Hora exata pela internet com ESP32 e NTP (Premium) | Cliente HTTP, requisição GET, códigos de status (200, 404), JSON, hora via NTP | Previsão do tempo ou hora buscadas na internet; leitura do valor do grupo vizinho |
| 6 | Avisar sobre um evento com uma mensagem | Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram), Contador WebSocket com ESP32 (2 botões + LCD + web em tempo real) (Premium) | Notificações, token do bot, HTTPS, WebSocket, a ideia de publicar e assinar (MQTT) | Uma mensagem no celular quando há movimento ou uma página que se atualiza sozinha |
| 7 | Funcionar com bateria e proteger o dispositivo | ESP32 em sono profundo — Economia de bateria (OLED + contador na RAM RTC) (Premium) | Deep sleep, fontes de despertar, memória RTC, corrente média, senhas em um arquivo separado | Um cálculo de autonomia da bateria e um projeto com a senha movida para secrets.h |
| 8 | Projeto final | À escolha do grupo, por exemplo Temperatura e umidade com ESP32 e DHT22 (com display LCD) mais a página web da semana 4 | Combinar conceitos, documentar, apresentar | Um dispositivo funcionando, uma apresentação de 3 minutos, o diário de rede |
Três observações sobre a tabela. Primeiro, não há um projeto pronto de MQTT no app; na semana 6, explique o MQTT como conceito no quadro (os dispositivos não conversam diretamente entre si: eles publicam mensagens com um tópico em um servidor intermediário, o broker, e quem tiver interesse assina esse tópico) e faça a parte prática com a notificação do Telegram e a página WebSocket. Os detalhes do Telegram estão no post sobre o bot do Telegram com ESP32. Segundo, o projeto Async Web Server da semana 4 precisa das bibliotecas AsyncTCP e ESPAsyncWebServer; instale-as em todos os computadores antes da aula, senão a compilação para na primeira linha. Terceiro, o exercício com o grupo vizinho na semana 5 não precisa de internet: o ESP32 do grupo A lê o endereço /deger no servidor que o grupo B montou na semana 4. Se a escola não tiver acesso à internet, essa semana funciona do mesmo jeito.
O roteiro semanal da aula: 80 minutos
Seguir o mesmo roteiro toda semana faz os alunos gastarem energia com o conceito novo, e não com se acostumar a uma rotina nova. Se você conseguir colocar as duas aulas em sequência, o roteiro abaixo funciona como um bloco só; se não, funciona como duas metades de 40 minutos, e nesse caso não desmonte o circuito no fim da primeira aula: guarde-o montado na caixa. O diário de rede é um registro de uma página que cada grupo mantém: data, endereço IP da placa, endereço MAC, intensidade do sinal, o erro que encontraram e como resolveram. A partir da semana 3, metade de toda a depuração é feita olhando esse diário.
| Minutos | Etapa | O que acontece? |
|---|---|---|
| 0–10 | Aquecimento | A pergunta de saída da semana anterior é discutida, os grupos abrem o diário de rede e as caixas são distribuídas. |
| 10–20 | Conceito | O único conceito da semana é desenhado no quadro: na semana 4, um celular, um ESP32 e as setas de requisição e resposta entre eles. |
| 20–30 | Leitura do código | O projeto da semana é projetado, o resumo e a explicação passo a passo da aba Entenda o código são lidos juntos e os alunos preveem a saída. |
| 30–55 | Montar e carregar | Os grupos montam o circuito, carregam o código e veem a primeira saída no Monitor Serial. Um grupo travado por mais de 3 minutos recebe de você um kit reserva. |
| 55–70 | Mudar uma coisa | Cada grupo muda uma única coisa: intervalo de atualização, texto da página, limite ou tempo de sono. A mudança vai para o diário de rede. |
| 70–80 | Fechamento | A pergunta de saída é respondida por escrito, o circuito é desmontado ou guardado montado na caixa e as peças são contadas. |
A realidade da rede da escola: por que o ESP32 não entra no Wi-Fi da escola
A maioria dos módulos de IoT empaca por causa da rede, não do código. O ESP32 clássico só funciona na faixa de 2,4 GHz; ele nunca enxerga um ponto de acesso que transmite só em 5 GHz. As redes das escolas muitas vezes não usam uma única senha compartilhada como uma rede doméstica, e sim autenticação corporativa com usuário e senha (WPA2-Enterprise); o ESP32 pode suportar isso com código extra, mas isso significa escrever no código a senha da conta pessoal de um aluno ou professor, o que não é aceitável em sala. Redes de convidados abrem uma página de aprovação no navegador depois da conexão (um captive portal); o ESP32 não tem tela nem navegador, então não consegue passar dessa página: parece conectado, mas nunca chega à internet. Algumas escolas só permitem dispositivos cujo endereço MAC foi cadastrado com antecedência. A última armadilha é a menos conhecida: redes de convidados costumam isolar os dispositivos uns dos outros (isolamento de clientes). Nesse caso o ESP32 entra na rede e até mostra o endereço IP, mas o celular na mesma rede não consegue chegar a esse endereço e o servidor web da semana 4 nunca abre.
| Tipo de rede | O ESP32 conecta? | Para a semana do servidor web | Observação |
|---|---|---|---|
| Rede de 2,4 GHz com uma única senha (WPA2-PSK) | Sim | Adequada | Igual a uma rede doméstica; na escola, raramente aberta aos alunos |
| Rede que transmite só em 5 GHz | Não, ele nunca a enxerga | Não adequada | Se a rede não aparece na lista, confira primeiro a faixa |
| Rede corporativa com usuário e senha (WPA2-Enterprise) | Tecnicamente possível com código extra | Não recomendada | A senha de uma conta pessoal acaba no código |
| Rede de convidados com página de aprovação (captive portal) | Conecta, mas não chega à internet | Em geral não adequada | A maioria também tem o isolamento de clientes ativado |
| Hotspot pessoal de um celular | Sim, se os 2,4 GHz estiverem ativados | Adequada | Número limitado de dispositivos ao mesmo tempo |
| Um roteador separado de 2,4 GHz, não ligado à rede da escola | Sim | Melhor opção | Se precisar de internet, combine a conexão com a equipe de TI |
A solução: o hotspot do celular ou um roteador separado
A solução mais rápida é o hotspot pessoal do seu celular. No iPhone, ativar Maximizar Compatibilidade nos ajustes de Acesso Pessoal muda a transmissão para 2,4 GHz; no Android, você escolhe a faixa de 2,4 GHz nas configurações do hotspot. Isso também dá acesso à internet, mas os celulares só aceitam um número limitado de dispositivos ao mesmo tempo, e com 8 grupos mais os celulares dos alunos o limite enche rápido. Uma regra prática: se as 8 placas ESP32 entram no celular do professor, os 8 celulares dos alunos que vão abrir o navegador não podem entrar em um segundo celular, porque o celular e o ESP32 precisam estar na mesma rede. Por isso, nas semanas 3 e 4, coloque 4 grupos em um hotspot e os outros 4 em um segundo hotspot, e faça cada grupo testar com um único celular.
Se você vai repetir o módulo todo ano, a solução permanente é um roteador separado de 2,4 GHz usado só nesta aula. O roteador funciona sem estar ligado à rede da escola; as semanas 3 e 4 e o exercício com o grupo vizinho podem ser feitos sem internet, porque o ESP32 e o celular estão na mesma rede local. A internet só é necessária nas semanas 5 e 6 (previsão do tempo, NTP, Telegram); para essas duas semanas, use um hotspot ou planeje com a equipe de TI a ligação do roteador à rede da escola. Troque o nome e a senha da rede a cada semestre e troque a senha de administrador do roteador no primeiro dia. Se não houver nenhuma rede física, o nome de rede padrão no código dos projetos Wi-Fi do app é Wokwi-GUEST; o mesmo código pode ser testado com essa rede no simulador Wokwi, no navegador. Faça estas cinco perguntas à equipe de TI pelo menos duas semanas antes de o módulo começar:
- Existe na escola uma rede que transmite em 2,4 GHz com uma única senha compartilhada (WPA2-PSK) e, se existir, os dispositivos da turma podem usá-la?
- A rede de convidados tem captive portal e isolamento de clientes? Dois dispositivos na mesma rede conseguem se comunicar?
- Os dispositivos precisam ser cadastrados antes pelo endereço MAC? Se sim, até quando vocês precisam da lista das 9 placas?
- As regras da escola permitem usar no laboratório um roteador separado, não ligado à rede da escola, ou um hotspot do celular do professor?
- Se as placas ESP32 precisarem de internet nas semanas 5 e 6, que conexões o firewall permite (sites, servidores de horário, serviços de mensagens)?
O código: um ESP32 que entra no Wi-Fi e mostra o valor de um sensor em uma página
O código abaixo é o núcleo da semana 4 e usa só as bibliotecas WiFi.h e WebServer.h, que vêm com o pacote da placa ESP32, então não é preciso instalar bibliotecas extras. O circuito continua o da semana 2: o pino VCC do módulo LDR no 3V3, o GND no GND e o AO no GPIO34. O GPIO34 está no ADC1, então pode ser lido mesmo com o Wi-Fi ligado. Antes de carregar, troque os dois marcadores AG_ADI (nome da rede) e AG_SIFRESI (senha) pelos dados da sua rede de 2,4 GHz ou passe essas duas linhas para um arquivo separado chamado secrets.h, como você vai fazer na semana 7; se o código encontrar esse arquivo, ele o usa.
1// ESP32 Wi-Fi + web sunucu: LDR değerini tarayıcıda göster / ESP32 Wi-Fi + web server: show the LDR value in a browser
2#include <WiFi.h>
3#include <WebServer.h>
4
5// Ağ bilgileri: secrets.h varsa oradan gelir / Network credentials: taken from secrets.h if it exists
6#if __has_include("secrets.h")
7#include "secrets.h"
8#else
9const char* WIFI_SSID = "AG_ADI"; // 2,4 GHz ağın adı / Name of the 2.4 GHz network
10const char* WIFI_PASS = "AG_SIFRESI"; // Ağ şifresi / Network password
11#endif
12
13const int LDR_PIN = 34; // ADC1 pini, Wi-Fi açıkken de okunur / ADC1 pin, still readable while Wi-Fi is on
14
15WebServer server(80); // 80 numaralı portta web sunucu / Web server on port 80
16
17// Ana sayfa: ölçümü HTML olarak gönder / Home page: send the reading as HTML
18void handleRoot() {
19 int raw = analogRead(LDR_PIN); // 0-4095 ham değer / Raw value 0-4095
20 int percent = map(raw, 4095, 0, 0, 100); // Modülde ışık arttıkça değer düşer / On the module the value drops as light rises
21 String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
22 html += "<meta name='viewport' content='width=device-width'>";
23 html += "<script>setTimeout(() => location.reload(), 5000);</script>"; // 5 saniyede bir yenile / Reload every 5 s
24 html += "<title>ESP32 Grup 1</title></head><body>";
25 html += "<h1>Isik: %" + String(percent) + "</h1>";
26 html += "<p>Ham deger: " + String(raw) + "</p>";
27 html += "<p>Sinyal: " + String(WiFi.RSSI()) + " dBm</p>";
28 html += "</body></html>";
29 server.send(200, "text/html", html); // 200 = istek başarılı / 200 = request OK
30}
31
32// Yalnız sayıyı döndüren adres / Address that returns only the number
33void handleValue() {
34 server.send(200, "text/plain", String(analogRead(LDR_PIN)));
35}
36
37void setup() {
38 Serial.begin(115200);
39 analogReadResolution(12); // 12 bit: 0-4095
40 WiFi.mode(WIFI_STA); // İstasyon modu: var olan ağa katıl / Station mode: join an existing network
41 WiFi.begin(WIFI_SSID, WIFI_PASS);
42 Serial.print("Baglaniliyor / Connecting");
43 unsigned long start = millis();
44 while (WiFi.status() != WL_CONNECTED && millis() - start < 20000) { // En fazla 20 sn bekle / Wait up to 20 s
45 delay(500);
46 Serial.print(".");
47 }
48 if (WiFi.status() != WL_CONNECTED) {
49 Serial.println("\nBaglanamadi, yeniden basliyor / No connection, restarting");
50 delay(2000);
51 ESP.restart();
52 }
53 Serial.print("\nIP: ");
54 Serial.println(WiFi.localIP()); // Telefonda bu adresi aç / Open this address on the phone
55 server.on("/", handleRoot); // Ana sayfa: IP/ / Home page: IP/
56 server.on("/deger", handleValue); // Yalnız sayı: IP/deger / Number only: IP/deger
57 server.begin();
58}
59
60void loop() {
61 server.handleClient(); // Gelen istekleri karşıla / Serve incoming requests
62}Depois de carregar, abra o Monitor Serial a 115200 baud. Quando os pontos param, aparece a linha do IP, por exemplo 192.168.43.57. Em um celular conectado à mesma rede do ESP32, abra o navegador e digite esse endereço: a página mostra a porcentagem de luz, o valor bruto e a intensidade do sinal, e se recarrega sozinha a cada 5 segundos. Cubra o LDR com a mão e a porcentagem cai. Acrescente /deger ao fim do endereço e você recebe só o número bruto; na semana 5, o ESP32 do grupo vizinho vai ler exatamente esse endereço com um cliente HTTP. Se a placa não conseguir se conectar em 20 segundos, ela reinicia sozinha, para que os alunos não achem que travou. Se a conexão nunca acontecer, veja no post ESP32 não conecta ao Wi-Fi o que significam os códigos de status.
Segurança e ética: a semana que você não deve pular
Em uma aula de IoT, segurança não se ensina como uma apresentação de slides à parte, e sim como uma mudança que os alunos fazem no próprio código. Neste módulo, os alunos já carregam segredos reais em três lugares: a senha do Wi-Fi, o token do bot da semana 6 e os dados que eles mesmos medem. Dedique a segunda metade da semana 7 a estes cinco temas e peça uma mudança concreta no projeto de cada grupo para cada um deles:
- Não deixe senhas fixas no código: Passe a senha do Wi-Fi e o token do bot para um arquivo separado chamado secrets.h e deixe esse arquivo de fora ao compartilhar o código ou tirar capturas de tela. Uma linha de código no projetor significa que todos na sala ficam sabendo a senha.
- Troque as senhas padrão: Os painéis de administração dos roteadores, o modo ponto de acesso (AP) do próprio ESP32 e as senhas dos códigos de exemplo prontos são valores que todo mundo conhece. Troque a senha do roteador da turma no primeiro dia e peça aos alunos que não deixem senhas de exemplo nos projetos.
- Sua página está aberta para todos na rede: O servidor web deste post não tem tela de login; qualquer pessoa na mesma rede que saiba o endereço pode abrir a página e, em um projeto com um endereço /on, também pode acender o LED. Por isso, em sala, só saídas inofensivas como LEDs, buzzers e displays são controladas pela web; relés ligados à tensão da rede elétrica não são usados neste módulo.
- Coleta de dados pessoais: Temperatura e luz não são dados pessoais, mas um sensor de movimento que registra quando as pessoas passam por um corredor, uma câmera ou um microfone podem se tornar dados pessoais. Se a ideia de um projeto final registra o movimento, a voz ou a imagem das pessoas, faça a turma responder primeiro: “Quem vê, por quanto tempo fica guardado, houve autorização?”
- Atualizações e responsabilidade: Um dispositivo conectado à internet não é configurado uma vez e esquecido. Mostre aos alunos que, no fim do módulo, o roteador da turma é desligado, os tokens dos bots são revogados e as placas são resetadas, e discuta quem é responsável por um dispositivo durante toda a vida útil dele.
Lista de materiais: por grupo e para 8 grupos
A lista é para 24 alunos em 8 grupos de três; 9 kits, incluindo um reserva, bastam. A maioria das peças é comprada para as primeiras semanas e reutilizada depois; o LCD, por exemplo, aparece em quatro projetos, da semana 2 à semana 5. Não é preciso soldar; módulos como o LCD I2C e o OLED se ligam com jumpers macho-fêmea. Se você usar um LDR avulso em vez de um módulo LDR, acrescente um resistor de 10 kΩ por grupo e montem juntos o divisor de tensão na semana 2.
| Material | Por grupo | Para a turma (8 grupos + 1 reserva) | Semana de uso |
|---|---|---|---|
| ESP32 DevKit (30 pinos, ESP32-WROOM-32) | 1 | 9 | 1–8 |
| Cabo USB de dados (testado) | 1 | 11 | 1–8 |
| Protoboard (830 furos) | 2 | 18 | 1–8 |
| Botão de pressão | 2 | 18 | 1, 6 |
| LED de 5 mm e resistor de 220 Ω | 3 + 3 | 30 + 30 | 1, 3, 4 |
| Módulo LDR (com saída AO) | 1 | 9 | 2, 4, 5 |
| Sensor de temperatura e umidade DHT22 | 1 | 9 | 2, 8 |
| Display LCD I2C 16x2 | 1 | 9 | 2–5 |
| Display OLED SSD1306 de 0,96 polegada (I2C) | 1 | 9 | 7 |
| Sensor de movimento PIR (HC-SR501) e buzzer | 1 + 1 | 9 + 9 | 6 |
| Jumpers (macho-macho e macho-fêmea) | 20 + 10 | cerca de 180 + 90 | 1–8 |
| Ponto de acesso de 2,4 GHz (hotspot do celular ou roteador separado) | - | 2 hotspots ou 1 roteador | 3–8 |
| Celular ou tablet com o BlueGrays | 1 | 8 | 1–8 |
Avaliação: critérios do projeto final
Mantenha simples a regra do projeto final: um sensor, uma conexão Wi-Fi e uma forma de compartilhar (uma página web ou uma mensagem). Os grupos escrevem a ideia em uma frase no fim da semana 6, listam as peças na semana 7, montam na primeira aula da semana 8 e fazem apresentações de três minutos na segunda. Dê a nota com os seis critérios abaixo; cada um vale de 1 a 3 pontos, 18 no total. Para a lógica geral da rubrica, o formulário de entrega e o portfólio, você pode reaproveitar sem mudanças o modelo do post sobre a rubrica de avaliação para aulas de Arduino.
| Critério | 1: Iniciando | 2: Em desenvolvimento | 3: Pronto |
|---|---|---|---|
| Sensor e circuito | Circuito montado, mas sem valor ou com um valor sem sentido | O valor é lido, mas a escolha do pino não é justificada | Valor lido corretamente, escolha do pino ADC1 ou digital explicada |
| Conexão Wi-Fi | Só conecta com a ajuda do professor | Conecta, mas o dispositivo para quando a conexão cai | Conecta, reconecta depois de uma queda, IP e intensidade do sinal anotados |
| Compartilhamento de dados | Dados só no Monitor Serial | A página ou a mensagem existe, mas precisa ser atualizada ou disparada à mão | A página se atualiza sozinha ou a mensagem sai automaticamente quando o evento acontece |
| Consciência sobre energia | Ninguém sabe quanta corrente o dispositivo consome | Autonomia da bateria calculada, mas sem considerar o sono | Calculada com o sono e o intervalo de despertar, resultado interpretado |
| Segurança e ética | Senha à vista no código | Senha no secrets.h, dados não discutidos | Senha em um arquivo separado, dados coletados e quem os vê registrados por escrito |
| Documentação e apresentação | Diário de rede incompleto, apresentação é só uma demonstração | Diário de rede existe, os erros encontrados não são explicados | Diário de rede completo, um erro e a solução dele explicados na apresentação |
Perguntas de saída semanais e uma checklist antes do módulo
- Semana 1: Em um pino configurado como INPUT_PULLUP, o que digitalRead() retorna enquanto o botão está pressionado, e por quê?
- Semana 2: Por que um potenciômetro no GPIO4 não pode ser lido com o Wi-Fi ligado? Quais pinos devemos escolher?
- Semana 3: Se WiFi.status() diz que não está conectado, quais são as duas primeiras coisas que você confere?
- Semana 4: Por que o endereço IP que você digitou no navegador pode ser diferente na semana que vem?
- Semana 5: Nesta semana o seu ESP32 foi servidor ou cliente? O que os códigos de status 200 e 404 informam?
- Semana 6: O que acontece se o token do bot aparecer em uma captura de tela? Qual é a função do broker no MQTT?
- Semana 7: Com a mesma bateria, um ESP32 pode funcionar por dias sempre ligado e por meses em deep sleep. O que faz a diferença?
- Semana 8: Que dados o seu dispositivo coleta, quem pode vê-los e por quanto tempo ficam guardados?
- Duas semanas antes do módulo: Faça as cinco perguntas à equipe de TI e decida entre hotspot e roteador com base nas respostas.
- Duas semanas antes do módulo: Conte as placas e escreva o endereço MAC de cada uma na etiqueta dela (entregue a lista à equipe de TI se for preciso cadastrar).
- Uma semana antes do módulo: Instale em todos os computadores o pacote da placa ESP32 e as bibliotecas DHT, LiquidCrystal I2C, AsyncTCP e ESPAsyncWebServer; teste com uma placa.
- Uma semana antes do módulo: Configure o hotspot para 2,4 GHz, troque o nome e a senha, conecte um ESP32 e abra a página dele pelo celular.
- Uma semana antes do módulo: Faça cópias de uma página do diário de rede para cada grupo, teste os sensores e os LCDs e guarde-os nas caixas.
- Antes da semana 5: Prepare os códigos para os projetos Premium e conte aos alunos quais dados deles são compartilhados.
Onde o BlueGrays entra no módulo
- Projetos com ESP32: Em Descobrir › Projetos, use Filtrar para escolher a plataforma ESP32; há cerca de 50 projetos com ESP32, da conexão Wi-Fi ao deep sleep. Cada um tem esquema do circuito, lista de peças com quantidades e código-fonte que pode ser copiado. Copiar link ajuda a abrir o código no computador.
- Entenda o código: Os minutos 20–30 de toda semana são passados nesta aba: o resumo O que este código faz?, a explicação Passo a passo, Se precisar de ajuda e a tarefa Experimente você mesmo. É grátis nos projetos das quatro primeiras semanas e abre com o Premium nos projetos Premium.
- Ferramenta Pinagem: Na ferramenta Pinagem, ao selecionar qualquer pino do ESP32 você vê o tipo e os avisos dele; para um pino do ADC2, ela diz que não é possível fazer leitura analógica com o Wi-Fi ligado, e para um pino do ADC1, que ele pode ser lido mesmo com o Wi-Fi ligado. Ideal no projetor na hora de escolher os pinos na semana 2. A Pinagem é uma ferramenta Premium.
- Ferramenta Autonomia da bateria: Na ferramenta Autonomia da bateria, você escolhe o perfil pronto ESP32 · repouso profundo; informe a capacidade da bateria, a corrente e o tempo acordado, a corrente de sono e o ciclo, e ela calcula o tempo de funcionamento estimado e a corrente média. A comparação “sempre ligado ou dormindo” da semana 7 é feita nessa tela. A ferramenta é Premium; usuários grátis podem ver um exemplo de cálculo.
- Pacotes para educadores: A partir da semana 5 são necessários projetos Premium, então uma conta por grupo deve ter Premium. Um pacote anual de 10 códigos cobre 8 grupos e o professor; é pagamento único, não renova, os alunos não cadastram cartão, você vê quem usou cada código em Meus códigos e pode transferir códigos para o grupo do próximo semestre. Um código mensal de 30 dias entregue na primeira aula da semana 5 mal cobre as últimas quatro semanas; com um feriado no meio, não dá. Os detalhes estão no post sobre códigos Premium para a turma.
Depois de oito semanas, os alunos não têm só um dispositivo funcionando; eles ganham o hábito de pensar em como um dispositivo conversa em uma rede, por que ele não consegue se conectar, quanta energia gasta e de quem são os dados que coleta, e é exatamente isso que o ensino técnico procura. Se você quiser rever os projetos, os esquemas e as explicações do Entenda o código de cada semana antes da aula, basta abrir o filtro ESP32 no app BlueGrays.
Perguntas frequentes
Quantas semanas deve durar um curso de IoT com ESP32?
Com duas aulas por semana, 8 semanas bastam para os conceitos básicos de IoT, de sensores e Wi-Fi a servidores web, notificações e deep sleep. Se você só tem uma aula por semana, estenda o mesmo plano para 12–14 semanas ou junte as semanas 5 e 6. Reserve pelo menos uma aula inteira para o projeto final.
Dá para ensinar IoT com ESP32 sem o Wi-Fi da escola?
Sim. Desde que o ESP32 e o celular estejam na mesma rede local, o servidor web e as requisições entre dispositivos não precisam de internet; um hotspot de 2,4 GHz no celular do professor ou um roteador separado, não ligado à rede da escola, bastam. A internet só é necessária para serviços externos, como previsão do tempo, hora e Telegram.
Por que meu ESP32 não conecta ao Wi-Fi da escola?
O ESP32 clássico só funciona em 2,4 GHz, então uma rede que transmite só em 5 GHz nunca aparece. As redes das escolas muitas vezes usam autenticação corporativa com usuário e senha ou um captive portal no navegador, e algumas só permitem endereços MAC cadastrados. Nesses casos, um hotspot ou um roteador separado é a opção mais prática.
Por que não consigo abrir o servidor web do ESP32 pelo celular?
O motivo mais comum é que o celular não está na mesma rede do ESP32: ele pode estar nos dados móveis ou em outra rede Wi-Fi. O segundo motivo é o isolamento de clientes nas redes de convidados, em que os dispositivos na mesma rede não conseguem se comunicar. Tente de novo o endereço IP mostrado no Monitor Serial com o celular e o ESP32 no mesmo hotspot.
Preciso ensinar MQTT em uma aula de IoT?
Não é indispensável, mas vale explicar como conceito, porque a maioria dos sistemas de IoT reais usa esse modelo, em que os dispositivos trocam mensagens por tópico por meio de um broker. Em um módulo de 8 semanas, basta firmar primeiro a relação cliente-servidor com HTTP e apresentar o MQTT na semana seis como a ideia de publicar e assinar.
Os projetos com ESP32 do BlueGrays são grátis?
Alguns. Os projetos usados nas quatro primeiras semanas deste plano, como botão, LDR, DHT22, conexão Wi-Fi e Async Web Server, são totalmente grátis. Os projetos de cliente HTTP, Telegram, WebSocket e deep sleep são Premium; para uma turma, você pode obter códigos em lote em Pacotes para educadores, na tela Perfil.
Projetos para montar depois desta leitura
Ver todos os projetos
Conexão Wi-Fi STA com ESP32 e display LCD
Neste projeto, conectamos o ESP32 à rede Wi-Fi de casa no modo estação (STA), de forma segura e tolerante a falhas. Guardamos o SSID e a senha em um arquivo secrets.h separado para evitar que sejam expostos no Git, configuramos um mecanismo de reconexão automática e exibimos o nível de sinal RSSI e o endereço IP em um display LCD I2C. O LED integrado funciona como indicador de status. É um gerenciador de conexão pronto para uso em produção.

Servidor web assíncrono com ESP32 (IP no LCD)
Neste projeto, transformamos o ESP32 em um servidor web assíncrono que você pode controlar pelo celular ou computador na mesma rede Wi-Fi. Com a biblioteca ESPAsyncWebServer, o servidor processa várias requisições ao mesmo tempo (ao contrário do WebServer.h tradicional, que bloqueia a execução ao processar uma requisição). Você poderá abrir o endereço IP do ESP32 no navegador e clicar nos botões ON/OFF (as rotas /on e /off) para ligar e desligar o LED conectado ao GPIO 5.

Controle de LED com botão no ESP32 (momentâneo)
O LED acende enquanto o botão está pressionado e apaga ao soltá-lo. Mostra como usar o pino de entrada digital e o resistor pull-up interno do ESP32. O modo INPUT_PULLUP dispensa um resistor externo.

Leitura da intensidade da luz com módulo LDR e ESP32
Acompanhe em tempo real no Monitor Serial o valor bruto do ADC do módulo LDR e a porcentagem relativa de luz calculada a partir de referências de escuridão e claridade. Essa porcentagem não é uma medida em lux. O projeto ensina a lógica de calibração do módulo. É ideal fazê-lo antes do projeto 10, pois ajuda a determinar o valor do limiar.

Temperatura e umidade com ESP32 e DHT22 (com display LCD)
Este projeto mede a temperatura e a umidade do ambiente com um sensor DHT22 e exibe os dados em tempo real em um LCD I2C 16x2. Os dados são lidos do sensor pelo protocolo de um fio (one-wire) com a biblioteca Adafruit DHT. Este projeto serve de base para estações meteorológicas IoT, automação residencial ou sistemas de monitoramento ambiental em estufas. A comunicação com o DHT22 é feita pelo pino GPIO 4 do ESP32.

ESP32 HTTPClient + API de clima (com display LCD)
Neste projeto, usamos o ESP32 para fazer uma chamada REST à API de clima wttr.in pela internet com HTTPClient.h. Interpretamos a resposta JSON com ArduinoJson v7 e mostramos cidade, temperatura, umidade, condições do tempo e vento em um display LCD I2C, em turco e inglês. O wttr.in é grátis e não exige chave de API — basta informar o nome de uma cidade para consultar o clima atual. Os dados se atualizam sozinhos a cada 30 minutos, e o LED dá um retorno visual diferente para cada tela.

Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
Um sistema de alarme de segurança inteligente que aciona o buzzer e o LED quando o sensor PIR detecta movimento e, ao mesmo tempo, envia uma notificação instantânea ao proprietário pelo Telegram. Inclui um intervalo de espera de 30 segundos para limitar a frequência dos alarmes repetidos; esse mecanismo não valida as detecções do PIR nem elimina disparos falsos. Pode ser usado na segurança de casas, no monitoramento de garagens, depósitos ou salas de trabalho.

ESP32 em sono profundo — Economia de bateria (OLED + contador na RAM RTC)
O modo de sono profundo do ESP32 reduz o consumo de corrente para ~10 µA ao desligar a CPU e a maioria dos periféricos, sendo essencial para dispositivos IoT alimentados por bateria. Neste projeto, usamos três fontes de despertar: um temporizador (15 segundos), um pino externo (EXT0 — botão no GPIO 33) e toque (T0/GPIO 4). As variáveis marcadas com RTC_DATA_ATTR são preservadas durante o sono profundo, mantendo os contadores de inicializações e de despertares por temporizador e botão.
Mais artigos
- Plano de aula de ESP32: checklist de preparação para a primeira aula e roteiro de 40 minutos
- ESP32 não conecta ao Wi-Fi? Códigos do WiFi.status() e soluções reais
- Rubrica de avaliação de projetos Arduino: ficha de notas, formulário de entrega e portfólio
- App de Arduino para a sala de aula: cada aluno precisa de Premium?
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

