Guias · 17 min de leitura

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.

LDR usado para medir luz em uma aula de IoT com ESP32
O sensor comum do módulo: o LDR lido na semana 2 aparece na semana 4 em uma página web aberta no celular.

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.

Pré-requisito: antes de o módulo começar, cada grupo deve ter carregado código em um ESP32 pelo menos uma vez. Se a sua turma ainda não chegou lá, faça primeiro a primeira aula de ESP32; manter os problemas de driver, pacote da placa e porta longe da semana do Wi-Fi é a maior economia de tempo de todo o módulo.

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.

SemanaObjetivoProjeto do BlueGraysConceitoProduto
1Ler uma entrada e acionar uma saídaControle 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 estadoUm LED ligado e desligado por botão e o mapa de pinos do grupo
2Medir o ambienteLeitura 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 leituraUma tabela de luz com 10 leituras no Monitor Serial, temperatura e umidade no LCD
3Conectar a placa a uma redeConexã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ãoIP, endereço MAC e intensidade do sinal anotados no diário de rede
4Transformar a placa em servidorServidor web assíncrono com ESP32 (IP no LCD) (Grátis) e o código deste postServidor 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
5Transformar a placa em clienteESP32 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 NTPPrevisão do tempo ou hora buscadas na internet; leitura do valor do grupo vizinho
6Avisar sobre um evento com uma mensagemAlarme 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
7Funcionar com bateria e proteger o dispositivoESP32 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 separadoUm cálculo de autonomia da bateria e um projeto com a senha movida para secrets.h
8Projeto finalÀ escolha do grupo, por exemplo Temperatura e umidade com ESP32 e DHT22 (com display LCD) mais a página web da semana 4Combinar conceitos, documentar, apresentarUm 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.

Ao escolher o pino do sensor na semana 2, pense nas semanas do Wi-Fi. Os pinos do ESP32 no canal ADC2 (GPIO0, 2, 4, 12–15 e 25–27) não fazem leitura analógica com o Wi-Fi ligado; um potenciômetro que funciona bem no GPIO4 na semana 2 vai devolver sempre o mesmo valor errado na semana 4. Ligue os sensores analógicos nos pinos do ADC1 (GPIO32–39) desde o início; é também por isso que o projeto do LDR no app usa o GPIO34.

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.

MinutosEtapaO que acontece?
0–10AquecimentoA pergunta de saída da semana anterior é discutida, os grupos abrem o diário de rede e as caixas são distribuídas.
10–20ConceitoO ú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–30Leitura do códigoO 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–55Montar e carregarOs 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–70Mudar uma coisaCada 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–80FechamentoA 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 redeO ESP32 conecta?Para a semana do servidor webObservação
Rede de 2,4 GHz com uma única senha (WPA2-PSK)SimAdequadaIgual a uma rede doméstica; na escola, raramente aberta aos alunos
Rede que transmite só em 5 GHzNão, ele nunca a enxergaNão adequadaSe 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 extraNão recomendadaA 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 à internetEm geral não adequadaA maioria também tem o isolamento de clientes ativado
Hotspot pessoal de um celularSim, se os 2,4 GHz estiverem ativadosAdequadaNúmero limitado de dispositivos ao mesmo tempo
Um roteador separado de 2,4 GHz, não ligado à rede da escolaSimMelhor opçãoSe 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:

  1. 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?
  2. A rede de convidados tem captive portal e isolamento de clientes? Dois dispositivos na mesma rede conseguem se comunicar?
  3. Os dispositivos precisam ser cadastrados antes pelo endereço MAC? Se sim, até quando vocês precisam da lista das 9 placas?
  4. 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?
  5. 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.

C++ (Arduino IDE)
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.

Se o endereço IP aparece no Monitor Serial, mas o celular não abre a página, o problema quase sempre é a rede, não o código. O celular pode estar nos dados móveis ou em outra rede, ou o isolamento de clientes está ativado. Primeiro confira se o Wi-Fi do celular está na mesma rede do ESP32; se estiver e a página ainda não abrir, passe para um hotspot.

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.

