Sobre o projeto
SIMUT (Sistema Integrado de Monitoramento Universal e Telemetria) é um firmware IoT para o Raspberry Pi Pico W que monitora temperatura, umidade e pressão em até 16 sensores, e funciona com ou sem rede. Uma única árvore de código compila três dispositivos publicados: um monitor com painel touch (TFT 320×240), um monitor com LCD de caracteres (16×2, o alpha) e um registrador a bateria que hiberna entre leituras (o Air, experimental).
Eles compartilham um núcleo: histórico binário no dispositivo e alarmes por canal; 32 contas de usuário com 13 bits de permissão; interface web embarcada; telemetria via HTTP(S) ou MQTT(S), com uma linha separada para alarmes; Home Assistant MQTT Discovery, endpoint Prometheus /metrics e syslog remoto (RFC 5424); atualizações over-the-air e console serial.
Status do projeto: versão atual v2.8.0 (2026-09-30). O SIMUT saiu do beta com a v2.7.0, com base em medições: um soak de 8,18 h com 0 reinicializações, e 6 de 6 atualizações over-the-air sem perdas. A v2.8.0 mantém a configuração quando uma atualização é interrompida pela metade, e permite que o formato de telemetria personalizado envie o Content-Type que o servidor espera. Imagens publicadas: três imagens, cada uma como .uf2 e .bin: release (painel touch TFT), alpha (LCD 16×2 com console Bluetooth) e air (registrador a bateria headless). Os pacotes de idioma pt-BR e es-ES e um manifesto OTA acompanham. Maturidade: release estável; alpha publicado e testado em bancada; air experimental. Cada pull request executa 426 casos de teste de host em 8 suítes, 60 s de fuzzing e análise estática, e compila todas as seis imagens de firmware a partir de cache frio.
Limitações conhecidas estão documentadas: OTA reformata o sistema de arquivos (Wi-Fi, contas e slots de sensores são preservados; histórico, arquivos de calibração e pacotes de idioma não); um slot de firmware e sem rollback; reinicializações inexplicadas apareceram três vezes na imagem de bancada; conexões ociosas podem derrubar streams; respostas em chunks ocasionalmente quebradas; salvar a lista de usuários reinicia o dispositivo; o cursor de telemetria é um único timestamp; não é um instrumento metrológico certificado.
Por que SIMUT: autônomo com display, ambientes regulados (trilha de auditoria, RBAC de usuário), cadeia de frio (sondas até −50 °C), operação offline, atualizações OTA, segurança (HMAC-SHA256, RBAC de 13 bits, bloqueios, HTTPS opcional), Home Assistant, métricas Prometheus, log de auditoria remoto. Casos de uso típicos: laboratórios, farmácias, bancos de sangue, armazenamento de vacinas, cadeias de frio alimentares.
Arquitetura: dual-core (Core 0 loop principal, Core 1 loop de display), com AppManager, SensorManager, WebManager, TelemetryManager, CommandManager, StorageManager, NetworkManager no Core 0; DisplayManager, TouchPriority, renderizador de canvas DMA, Themes, i18n no Core 1. Interfaces de hardware: SPI para TFT ILI9341 320×240 + Touch XPT2046 (alpha: LCD HD44780 16×2; Air: sem display); GP0–GP15 para 16 slots de sensores universais (DS18B20 1-Wire, DHT22, BMP280/BME280 I2C); console serial USB CDC (+ Bluetooth no alpha/Air); WiFi (CYW43439) para servidor HTTP(S) + telemetria.
Principais recursos:
- Sensoriamento e alarmes: 16 slots de sensores universais, canais de temperatura/umidade/pressão, offsets e curvas de calibração por sensor, pipeline de sensores zero-trust (verificação de ROM do DS18B20, histerese de erro, rejeição fora de faixa), alarmes em todos os canais com limites baixo/alto, alarme de falha, silêncio de 120 s, mudo global, melodias de buzzer, janelas de manutenção de até 30 dias.
- Painel touch (release): ILI9341 320×240, dashboard, gráficos de histórico com faixa mín/máx, estatísticas, calendário, configurações; identidade no painel com 32 contas, cada uma com PIN, política de PIN configurável, teclado reembaralhado após cada toque, bloqueio por conta; administração na tela; gestos no painel superior; caminho rápido de renderização DMA; área segura de 4 px; temas (até 8 carregados do LittleFS, 11 inclusos); sistema de som com 6 melodias por classe.
- LCD de caracteres (alpha): leituras alternam por slot ativo e canal a cada 3 s, dígitos grandes, ponto de acesso de configuração mostra endereço/SSID/chave, console Bluetooth, contagem de telemetria pendente.
- Interface web: 11 páginas comprimidas com gzip, temas claro/escuro, gerenciador de arquivos, sessões multiusuário expirando após 15 minutos ociosos; espelho do painel ao vivo (release) com 213 ms por quadro; alterações classificadas com dry run (Test/Apply now/Save and restart); reiniciar sem salvar; versão na página de login; varredura Wi-Fi; gráficos de histórico e exportação CSV no navegador; API HTTP com 62 rotas.
- Telemetria e integrações: quatro transportes (HTTP, HTTPS, MQTT, MQTTS), payloads em JSON/CSV/template personalizado, TLS 1.2 com verificação de certificado; agrupamento por quantidade (t_int lote mínimo, t_bat máximo por requisição, tamanho de lote adaptativo); linha de alarme separada com fila própria e confirmação; Home Assistant MQTT Discovery, Prometheus /metrics, syslog remoto; ganchos de frota (cabeçalhos X-SIMUT-*, serviço mDNS _simut._tcp, tokens Bearer, origem CORS configurável).
- Rede e hora: Wi-Fi com escada de retentativas (5 s dobrando até 120 s), SSIDs ocultos, IP estático, dois servidores DNS, NTP personalizado ou relógio manual, porta web configurável; ponto de acesso de configuração (WPA2, chave por dispositivo, portal cativo em http://192.168.4.1) com cinco formas de entrada; backoff de retentativa NTP de 20 s a 15 min com fallback para pool.ntp.org.
- Armazenamento e histórico: histórico binário compacto (V5) com codificação delta + âncora a 5,38 bytes/registro (~116 dias em sistema de arquivos de 1 MB), blocos de 60 registros com CRC, bloco aberto salvo após cada registro, dia mais antigo excluído após 86% cheio; configuração verificada por CRC32, gravada em arquivo temporário e renomeada com fallback .bak, segredos ofuscados; log de eventos 2 × 800 registros e 155 códigos de evento.
- Segurança: 32 contas, 13 bits de permissão, ninguém pode conceder um bit que não possui; senhas HMAC-SHA256 5000 rodadas com salt aleatório de hardware de 8 bytes e pepper vinculado à placa; unidade de fábrica gera senha de admin aleatória de 8 caracteres impressa uma vez no console USB; limites de força bruta (bloqueio de login 2–300 s por cliente, throttling por IP, bloqueio exponencial do console Bluetooth); sessões com cookie HttpOnly SameSite=Strict ou token Bearer; uploads recusam path traversal, percent-encoding, bytes de controle, nomes reservados; HTTPS opcional (release) com instalação de certificado; auditorias encerradas, último achado V-09 corrigido na v2.7.0.
- Resiliência e forense: autópsia de crash a cada boot (registradores de scratch do watchdog nomeiam módulo travado), disciplina de flash dual-core (Core 1 pausado em torno de gravações na flash), watchdog alimentado em torno de operações de sistema de arquivos.
- Atualizações, backup e recuperação: OTA pela página web (somente admin, imagem verificada antes do commit), backup e restauração de todo o sistema de arquivos verificados por CRC32 e vinculados ao chip, guia de recuperação com BOOTSEL, picotool e caminhos de 1200 bps.
- SIMUT Air (experimental): dois modos (M0 acordado, M1 ciclo de sono), rádio apenas quando há registros pendentes, pino de detecção de carregador, console completo.
- Internacionalização: 3 idiomas de interface (inglês embutido, português pt-BR e espanhol es-ES como pacotes .lng).
Início rápido: pré-requisitos PlatformIO Core 6.x, zopfli opcional, Raspberry Pi Pico W; compile com pio run -e pico_w_release, grave com pio run -e pico_w_release -t upload, apenas na primeira gravação envie os dados do LittleFS com uploadfs (aviso: reformata a partição). Releases pré-compilados incluem arquivos .uf2 e .bin. Primeiro boot: capture a senha de admin no console serial USB, entre na rede pelo ponto de acesso de configuração ou comandos do console, abra a interface web, adicione sensores, configure no painel touch.
Hardware: Raspberry Pi Pico W (RP2040 dual-core), TFT ILI9341 320×240 (SPI DMA) ou LCD HD44780 16×2, touch resistivo XPT2046, 16 slots de sensores universais em GP0–GP15, buzzer piezo passivo (controlado por PIO), 2 MB de flash interna (1 MB firmware + 1 MB LittleFS). Um layout de PCB SIMUT (KiCad) está disponível para download.
A documentação inclui guia de fiação, guia de recuperação, notas de segurança e um configurador de build para imagens personalizadas.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.