Skip to content

VitorAlho/esp32_task_manager

Repository files navigation

ESP32 System Monitor - Professional Edition

Ferramenta profissional para monitoramento completo do sistema ESP32 através da porta serial, similar ao Gerenciador de Tarefas do Windows. Inclui interface gráfica avançada, múltiplas métricas em tempo real, e logging abrangente de dados.

Funcionalidades

🖥️ Interface Gráfica Profissional

  • ✅ Interface similar ao Gerenciador de Tarefas do Windows
  • ✅ Abas organizadas: Performance, Processos, System Log
  • ✅ Dashboard em tempo real com múltiplas métricas
  • ✅ Indicadores visuais coloridos para status do sistema

📊 Métricas Monitoradas

  • Memória Heap: Total, livre, usado, mínimo livre, maior bloco
  • CPU: Frequência de clock
  • Tarefas: Lista completa com estado, prioridade, stack, uso de CPU
  • Rede: Status WiFi, SSID, RSSI, canal
  • Sistema: Uptime, contagem de tarefas

📈 Gráficos em Tempo Real

  • 4 gráficos simultâneos:
    • Uso de heap (total/livre/mínimo)
    • Utilização percentual do heap
    • Frequência da CPU
    • Intensidade do sinal WiFi
  • ✅ Eixos temporais formatados
  • ✅ Atualização automática a cada ciclo de dados

📋 Lista de Processos

  • ✅ Tabela completa de tarefas ativas
  • ✅ Colunas: Nome, Estado, Prioridade, Stack Restante, % CPU
  • ✅ Scroll automático e atualização em tempo real

📝 Logging Avançado

  • ✅ Arquivo CSV automático com timestamp
  • ✅ Dados abrangentes salvos periodicamente
  • ✅ Console de log integrado na interface
  • ✅ Possibilidade de análise histórica

🎛️ Controles da Interface

  • ✅ Botões de iniciar/parar monitoramento
  • ✅ Seleção automática ou manual de porta serial
  • ✅ Limpeza de logs
  • ✅ Salvamento forçado de dados
  • ✅ Status bar com informações do sistema
  • Controle de Logs: Checkbox para mostrar/ocultar logs HEAP_MONITOR
  • Painel de Comandos: Envio rápido de comandos pré-definidos
  • Sistema de Marcadores: Destaque automático de strings com cores
  • Zoom de Texto: Ctrl + roda do mouse para ajustar fonte (6-24pt)
  • Salvamento de Logs: Exportação automática para arquivo
  • Informações do ESP32: Detecção automática de chip model, versão ESP-IDF, flash, etc.
  • Informação de Core: Coluna mostrando núcleo vinculado às tarefas
  • Decodificação de Backtrace: Ferramenta integrada para análise de crashes (requer configuração do caminho das ferramentas ESP-IDF)
  • Sistema de Configuração: Salvamento automático de configurações em JSON (caminhos, comandos, marcadores)
  • Import/Export de Cmd/Markers: Botões para criar configurações específicas por projeto

Pré-requisitos

  • Python 3.7+
  • Porta serial conectada ao ESP32
  • ESP32 com firmware que gera logs de sistema (formato específico requerido)
  • tkinter (normalmente incluído com Python)
  • matplotlib, numpy, pyserial (instaláveis via pip)

Instalação

  1. Instale as dependências Python:
pip install -r requirements.txt
  1. Conecte o ESP32 à porta serial

  2. Configure o caminho das ferramentas ESP-IDF (opcional, apenas para decodificação de backtrace):

    A ferramenta addr2line é necessária apenas para a funcionalidade de decodificação de backtrace na aba "Backtrace". Se você precisar usar essa funcionalidade:

    • Na aba "Backtrace", clique em "Browse Tools" e selecione o diretório onde estão instaladas as ferramentas do ESP-IDF
    • O caminho típico é: C:\Users\[seu_usuario]\.espressif\tools\xtensa-esp32s3-elf\[versão]\xtensa-esp32s3-elf\bin\
    • Se você não configurou o caminho, a aplicação tentará localizar automaticamente a ferramenta
  3. Configuração Automática:

    • A aplicação cria automaticamente um arquivo esp32_monitor_config.json na pasta tools/
    • Todas as configurações são salvas automaticamente quando alteradas
    • Caminhos das ferramentas, arquivo ELF, comandos e marcadores são persistidos

