Laboratório 04
| Tarefa | Template | Início | Fim | Conteúdo |
|---|---|---|---|---|
| LAB04 | 17-09-2026 | 24-09-2026 | Pilha de Protocolos IoT: Enlace e Rede; |
Checklist — WiFi e MQTT no ESP32
- Verificar
git --version - Abrir o VS Code
- Abrir a extensão PlatformIO IDE
- Criar um projeto ESP32
- Selecionar o framework Arduino
- Executar o primeiro Build
- Criar
wokwi.toml - Criar
diagram.json - Executar a simulação
- Verificar o Serial Monitor
- Atualizar o repositório no GitHub
- Executar
git push - Confirmar que o projeto está disponível no GitHub
- Logout
Confira o ambiente (faça a configuração uma vez por máquina; a verificação, a cada aula):
- Instalar as ferramentas — git, GitHub CLI e VS Code
- Configurar o git — nome, e-mail e editor padrão (uma vez)
- Verificar git, gh e VS Code — deve mostrar as versões e
Logged in to github.com
Verificação rápida de versão instalada:
git -v && gh --version && code -v && pio --version && wokwi-cli -V && wsl --version && docker --version
Verificação rápida de autenticação:
git config --get-regexp ^user\. && gh auth status && code --list-extensions --profile "ESP32IO"
Antes de sair, faça logout para não deixar sua conta do GitHub ativa na máquina (limpa a credencial salva do git e encerra a sessão do gh).
1. Objetivos de aprendizagem
Ao final desta aula, o aluno será capaz de:
- Conectar o ESP32 a uma rede WiFi (modo estação) e obter o IP.
- Conectar-se a um broker MQTT por IP/host e porta.
- Publicar dados de telemetria periodicamente em um tópico.
- Assinar um tópico e reagir a comandos recebidos (ligar/desligar um LED).
- Tornar a conexão robusta com reconexão automática de WiFi e MQTT.
- Rodar o mesmo código no simulador Wokwi e no ESP32 físico, entendendo a diferença entre broker público e local.
Os cartões "Ponto de commit" marcam cada tarefa avaliada. Copie o comando do cartão e faça o commit com a mensagem sugerida.
2. Material necessário
- 1 × ESP32 (ex.: DevKit v1) ou o simulador Wokwi.
- 1 × LED + resistor de 220 Ω (para o comando remoto).
- Uma rede WiFi (real, para o ESP32 físico).
- Um broker MQTT:
- Público (para o Wokwi):
broker.hivemq.com:1883. - Local (para o ESP32 físico): um Mosquitto em Docker na sua máquina/rede (ver "Broker MQTT local com Docker"), ex.:
192.168.0.10:1883.
- Público (para o Wokwi):
Clone o repositório inicial do LAB04
Escolha o Grupo e entre com o comando abaixo para criar o repositório no GitHub:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- P
- N
- Grupo: Grupo-A (slug:
grupo-a) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-a
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-a/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-a
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-a.git && cd lab04-grupo-a
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-B (slug:
grupo-b) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-b
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-b/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-b
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-b.git && cd lab04-grupo-b
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-C (slug:
grupo-c) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-c
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-c/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-c
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-c.git && cd lab04-grupo-c
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-D (slug:
grupo-d) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-d
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-d/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-d
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-d.git && cd lab04-grupo-d
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-E (slug:
grupo-e) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-e
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-e/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-e
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-e.git && cd lab04-grupo-e
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-F (slug:
grupo-f) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-f
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-f/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-f
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-f.git && cd lab04-grupo-f
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-G (slug:
grupo-g) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-g
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-g/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-g
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-g.git && cd lab04-grupo-g
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-H (slug:
grupo-h) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-h
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-h/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-h
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-h.git && cd lab04-grupo-h
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-I (slug:
grupo-i) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-i
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-i/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-i
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-i.git && cd lab04-grupo-i
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-J (slug:
grupo-j) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-j
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-j/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-j
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-j.git && cd lab04-grupo-j
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-K (slug:
grupo-k) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-k
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-k/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-k
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-k.git && cd lab04-grupo-k
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-L (slug:
grupo-l) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-l
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-l/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-l
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-l.git && cd lab04-grupo-l
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-M (slug:
grupo-m) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-m
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-m/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-m
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-m.git && cd lab04-grupo-m
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-P (slug:
grupo-p) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-p
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-p/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-p
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-p.git && cd lab04-grupo-p
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
- Grupo: Grupo-N (slug:
grupo-n) - Repositório: https://github.com/ELT85B-N21-2026-2/lab04-grupo-n
- Commits: https://github.com/ELT85B-N21-2026-2/lab04-grupo-n/commits/main/
- Time: https://github.com/orgs/ELT85B-N21-2026-2/teams/grupo-n
1. Crie e entre na pasta-mãe da disciplina:
mkdir "%USERPROFILE%\ELT85BN21" & cd /d "%USERPROFILE%\ELT85BN21"
2. Clone e entre no repositório do laboratório:
git clone https://github.com/ELT85B-N21-2026-2/lab04-grupo-n.git && cd lab04-grupo-n
3. Verifique status e abra o conteúdo do repositório no perfil ESP32IO do VS Code :
git status && code . --profile "ESP32IO"
Envie o link do repositório do seu grupo no Moodle:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- P
- N
Repositório do Grupo A para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo B para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo C para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo D para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo E para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo F para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo G para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo H para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo I para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo J para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo K para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo L para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo M para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo P para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Repositório do Grupo N para Laboratório 04:
- Copie o link do repositório acima.
- Abra a página de envio da atividade no Moodle (botão abaixo).
- Clique em Adicionar envio.
- Cole o link no campo Texto online.
- Clique em Salvar mudanças.
- Confira se o status mudou para Enviado para avaliação.
Cada cartão Ponto de commit é uma tarefa: faça-a, copie o comando do cartão e rode. A mensagem começa com o código (T1:, T2:…) — é como a correção identifica sua entrega. Um commit por tarefa; pode refazer (vale o mais recente); e não esqueça o git push. Detalhes em Como funciona a avaliação.
Crie um novo projeto no Platform IO
pio project init -b esp32dev -O "framework=arduino" -O "monitor_speed=115200" --sample-code
pio project init
git add . && git commit -m "T1: pio project init" && git push
ESP32 WiFi Networking
- ├── 📄...
- └── 📂src
- └── 📄main.cpp👈 Criar Aqui
/* ESP32 WiFi Scanning example */
#include <Arduino.h>
#include "WiFi.h"
void setup() {
Serial.begin(115200);
Serial.println("Initializing WiFi...");
WiFi.mode(WIFI_STA);
Serial.println("Setup done!");
}
void loop() {
Serial.println("Scanning...");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("Scan done!");
if (n == 0) {
Serial.println("No networks found.");
} else {
Serial.println();
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
Setup — PlatformIO e Wokwi
A biblioteca WiFi.h já vem no core do ESP32. Adicione o cliente MQTT (PubSubClient):
- ├── 📂src
- └── 📄main.cpp
- ├── 📄...
- └── 🔧platformio.ini👈 Edite Aqui
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
knolleary/PubSubClient@^2.8
- ├── 📂src
- └── 📄main.cpp
- ├── 📄...
- ├── 🔧diagram.json👈 Criar Aqui
- └── 🔧wokwi.toml👈 Criar Aqui
Circuito no Wokwi (LED do comando)
- diagram.json
- wokwi.toml
{
"version": 1,
"author": "Aluno",
"editor": "wokwi",
"parts": [
{
"type": "board-esp32-devkit-c-v4",
"id": "esp",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-led",
"id": "led1",
"top": -48,
"left": 110,
"attrs": { "color": "green" }
},
{
"type": "wokwi-resistor",
"id": "r1",
"top": 20,
"left": 110,
"attrs": { "value": "220" }
}
],
"connections": [
["esp:TX0", "$serialMonitor:RX", "", []],
["esp:RX0", "$serialMonitor:TX", "", []],
["esp:2", "r1:1", "green", []],
["r1:2", "led1:A", "green", []],
["led1:C", "esp:GND.1", "black", []]
]
}
[wokwi]
version = 1
firmware = '.pio/build/esp32dev/firmware.bin'
elf = '.pio/build/esp32dev/firmware.elf'
ESP32 WiFi Scanning example
git add . && git commit -m "T2: ESP32 WiFi Scanning example" && git push
Conectar ao WiFi
Modo estação (WIFI_STA), WiFi.begin() e espera até WL_CONNECTED.
- ├── 📂src
- └── 📄main.cpp👈 Edite Aqui
- ├── 📄...
- ├── 🔧platformio.ini
- ├── 🔧diagram.json
- └── 🔧wokwi.toml
#include <Arduino.h>
#include <WiFi.h>
const char* WIFI_SSID = "IoT-Broker";
const char* WIFI_PASS = "ESP32IoTLab";
void conectaWiFi() {
Serial.print("Conectando a "); Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado! IP: "); Serial.println(WiFi.localIP());
Serial.print("RSSI: "); Serial.println(WiFi.RSSI());
}
void setup() {
Serial.begin(115200);
delay(1000);
conectaWiFi();
}
void loop() {}
Saída esperada (o IP varia):
Conectando a IoT-Broker
....
Conectado! IP: 10.13.37.2
RSSI: -30
conecta ao WiFi e imprime o IP
git add . && git commit -m "T3: conecta ao WiFi e imprime o IP" && git push
Conectar ao broker MQTT
O PubSubClient usa um WiFiClient por baixo. Definimos o servidor e tentamos conectar com um client id único.
#include <WiFi.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "IoT-Broker";
const char* WIFI_PASS = "ESP32IoTLab";
const char* MQTT_HOST = "broker.hivemq.com";
const int MQTT_PORT = 1883;
WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);
void conectaWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.print("\nWiFi OK, IP: "); Serial.println(WiFi.localIP());
}
void conectaMQTT() {
mqtt.setServer(MQTT_HOST, MQTT_PORT);
while (!mqtt.connected()) {
String clientId = "esp32-" + String(random(0xffff), HEX);
Serial.print("Conectando ao broker MQTT... ");
if (mqtt.connect(clientId.c_str())) {
Serial.println("conectado!");
} else {
Serial.print("falhou (rc="); Serial.print(mqtt.state());
Serial.println("), nova tentativa em 2s");
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
delay(1000);
conectaWiFi();
conectaMQTT();
}
void loop() {
mqtt.loop();
}
Saída esperada:
....
WiFi OK, IP: 10.13.37.2
Conectando ao broker MQTT... conectado!
Se falhar, mqtt.state() dá a pista: -2 = não alcançou o servidor (host/porta errados ou sem rede), -4 = timeout, 5 = não autorizado. Muito útil para depurar.
conecta ao broker MQTT
git add . && git commit -m "T4: conecta ao broker MQTT" && git push
Publicar telemetria
Publique uma mensagem a cada 2 s, sem delay() bloqueante (usando millis()). Adicione o tópico e troque o prefixo pelo do seu grupo:
const char* TOPIC_TELEMETRIA = "elt85b/grupo-a/telemetria"; // troque 'grupo-a'!
E use este loop():
void loop() {
if (!mqtt.connected()) conectaMQTT();
mqtt.loop();
static unsigned long ultimo = 0;
if (millis() - ultimo > 2000) {
ultimo = millis();
static int n = 0;
n++;
float temp = 25.0 + (n % 10); // leitura simulada
String payload = String("{\"n\":") + n + ",\"temp\":" + temp + "}";
mqtt.publish(TOPIC_TELEMETRIA, payload.c_str());
Serial.print("Publicado: "); Serial.println(payload);
}
}
Saída esperada (a cada 2 s):
Publicado: {"n":1,"temp":26.00}
Publicado: {"n":2,"temp":27.00}
Publicado: {"n":3,"temp":28.00}
Veja as mensagens chegando: no MQTT Explorer (http://localhost:3000, broker Docker local) ou no HiveMQ Web Client (broker público), assinando elt85b/grupo-a/telemetria.
publica telemetria periodica num topico
git add . && git commit -m "T5: publica telemetria periodica num topico" && git push
CI workflow
Example workflow (.github/workflows/grade.yml):
- ├── 📂.github
- └── 📂workflows
- └── 🚀grade.yml👈 Criar Aqui
- └── 📂workflows
- ├── 📄...
- └── 📂src
- └── 📄main.cpp
name: Build & Test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Cache PlatformIO
uses: actions/cache@v5
with:
path: |
~/.cache/pip
~/.platformio/.cache
~/.platformio/packages
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }}
- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: "3.12"
- name: Install PlatformIO
run: pip install platformio
- name: Build project
run: pio run
# Uncomment if you want native/unit tests in CI
# - name: Run tests
# run: pio test -e native
GitHub action
git add .github/workflows/grade.yml && git commit -m "T6: GitHub action" && git push
Logout do seu ambiente dev, git e gh
Para o git "esquecer" suas informações salvas:
git credential-manager erase && cmdkey /list | findstr "github" && gh auth logout