Arduino e sketches para Arduino

Arquitetura de firmware para sondas de temperatura conectadas à rede usando placas Arduino e sensores de umidade.

Vista de cima de uma placa microcontroladora Arduino Uno azul sobre fundo branco
Placas compatíveis com Arduino rodam o sketch que lê as sondas e publica o JSON. Foto: Wikimedia Commons contributor. CC0

O hardware das sondas roda em microcontroladores compatíveis com Arduino. O firmware, normalmente chamado de sketch, lê os sensores em intervalos fixos, formata os resultados em JSON e os disponibiliza na rede para que o site e outros clientes busquem dados ao vivo sem cabo serial.

O que o sketch faz

  1. Inicializa os barramentos dos sensores e o LCD local de 16×2 para leitura no local.
  2. Lê cada sonda DHT22 com novas tentativas em caso de erros temporários no barramento.
  3. Calcula a média das sondas em bom estado como valor-resumo rápido no JSON.
  4. Responde às requisições HTTP com um documento JSON compacto pelo shield Ethernet.
  5. Opcionalmente, registra erros na serial para depuração no local.

Formato JSON típico

Os clientes esperam um objeto temp no nível superior com chaves numéricas para cada sonda, além de avg. A umidade aparece ao lado da temperatura em cada sonda. Manter as chaves estáveis importa mais do que uma formatação bonita: os mapeamentos do dashboard fazem referência direta a essas chaves.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 },
    "1": { "f": 36.8, "c": 2.7, "h": 43.5 },
    "avg": { "f": 37.5, "c": 3.1, "h": 42.2 }
  }
}

Para ingestão push, o mesmo objeto de sonda pode ser enviado para /api/ingest/<key>. Os campos opcionais de nível superior battery (ou battery_pct) e rssi atualizam a saúde do dispositivo na página Devices sem exigir chaves de sensor extras.

{
  "temp": {
    "0": { "f": 38.2, "c": 3.4, "h": 41.0 }
  },
  "battery": 87,
  "rssi": -62
}

Ingestão push a partir do shield Ethernet

A pilha W5100 de um Uno não suporta TLS, então não consegue fazer POST diretamente para https://probeharbor.dev. Use ethernet_dht22_ingest para enviar o JSON temp clássico por HTTP (DHT22 em A4/A5, JSON opcional na porta 80 para leitura pela LAN). Rode push_https_forward.py em um Raspberry Pi, NAS ou notebook para que esses POSTs cheguem ao ProbeHarbor por HTTPS. Os exemplos para ESP32 com Wi‑Fi que falam TLS ficam em sketches/.

Guias de ligação do hardware

A montagem usa um Arduino Uno, um shield Ethernet W5100, uma protoboard, um potenciômetro de contraste, um LCD de 16×2 e dois sensores DHT22. Três páginas complementares documentam em detalhes os esquemas e o mapa de pinos:

Escolhas da pilha de rede

Esta revisão usa um shield Ethernet via SPI. O sketch cuida do DHCP, dos loops de reconexão e do envio do JSON enquanto o LCD continua mostrando os valores das sondas ao vivo. Quando o TLS é pesado demais para o MCU, um relay em Python pode terminar o HTTPS: veja Scripts e feeds em Python. Para ingestão push a partir do mesmo shield, veja ethernet_dht22_ingest.

Arduino Uno ligado a um sensor de temperatura e umidade DHT com três jumpers
Uma primeira montagem mínima de microcontrolador e sensor, antes da Ethernet, do LCD e da fiação com duas sondas. Foto: Wikimedia Commons contributor. CC BY-SA 4.0
Placa de sonda ProbeHarbor da segunda revisão com shield Ethernet, LCD e sensores DHT22
ProbeHarbor, revisão dois: Ethernet, leitura no LCD e duas entradas DHT22 em uma única montagem.

Fluxo de desenvolvimento

Os sketches são editados no Arduino IDE ou no PlatformIO, gravados via USB e verificados com logs na serial antes de a placa ser instalada no espaço monitorado. Confira o formato do JSON com curl antes de adicionar a URL do feed ao dashboard do site.

Exemplos prontos para adaptar para DS18B20, MAX31855, MAX6675 e Uno + Ethernet ficam neste repositório, em sketches/. O Raspberry Pi Pico W / Pico 2 W usa o mesmo JSON de ingestão com CircuitPython ou MicroPython. Firmware completo de Ethernet + DHT + LCD: arduino-network-json-temperature-sever.

Dicas de confiabilidade

  • Reinicializações por watchdog recuperam a placa de travamentos raros de rede sem você precisar subir na escada.
  • Separe o ruído da alimentação dos sensores da alimentação do MCU quando houver cabos longos.
  • Versione seu esquema JSON na documentação ao adicionar campos.
  • Documente quais pinos GPIO correspondem a quais etiquetas físicas de sonda; veja o guia de ligação dos pinos.

Perguntas frequentes

Onde estão os sketches de exemplo para Arduino?
No repositório probeharbor no GitHub, em sketches/, além dos guias de Arduino em About. Os exemplos para ESP32 fazem POST HTTPS diretamente. O Uno + Ethernet W5100 usa ethernet_dht22_ingest (JSON temp clássico em A4/A5) mais um relay HTTP→HTTPS na rede local: o shield não consegue fazer TLS com o probeharbor.dev.