Sistema de Configuração

📁 Arquivo de Configuração

A aplicação agora cria automaticamente um arquivo esp32_monitor_config.json que armazena:

  • Caminho das ferramentas ESP-IDF (para decodificação de backtrace)
  • Último arquivo ELF usado
  • Lista de comandos personalizados
  • Lista de marcadores de texto

💾 Salvamento Automático

Todas as configurações são salvas automaticamente quando:

  • Você altera o caminho das ferramentas ESP-IDF
  • Você seleciona um novo arquivo ELF
  • Você adiciona, edita ou remove comandos
  • Você adiciona, edita ou remove marcadores

📤📥 Import/Export de Comandos e Marcadores

Na aba System Log, você encontrará dois novos botões:

Export Cmd/Markers

  • Função: Salva comandos e marcadores atuais em um arquivo JSON
  • Localização: esp32_commands_markers.json (ou personalizado)
  • Formato: JSON estruturado com timestamp e versão

Import Cmd/Markers

  • Função: Carrega comandos e marcadores de um arquivo JSON
  • Comportamento: Adiciona apenas itens novos (evita duplicatas)
  • Notificação: Mostra quantos itens foram importados

💡 Exemplo de Arquivo Exportado

{
    "commands": [
        {
            "command": "heap",
            "type": "string"
        },
        {
            "command": "tasks",
            "type": "string"
        }
    ],
    "markers": [
        {
            "text": "ERROR",
            "color": "#FF0000"
        },
        {
            "text": "WARNING",
            "color": "#FFA500"
        }
    ],
    "export_timestamp": "2024-11-01T12:00:00.000000",
    "version": "1.0"
}

🎯 Benefícios do Sistema

  • Configurações por Projeto: Crie arquivos de configuração específicos para cada projeto ESP32
  • Backup/Restore: Facilita backup e restauração de configurações personalizadas
  • Compartilhamento: Arquivos JSON podem ser compartilhados entre desenvolvedores
  • Organização: Separe comandos específicos para diferentes tipos de projetos
  • Persistência: Configurações são mantidas entre sessões da aplicação

Uso

Interface Gráfica Principal

# Iniciar a interface gráfica completa
python esp32_heap_monitor.py

# Especificar porta serial diretamente
python esp32_heap_monitor.py -p COM3

Plotar Dados Históricos

# Plotar dados de arquivo CSV salvo anteriormente
python esp32_heap_monitor.py -l system_monitor_20250101_143022.csv

# Plotar dados de exemplo
python esp32_heap_monitor.py -l example_heap_data.csv

Como Usar a Aba System Log

🎮 Gerenciando Comandos

  1. Adicionar Comando:

    • Clique em "Add Command"
    • Digite o comando (string ou hex)
    • Selecione o tipo
    • Clique OK
  2. Enviar Comando:

    • Selecione um comando na lista
    • Clique em "Send" ou pressione Enter
  3. Editar/Excluir:

    • Selecione um comando
    • Use os botões Edit/Delete

🏷️ Usando Marcadores

  1. Adicionar Marcador:

    • Clique em "Add Marker"
    • Digite o texto a destacar
    • Escolha a cor (picker ou hex)
    • Clique OK
  2. Destaque Automático:

    • Qualquer ocorrência do texto marcado
    • Aparecerá com fundo colorido
    • Aplicação imediata nos logs

💡 Exemplos Práticos

Comandos Úteis:

  • restart - Reiniciar ESP32
  • status - Status do sistema
  • AT+GMR - Versão do firmware
  • help - Lista de comandos disponíveis

Marcadores Úteis:

  • ERROR (vermelho) - Destacar erros
  • WARNING (amarelo) - Avisos importantes
  • SUCCESS (verde) - Operações bem-sucedidas
  • HEAP_MONITOR (azul) - Logs de sistema