MaterialPor grupoPara a turma (8 grupos + 1 reserva)Semana de uso
ESP32 DevKit (30 pinos, ESP32-WROOM-32)191–8
Cabo USB de dados (testado)1111–8
Protoboard (830 furos)2181–8
Botão de pressão2181, 6
LED de 5 mm e resistor de 220 Ω3 + 330 + 301, 3, 4
Módulo LDR (com saída AO)192, 4, 5
Sensor de temperatura e umidade DHT22192, 8
Display LCD I2C 16x2192–5
Display OLED SSD1306 de 0,96 polegada (I2C)197
Sensor de movimento PIR (HC-SR501) e buzzer1 + 19 + 96
Jumpers (macho-macho e macho-fêmea)20 + 10cerca de 180 + 901–8
Ponto de acesso de 2,4 GHz (hotspot do celular ou roteador separado)-2 hotspots ou 1 roteador3–8
Celular ou tablet com o BlueGrays181–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ério1: Iniciando2: Em desenvolvimento3: Pronto
Sensor e circuitoCircuito montado, mas sem valor ou com um valor sem sentidoO valor é lido, mas a escolha do pino não é justificadaValor lido corretamente, escolha do pino ADC1 ou digital explicada
Conexão Wi-FiSó conecta com a ajuda do professorConecta, mas o dispositivo para quando a conexão caiConecta, reconecta depois de uma queda, IP e intensidade do sinal anotados
Compartilhamento de dadosDados só no Monitor SerialA página ou a mensagem existe, mas precisa ser atualizada ou disparada à mãoA página se atualiza sozinha ou a mensagem sai automaticamente quando o evento acontece
Consciência sobre energiaNinguém sabe quanta corrente o dispositivo consomeAutonomia da bateria calculada, mas sem considerar o sonoCalculada com o sono e o intervalo de despertar, resultado interpretado
Segurança e éticaSenha à vista no códigoSenha no secrets.h, dados não discutidosSenha em um arquivo separado, dados coletados e quem os vê registrados por escrito
Documentação e apresentaçãoDiário de rede incompleto, apresentação é só uma demonstraçãoDiário de rede existe, os erros encontrados não são explicadosDiá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

  1. Semana 1: Em um pino configurado como INPUT_PULLUP, o que digitalRead() retorna enquanto o botão está pressionado, e por quê?
  2. Semana 2: Por que um potenciômetro no GPIO4 não pode ser lido com o Wi-Fi ligado? Quais pinos devemos escolher?
  3. Semana 3: Se WiFi.status() diz que não está conectado, quais são as duas primeiras coisas que você confere?
  4. Semana 4: Por que o endereço IP que você digitou no navegador pode ser diferente na semana que vem?
  5. Semana 5: Nesta semana o seu ESP32 foi servidor ou cliente? O que os códigos de status 200 e 404 informam?
  6. Semana 6: O que acontece se o token do bot aparecer em uma captura de tela? Qual é a função do broker no MQTT?
  7. 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?
  8. 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.

Ver todos os projetos
Conexão Wi-Fi STA com ESP32 e display LCD
#127Avançado

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.

4.4(21)
34
Servidor web assíncrono com ESP32 (IP no LCD)
#129Avançado

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.

4.8(16)
26
Controle de LED com botão no ESP32 (momentâneo)
#104Iniciante

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.

4.6(36)
55
Leitura da intensidade da luz com módulo LDR e ESP32
#113Iniciante

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.

4.6(36)
55
Temperatura e umidade com ESP32 e DHT22 (com display LCD)
#117Intermediário

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.

4.8(38)
56
ESP32 HTTPClient + API de clima (com display LCD)
#133Avançado
Premium

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.

4.7(13)
20
Alarme de movimento com ESP32 (PIR + buzzer + LED + Telegram)
#145Avançado
Premium

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.

0.0(0)
9
ESP32 em sono profundo — Economia de bateria (OLED + contador na RAM RTC)
#135Avançado
Premium

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.

4.3(10)
16