Atualizações OTA no ESP32: Guia Completo e Seguro!
Guia Completo para Particionamento e Bootloader no ESP32
A correta compreensão e configuração
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. da estrutura de particionamento e do bootloader é fundamental para o sucesso de projetos baseados no ESP32. Esse artigo tem como objetivo abordar de forma abrangente os conceitos, práticas e ferramentas relacionadas à tabela de particionamento e ao bootloader, destacando sua importância, elementos essenciais e como personalizá-los para atender às necessidades do seu projeto. Seja para evitar problemas futuros ou otimizar a utilização dos recursos internos, confira as orientações a seguir.
Importância da Estrutura de Particionamento e do Bootloader🔗
O ESP32 utiliza uma tabela de particionamento para definir áreas específicas da memória flash, onde são alocados dados críticos, sistema de arquivos, configurações
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. e o próprio firmware do usuário. Paralelamente, o bootloader desempenha o papel de gerenciar o processo de inicialização, verificando a integridade das partições e carregando a aplicação principal de forma confiável.
Conhecer e dominar esses dois elementos é essencial para:
- Garantir a atualização OTA
Manutenção e Atualizações do Sistema de Alarme com ESP32Descubra como manter e atualizar o sistema de alarme com ESP32, garantindo segurança, confiabilidade e desempenho através de práticas e atualizações OTA. sem sobreposição de dados importantes. - Permitir a realização de experimentos com diferentes layouts de memória
Arquitetura do ESP32: Entendendo Seus Componentes InternosDescubra como otimizar o desempenho dos seus projetos IoT com nosso guia detalhado sobre a arquitetura interna e gerenciamento de recursos do ESP32.. - Reestabelecer ou recuperar o sistema em casos
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. de falhas no bootloader ou na aplicação. - Personalizar recursos e otimizar a utilização da memória
Arquitetura do ESP32: Entendendo Seus Componentes InternosDescubra como otimizar o desempenho dos seus projetos IoT com nosso guia detalhado sobre a arquitetura interna e gerenciamento de recursos do ESP32. flash conforme o projeto.
A Tabela de Particionamento do ESP32🔗
O que é a Tabela de Particionamento
A tabela de particionamento define como a memória
Arquitetura do ESP32: Entendendo Seus Componentes InternosDescubra como otimizar o desempenho dos seus projetos IoT com nosso guia detalhado sobre a arquitetura interna e gerenciamento de recursos do ESP32. flash do ESP32 é segmentada. Essa segmentação organiza áreas para:
- Bootloader
- Aplicação (factory ou OTA
Segurança na Rede: Protegendo a Conexão Wi-Fi do ESP32Proteja a conexão Wi-Fi do ESP32 com dicas de criptografia, senhas fortes e monitoramento, garantindo segurança e integridade dos dados.) - NVS (Non-Volatile Storage
Gerenciando Múltiplas Redes Wi-Fi com o ESP32Aprenda a configurar o ESP32 para gerenciar diversas redes Wi-Fi automaticamente, garantindo conexão robusta e estável com práticas simples e seguras.) - Sistema de arquivos (SPIFFS
Utilizando SPIFFS para Armazenamento de Arquivos WebAprenda a usar SPIFFS para armazenar arquivos web no ESP32, otimizando o desempenho e facilitando a criação de interfaces IoT com segurança e eficiência. ou FAT) - Outras partições específicas, como dados personalizados ou reservadas
Cada partição é descrita com parâmetros como:
- Nome da partição
- Tipo (app
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência., data, etc.) - Subtipo (factory, OTA_0, NVS
Gerenciando Múltiplas Redes Wi-Fi com o ESP32Aprenda a configurar o ESP32 para gerenciar diversas redes Wi-Fi automaticamente, garantindo conexão robusta e estável com práticas simples e seguras., etc.) - Endereço inicial
- Tamanho da partição
- Flags de segurança
Segurança em MQTT: Autenticação e Criptografia no ESP32Descubra como proteger conexões MQTT em aplicações IoT com ESP32, implementando autenticação e criptografia TLS para segurança máxima. e leitura
Exemplo de Tabela de Particionamento (Formato CSV)
A seguir, um exemplo prático de tabela de particionamento para o ESP32
O que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia!:
nome, tipo, subtipo, offset
Calibração e Precisão dos Sensores com ESP32Aprenda técnicas práticas de calibração e ajuste de sensores utilizando ESP32 para obter medições precisas e confiáveis em seus projetos IoT., tamanho, flags
nvs, data, nvs
Gerenciando Múltiplas Redes Wi-Fi com o ESP32Aprenda a configurar o ESP32 para gerenciar diversas redes Wi-Fi automaticamente, garantindo conexão robusta e estável com práticas simples e seguras., 0x9000, 0x6000,
otadata,data, ota
Segurança na Rede: Protegendo a Conexão Wi-Fi do ESP32Proteja a conexão Wi-Fi do ESP32 com dicas de criptografia, senhas fortes e monitoramento, garantindo segurança e integridade dos dados., 0xf000, 0x2000,
app0, app
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência., factory, 0x10000, 1M,
app1, app
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência., ota_0, 0x110000, 1M,
spiffs, data, spiffs
Utilizando SPIFFS para Armazenamento de Arquivos WebAprenda a usar SPIFFS para armazenar arquivos web no ESP32, otimizando o desempenho e facilitando a criação de interfaces IoT com segurança e eficiência., 0x210000, 0xF0000,
Esse arquivo pode ser personalizado conforme os requisitos
Definindo Escopo e RequisitosEstruture seu projeto ESP32 com clareza definindo escopo e requisitos. Descubra dicas essenciais para garantir o sucesso em aplicações IoT. do projeto, alterando tamanhos e posições para melhor se adequar à aplicação.
Principais Partições e Seus Papéis
- Bootloader: Inicializa o sistema e gerencia a leitura da tabela de particionamento.
- Factory: Armazena a imagem de fábrica da aplicação.
- OTA_0/OTA_1: Permite atualizações Over-The-Air
Introdução ao Conceito de OTADescubra como implementar OTA no ESP32 para atualizações remotas eficientes e seguras, garantindo manutenção contínua e performance otimizada. (OTA), possibilitando a alternância entre versões. - NVS
Gerenciando Múltiplas Redes Wi-Fi com o ESP32Aprenda a configurar o ESP32 para gerenciar diversas redes Wi-Fi automaticamente, garantindo conexão robusta e estável com práticas simples e seguras.: Armazena configurações
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. não voláteis, como credenciais e parâmetros de sistema. - SPIFFS
Utilizando SPIFFS para Armazenamento de Arquivos WebAprenda a usar SPIFFS para armazenar arquivos web no ESP32, otimizando o desempenho e facilitando a criação de interfaces IoT com segurança e eficiência./FAT: Sistema de arquivos utilizado para armazenamento de páginas web
Integração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT., dados dinâmicos e outros recursos.
O Papel e Funcionamento do Bootloader🔗
Funções do Bootloader no ESP32
O bootloader do ESP32
O que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia! é responsável por:
- Inicializar os periféricos essenciais.
- Verificar e interpretar a tabela de particionamento.
- Validar a integridade da imagem de firmware
📞 Interfone IP com Vídeo ChamadaDescubra como integrar interfone IP com vídeo chamada utilizando ESP32 para segurança residencial e corporativa, com streaming e criptografia avançada.. - Selecionar qual partição (factory ou OTA
Segurança na Rede: Protegendo a Conexão Wi-Fi do ESP32Proteja a conexão Wi-Fi do ESP32 com dicas de criptografia, senhas fortes e monitoramento, garantindo segurança e integridade dos dados.) deve ser carregada. - Fornecer mecanismo de recuperação para casos
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. de falhas na atualização ou corrupção de dados.
Processo de Inicialização
Durante a inicialização, o bootloader realiza os seguintes passos:
1. Carregamento Inicial: Leitura do código presente na memória
Arquitetura do ESP32: Entendendo Seus Componentes InternosDescubra como otimizar o desempenho dos seus projetos IoT com nosso guia detalhado sobre a arquitetura interna e gerenciamento de recursos do ESP32. flash, onde está armazenado o bootloader.
2. Verificação da Tabela de Particionamento: O bootloader interpreta a tabela e mapeia as partições.
3. Validação
Aplicações Práticas e Boas PráticasDescubra como implementar com segurança e eficiência aplicações práticas com o ESP32 em projetos de IoT, seguindo boas práticas. da Aplicação: Checa se a aplicação é válida (checksum, assinatura digital, etc.).
4. Seleção da Partição de Boot: Define se o firmware a ser carregado é o de fábrica ou uma atualização OTA
Manutenção e Atualizações do Sistema de Alarme com ESP32Descubra como manter e atualizar o sistema de alarme com ESP32, garantindo segurança, confiabilidade e desempenho através de práticas e atualizações OTA..
5. Transição para a Aplicação: Passa o controle para a aplicação principal.
Estrutura Típica do Bootloader
O código-fonte do bootloader pode ser customizado utilizando o ESP-IDF
Instalação e Configuração do ESP-IDF (Espressif IoT Development Framework)Aprenda a instalar e configurar o ESP-IDF, framework oficial da Espressif, com este guia que ensina pré-requisitos, instalação e resolução de erros comuns.. Ele é composto por módulos que implementam:
- Inicialização do hardware
📜 Quadro Digital com Tela E-Ink de 32 PolegadasDescubra como combinar eficiência energética, tecnologia E-Ink e ESP32 para criar quadros digitais, dashboards interativos e arte generativa com soluções IoT. básico. - Interface de comunicação (por exemplo, para debug via porta serial
Enviando Dados do ESP32 para o ArduinoDescubra como enviar dados do ESP32 para o Arduino com comunicação serial simples e robusta, garantindo integração e monitoramento em tempo real.). - Mecanismos de fallback em caso
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. de falha na aplicação.
Personalizando e Configurando a Tabela de Particionamento🔗
Ferramentas e Parâmetros de Configuração
- ESP-IDF
Instalação e Configuração do ESP-IDF (Espressif IoT Development Framework)Aprenda a instalar e configurar o ESP-IDF, framework oficial da Espressif, com este guia que ensina pré-requisitos, instalação e resolução de erros comuns.: Ferramenta oficial para desenvolvimento no ESP32
O que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia!. Permite a definição de tabelas de particionamento personalizadas. - Arduino IDE
Instalando o Arduino IDE para ESP32 no WindowsEste tutorial passo a passo ensina como instalar o Arduino IDE e configurar o ESP32 no Windows, garantindo um ambiente ideal para IoT.: Também possibilita o uso de partições customizadas, embora com menos flexibilidade que o ESP-IDF
Instalação e Configuração do ESP-IDF (Espressif IoT Development Framework)Aprenda a instalar e configurar o ESP-IDF, framework oficial da Espressif, com este guia que ensina pré-requisitos, instalação e resolução de erros comuns.. - PlatformIO
Configurando o Ambiente com PlatformIO para ESP32Descubra como configurar o PlatformIO para ESP32 e desenvolver projetos IoT com eficiência, desde a instalação até a depuração. Guia completo e prático!: Oferece suporte avançado para configuração
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. e customização da tabela.
Criando uma Tabela de Particionamento Personalizada
Edite ou crie um arquivo CSV
Exibindo Dados no Monitor Serial com ESP32Aprenda a configurar e exibir dados no Monitor Serial com ESP32, utilizando exemplos práticos e técnicas de depuração para otimizar seus projetos IoT. com o layout desejado. Aqui está um exemplo adaptado para um projeto que exige maior espaço para o sistema de arquivos:
nome, tipo, subtipo, offset
Calibração e Precisão dos Sensores com ESP32Aprenda técnicas práticas de calibração e ajuste de sensores utilizando ESP32 para obter medições precisas e confiáveis em seus projetos IoT., tamanho, flags
nvs, data, nvs
Gerenciando Múltiplas Redes Wi-Fi com o ESP32Aprenda a configurar o ESP32 para gerenciar diversas redes Wi-Fi automaticamente, garantindo conexão robusta e estável com práticas simples e seguras., 0x9000, 0x5000,
otadata, data, ota
Segurança na Rede: Protegendo a Conexão Wi-Fi do ESP32Proteja a conexão Wi-Fi do ESP32 com dicas de criptografia, senhas fortes e monitoramento, garantindo segurança e integridade dos dados., 0xe000, 0x2000,
app0, app
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência., factory, 0x10000, 1.2M,
app1, app
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência., ota_0, 0x130000, 1.2M,
spiffs, data, spiffs
Utilizando SPIFFS para Armazenamento de Arquivos WebAprenda a usar SPIFFS para armazenar arquivos web no ESP32, otimizando o desempenho e facilitando a criação de interfaces IoT com segurança e eficiência., 0x250000, 0x20000,
Após isso, atualize a configuração
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. do projeto apontando para o novo arquivo de particionamento.
Atualizando e Regravando a Tabela
Caso
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. haja necessidade de reconfigurar ou atualizar as partições (por exemplo, após uma expansão na aplicação), é importante:
- Realizar backup dos dados armazenados em partições críticas (NVS, SPIFFS
Utilizando SPIFFS para Armazenamento de Arquivos WebAprenda a usar SPIFFS para armazenar arquivos web no ESP32, otimizando o desempenho e facilitando a criação de interfaces IoT com segurança e eficiência.); - Utilizar ferramentas como o esptool.py para regravar imagens e garantir que o novo layout seja reconhecido;
- Testar a integridade do sistema após a reconfiguração, verificando se a aplicação principal inicia sem problemas.
Personalizando o Bootloader🔗
Quando Personalizar o Bootloader?
A personalização pode ser necessária para:
- Implementar verificações de segurança
Segurança em MQTT: Autenticação e Criptografia no ESP32Descubra como proteger conexões MQTT em aplicações IoT com ESP32, implementando autenticação e criptografia TLS para segurança máxima. adicionais. - Alterar o comportamento padrão na seleção de partição de boot.
- Adicionar funcionalidades de diagnóstico
Protocolos Nativos: Wi-Fi (2.4 GHz), Bluetooth Classic e BLEDescubra como utilizar os protocolos Wi-Fi, Bluetooth Classic e BLE no ESP32, com exemplos práticos e dicas para projetos IoT inovadores. ou debug avançado na fase inicial.
Customização com ESP-IDF
- Modificar os parâmetros de inicialização.
- Inserir hooks para logs
Segurança e Autenticação em APPsDescubra estratégias essenciais para implementar HTTPS, autenticação JWT e segurança robusta em APPs conectados ao ESP32 para IoT. detalhados e análises durante o boot. - Recompilar o bootloader com configurações
Instalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. específicas para o seu ambiente (por exemplo, suporte a criptografia ou autenticação de firmware).
Um exemplo básico de customização pode envolver a alteração do tempo de espera antes de carregar a aplicação:
// Exemplo ilustrativo de alteração no bootloader (pseudocódigo)if (verificaBotaoPressionado()) {
// Permite entrar em modo de recuperaçãoentraModoRecuperacao();
} else {iniciarAplicacao();
}Regravando o Bootloader
Caso
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. ocorra corrupção ou para aplicar uma nova versão do bootloader:
- Utilize o esptool.py com o comando apropriado:
Exemplo de comando para regravar o bootloader:
esptool.py --chip esp32 write_flash 0x1000 bootloader.bin
- Certifique-se de que a nova versão esteja compatível com a tabela de particionamento vigente na aplicação.
- Realize testes
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência. de inicialização para confirmar a correta operação do novo bootloader.
Dicas e Soluções de Problemas Relacionados🔗
Problemas Comuns e Suas Possíveis Causas
- Bootloader Corrompido: Pode ocorrer devido a interrupções
Exemplo de Interrupts (ISR)Descubra como usar ISRs no ESP32 com boas práticas, técnicas de debounce e exemplos práticos. Aprimore sua aplicação IoT com este guia completo. durante uma atualização ou falhas no hardware. - Layout de Particionamento Incompatível: Alterações incorretas podem fazer com que o firmware
📞 Interfone IP com Vídeo ChamadaDescubra como integrar interfone IP com vídeo chamada utilizando ESP32 para segurança residencial e corporativa, com streaming e criptografia avançada. não seja carregado corretamente. - Falhas na Validação
Aplicações Práticas e Boas PráticasDescubra como implementar com segurança e eficiência aplicações práticas com o ESP32 em projetos de IoT, seguindo boas práticas. da Aplicação: Problemas de checksum ou assinatura incorreta podem impedir a inicialização.
Soluções e Boas Práticas
- Backup e Testes
📡 Drone FPV com Transmissão de Vídeo ao VivoEste tutorial técnico detalha a construção de um drone FPV com transmissão de vídeo, telemetria via MAVLink e otimizações de latência.: Sempre mantenha cópias de segurança
Segurança em MQTT: Autenticação e Criptografia no ESP32Descubra como proteger conexões MQTT em aplicações IoT com ESP32, implementando autenticação e criptografia TLS para segurança máxima. das tabelas de particionamento e do bootloader. Teste alterações em ambiente controlado antes da implementação final. - Utilizar Ferramentas Oficiais: Prefira o uso do ESP-IDF e do esptool.py para regravar e validar imagens, garantindo compatibilidade e segurança
Segurança em MQTT: Autenticação e Criptografia no ESP32Descubra como proteger conexões MQTT em aplicações IoT com ESP32, implementando autenticação e criptografia TLS para segurança máxima.. - Documentação
Segurança e Autenticação em APPsDescubra estratégias essenciais para implementar HTTPS, autenticação JWT e segurança robusta em APPs conectados ao ESP32 para IoT. e Logs: Comente as alterações feitas no arquivo CSV e no código
Desafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! do bootloader. Utilize logs detalhados durante o processo de inicialização para identificar rapidamente a origem de eventuais falhas. - Modo de Recuperação: Implemente uma rotina de fallback no bootloader para, em caso de erros críticos, permitir a recuperação ou regravação de firmware
📞 Interfone IP com Vídeo ChamadaDescubra como integrar interfone IP com vídeo chamada utilizando ESP32 para segurança residencial e corporativa, com streaming e criptografia avançada..
Conclusão🔗
Compreender e dominar a estrutura de particionamento e o funcionamento do bootloader no ESP32 é essencial para o desenvolvimento de sistemas robustos e seguros. Ao ajustar e personalizar esses componentes, é possível otimizar o gerenciamento da memória flash, garantir atualizações OTA
Manutenção e Atualizações do Sistema de Alarme com ESP32Descubra como manter e atualizar o sistema de alarme com ESP32, garantindo segurança, confiabilidade e desempenho através de práticas e atualizações OTA. mais seguras e oferecer mecanismos de recuperação em casos de falhas críticas.
A partir das orientações apresentadas neste artigo, você pode:
- Criar tabelas de particionamento customizadas que melhor atendam às demandas do seu projeto.
- Compreender o fluxo de inicialização do bootloader e implementar melhorias ou rotinas de fallback.
- Realizar atualizações e regravações de forma segura, utilizando ferramentas oficiais e práticas recomendadas
Segurança na Rede: Protegendo a Conexão Wi-Fi do ESP32Proteja a conexão Wi-Fi do ESP32 com dicas de criptografia, senhas fortes e monitoramento, garantindo segurança e integridade dos dados..
Mantenha-se sempre atualizado com as últimas versões do ESP-IDF e acompanhe as práticas sugeridas pela comunidade e pelo fabricante. Com conhecimento, testes rigorosos e cuidados na personalização do bootloader, seu projeto baseado no ESP32 estará preparado para enfrentar desafios e evoluir com segurança e desempenho
Dual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência..
Esperamos que este guia completo sobre a estrutura de particionamento e o bootloader no ESP32
O que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia! seja útil para aprimorar seu desenvolvimento e a resiliência dos seus projetos. Boa codificação e até o próximo artigo!
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Arduino IDE Official Website: arduino.cc
- Guia de Programação ESP-IDF: docs.espressif.com/projects/esp-idf
há 8 meses atrás
há 10 meses atrás
há 12 meses atrás
há 12 meses atrás
há 12 meses atrás
há 12 meses atrás
há 12 meses atrás
há 10 meses atrás
há 12 meses atrás
há 12 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 8 meses atrás
há 8 meses atrás
há 8 meses atrás
há 8 meses atrás
há 12 meses atrás
há 12 meses atrás
há 12 meses atrás
há 12 meses atrás