💾 Salvamento de Logs

  1. Habilitar Salvamento:

    • Marque "Save Log to File" na aba System Log
    • Digite ou navegue até o caminho desejado
    • O arquivo será criado automaticamente
  2. Gerenciar Arquivo:

    • "Browse": Selecionar local para salvar o arquivo
    • "Clear File": Limpar conteúdo do arquivo (mantém header)
    • Arquivo é atualizado em tempo real
  3. Formato do Arquivo:

    # ESP32 System Monitor Log
    # Started at: 2025-01-01 14:30:22
    
    [2025-01-01 14:30:22] ESP32: I (1000) WIFI: Connected to MyWiFi
    [2025-01-01 14:30:23] Monitor: System monitoring started
    

Interface da Aplicação

🏠 Aba Performance

  • Painel Superior: Métricas atuais de CPU, Memória, Rede e Sistema
  • Painel de Gráficos: 4 gráficos atualizando em tempo real
  • Indicadores Coloridos: Verde (OK), Laranja (Atenção), Vermelho (Crítico)

📋 Aba Processos

  • Lista de Tarefas: Todas as tarefas ativas do ESP32
  • Informações Detalhadas: Estado, prioridade, uso de stack, CPU e núcleo
  • Coluna Core: Mostra o núcleo vinculado ou "N/F" se não vinculado
  • Atualização Automática: Sincronizada com dados do ESP32

📝 Aba System Log

  • Layout Avançado: Painel dividido estilo Docklight
  • Painel Esquerdo: Comandos e marcadores de strings
  • Painel Direito: Display de logs com destaques automáticos

🎮 Comandos Pré-definidos

  • Adicionar Comando: String ou hexadecimal
  • Editar/Excluir: Gerenciamento completo
  • Enviar: Botão direto para cada comando
  • Tipos Suportados: String e Hexadecimal

🏷️ Marcadores de Strings

  • Destaque Automático: Texto específico com cor personalizada
  • Adicionar Marcador: Texto + cor de fundo
  • Seleção de Cores: Color picker ou entrada manual
  • Aplicação Imediata: Destaque em tempo real nos logs

📋 Recursos do Log

  • Logs do ESP32: Todos os logs seriais exceto HEAP_MONITOR
  • Logs do Programa: Mensagens do monitor (conexões, erros, status)
  • Controle HEAP_MONITOR: Checkbox opcional para mostrar/esconder logs de monitoramento
  • Zoom de Texto: Ctrl + Roda do mouse para aumentar/diminuir fonte (6-24pt)
  • Salvamento Automático: Checkbox para salvar logs em arquivo
  • Seleção de Arquivo: Campo para escolher caminho do arquivo de log
  • Limpeza de Arquivo: Botão para limpar conteúdo do arquivo de log
  • Timestamp Automático: Cada linha marcada com horário
  • Scroll Automático: Mantém o foco na informação mais recente
  • Limpeza Manual: Botão para limpar o histórico de logs

🔍 Aba Backtrace

  • Decodificação de Backtrace: Converte endereços hexadecimais em nomes de funções e arquivos
  • Seleção de Arquivo ELF: Campo para especificar o caminho do arquivo .elf
  • Entrada de Backtrace: Área de texto para colar o backtrace do ESP32
  • Execução Automática: Busca o addr2line do ESP32 automaticamente
  • Saída Formatada: Resultados decodificados em área de texto dedicada

Como Usar o Backtrace:

  1. Configurar Ferramentas (opcional): Clique em "Browse Tools" e selecione o diretório das ferramentas ESP-IDF (onde está o addr2line.exe)
  2. Arquivo ELF: Clique em "Browse ELF" e selecione o arquivo .elf do seu projeto ESP32
  3. Colar Backtrace: Cole o backtrace do ESP32 na área de texto (formato 0x420186ef:0x3fcb3830)
  4. Decodificar: Clique em "Decode Backtrace"
  5. Resultado: Visualize as funções e arquivos correspondentes na área de saída

💡 Dica: Para testar a funcionalidade, use o arquivo tools/example_backtrace.txt como exemplo de entrada.

📊 Painel de Informações do ESP32

No topo direito da aplicação, você verá um painel dedicado com informações automaticamente detectadas do ESP32 em layout horizontal, sempre visível acima das abas, assim que a conexão serial for estabelecida.

Layout Horizontal:

┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ ESP32 Information                                                                               │
│ Chip Model: ESP32  Chip Revision: v3.1  ESP-IDF Version: v5.5.1  Flash Size: 2MB  PSRAM Size: Unknown  CPU Frequency: 160 MHz  Uptime: 00:10:25 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Informações Exibidas:

  • Chip Model: Detecta automaticamente ESP32, ESP32-S2, ESP32-S3, ESP32-C3, etc.
  • Chip Revision: Versão de revisão do chip (ex: v3.1)
  • ESP-IDF Version: Versão do ESP-IDF (ex: v5.5.1)
  • Flash Size: Tamanho da memória flash (ex: 2MB)
  • PSRAM Size: Tamanho da PSRAM (se disponível)
  • CPU Frequency: Frequência de clock da CPU (ex: 160 MHz)
  • Uptime: Tempo total de operação do firmware (formato HH:MM:SS)

Como Funciona:

  1. Detecção Automática: Analisa os logs de boot do ESP32 em tempo real
  2. Atualização Imediata: Informações aparecem assim que o ESP32 é ligado/resetado
  3. Identificação pelo Alvo: O modelo é inferido a partir do prefixo boot.<alvo> (ex.: boot.esp32s3, boot.esp32)
  4. Integração com Backtrace: Usa o chip model detectado para sugerir automaticamente a ferramenta addr2line correta

Benefícios:

  • Identificação rápida do modelo ESP32 conectado
  • Configuração automática da ferramenta de backtrace
  • Debugging aprimorado com informações completas do sistema
  • Compatibilidade universal com todos os modelos ESP32

Nota: As informações são extraídas dos logs de boot padrão do ESP-IDF, não requerendo nenhuma modificação no firmware.

💡 Dica: Para testar a detecção de informações do ESP32, use o arquivo tools/example_esp32_boot.log com o script tools/test_esp32_info.py.

Opções da Linha de Comando

  • -p, --port: Porta serial (ex: COM3, /dev/ttyUSB0)
  • -b, --baudrate: Baud rate (padrão: 115200)
  • -m, --max-points: Número máximo de pontos no gráfico (padrão: 100)
  • -l, --load-csv: Carregar e plotar dados de arquivo CSV

Atalhos de Teclado

Aba System Log

  • Ctrl + Roda do Mouse: Aumentar/diminuir tamanho da fonte (6-24pt)
  • ↑/↓: Navegar pelo histórico de logs

Aba Processes

  • ↑/↓: Navegar pela lista de tarefas
  • Enter: Selecionar tarefa

Interface Geral

  • Ctrl+Q: Sair da aplicação
  • F5: Atualizar dados (quando conectado)

Arquivos de Exemplo e Teste

  • example_heap_data.csv: Dados de heap de exemplo para testes
  • example_system_data.csv: Dados de sistema de exemplo
  • example_esp32_boot.log: Logs de boot ESP32 para testes de detecção
  • esp32_commands_markers_example.json: Exemplo de arquivo de configuração com comandos e marcadores
  • test_regex.py: Script para testar expressões regulares
  • test_current_log.py: Script para testar formato atual de log
  • test_esp32_info.py: Script para testar detecção de informações ESP32
  • example_backtrace.txt: Exemplo de backtrace para testes

Arquivos Gerados

  • system_monitor_YYYYMMDD_HHMMSS.csv: Arquivo CSV abrangente com dados timestamped
  • esp32_monitor_config.json: Arquivo de configuração JSON criado automaticamente
  • Interface gráfica em tempo real com múltiplas abas
  • Logs detalhados salvos automaticamente

Formato dos Dados CSV

timestamp,heap_total,heap_free,heap_min_free,heap_largest_block,cpu_freq,task_count,wifi_rssi,uptime
2025-01-01T14:30:22.123456,327680,245760,180224,131072,240,8,-45,00:15:30
2025-01-01T14:30:27.123456,327680,245600,180224,131072,240,8,-45,00:15:35

Funcionalidades dos Gráficos

📊 Gráfico 1: Heap Memory (Superior Esquerdo)

  • Linha Azul: Heap total disponível
  • Linha Verde: Heap livre atual
  • Linha Vermelha: Heap mínimo livre registrado
  • Linha Vermelha Tracejada: Limite crítico de 10KB - abaixo deste valor, operações WiFi/BLE podem falhar ou causar instabilidade no sistema

📈 Gráfico 2: Heap Utilization (Superior Direito)

  • Linha Laranja: Percentual de utilização do heap (0-100%)
  • Escala automática com alertas visuais

🎯 Gráfico 3: CPU Frequency (Inferior Esquerdo)

  • Linha Roxa: Frequência da CPU em MHz
  • Monitoramento de performance do processador

📶 Gráfico 4: WiFi Signal (Inferior Direito)

  • Linha Azul: Intensidade do sinal RSSI em dBm
  • Monitoramento da qualidade da conexão de rede

Otimização de Performance

🎛️ Controle de Logs do Sistema

  • Por padrão: Logs HEAP_MONITOR do ESP32 são ocultados da aba System Log
  • Benefício: Interface mais limpa focada em logs importantes
  • Uso: Marque "Show ESP32 Serial Logs" para ver também os logs de monitoramento do sistema
  • Vantagem: Permite aumentar a frequência dos logs de monitoramento sem poluir a interface

📊 Frequência de Atualização

  • ESP32 Logs: A cada 1 segundo (formato compacto permite alta frequência)
  • Gráficos: Atualizam a cada ciclo de dados do ESP32
  • Interface: Atualizações de GUI processadas a cada 100ms
  • Threading: Separação entre coleta de dados e atualização visual

💾 Logging Eficiente

  • CSV: Dados salvos apenas quando há mudanças significativas
  • Console: Logs sempre disponíveis no terminal/console
  • Memória: Uso controlado de RAM com deque limitado

Troubleshooting

Porta Serial Não Encontrada

  • Verifique se o ESP32 está conectado
  • Use python -c "import serial.tools.list_ports; print([p.device for p in serial.tools.list_ports.comports()])" para listar portas disponíveis

Dados Não Aparecem no Gráfico

  • Verifique se o ESP32 está gerando logs de heap no formato correto
  • Certifique-se de que o baud rate está correto

Erro de Permissões na Porta Serial

  • No Linux/Mac: sudo python esp32_heap_monitor.py
  • No Windows: Execute como administrador ou verifique permissões da porta

Exemplo de Uso

# 1. Instalar dependências
pip install -r requirements.txt

# 2. Conectar ESP32 e executar monitoramento
python esp32_heap_monitor.py -p COM3

# 3. Fechar janela do gráfico para parar o monitoramento

# 4. Plotar dados salvos posteriormente
python esp32_heap_monitor.py -l heap_monitor_20250101_143022.csv

Logs Esperados do ESP32

O script agora usa um formato compacto de linha única para máxima eficiência:

I (xxxxx) HEAP_MONITOR: H:327680,245760,180224,131072 C:160 T:8 W:MyWiFi,-45 U:00:15:30 TD:TaskName,R,1,1024,15;AnotherTask,Y,2,2048,5

Formato Detalhado:

  • H: heap_total,heap_free,heap_min_free,heap_largest_block
  • C: cpu_frequency_mhz
  • T: task_count
  • W: wifi_ssid,rssi ou DISCONNECTED
  • U: uptime_hh:mm:ss
  • TD: task1_name,state,priority,stack_left,cpu%;task2_name,state,priority,stack_left,cpu%

Códigos de Estado das Tasks:

  • R: Running
  • Y: Ready
  • B: Blocked
  • S: Suspended
  • D: Deleted
  • U: Unknown

Frequência: Atualização a cada 1 segundo (alta frequência possível devido ao formato compacto)

Importante: Certifique-se de que o firmware do ESP32 foi atualizado com a nova função prvHeapMonitorTask que gera logs no formato compacto.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published