Este projeto foca na criação de um dispositivo embarcado capaz de exibir dinamicamente informações sobre ciclones tropicais ativos no Atlântico, utilizando o hardware Adafruit PyPortal e a API JSON aberta da NOAA (National Oceanic and Atmospheric Administration).
A ideia central é que o PyPortal acesse periodicamente um endpoint específico que fornece dados de tempestades em formato JSON. Esses dados, que incluem nome da tempestade, localização (latitude/longitude), categoria de intensidade e direção de movimento, são então processados. O dispositivo converte esses dados brutos em elementos visuais, como ícones e setas direcionais, que são sobrepostos a um mapa de fundo estático exibido na tela do PyPortal.
A escolha do formato JSON é ideal para aplicações embarcadas e IoT devido à sua leveza, estrutura clara e ampla compatibilidade com protocolos web, tornando-o eficiente para transmissão e processamento em ambientes com largura de banda e memória limitadas. O Adafruit PyPortal, por sua vez, oferece uma plataforma integrada com Wi-Fi, tela sensível ao toque colorida e um ambiente de execução MicroPython robusto. Ele abstrai complexidades de hardware, como drivers de rede e gerenciamento de exibição, permitindo que os desenvolvedores se concentrem na lógica da aplicação, como aquisição, análise e visualização de dados.
Plataforma de Hardware e Configuração do Ambiente de Software
Características do Hardware PyPortal
O PyPortal se destaca pela sua integração e facilidade de uso. Ele combina um microcontrolador ARM Cortex-M4 (Microchip ATSAMD51) de 120MHz, 2MB de Flash e 256KB de RAM. O dispositivo inclui:
- Uma tela IPS capacitiva de 3.5 polegadas com resolução de 320x240.
- Um coprocessador ESP32 para conectividade Wi-Fi.
- Um slot para cartão MicroSD para armazenar recursos como mapas e fontes.
- Um amplificador de áudio Classe D para efeitos sonoros.
Para iniciar o desenvolvimento, você precisará de:
- Um Adafruit PyPortal (ou modelo similar).
- Um cabo Micro-USB para alimentação e programação.
- Uma rede Wi-Fi de 2.4GHz estável.
- Um editor de código no seu computador, como Visual Studio Code com PlatformIO ou Mu Editor.
Dependências de Biblioteca e Gravação de Firmware
O CircuitPython, uma variante do MicroPython mantida pela Adafruit, fornece bibliotecas essenciais para este projeto:
adafruit_pyportal: Biblioteca principal para gerenciar requisições de rede, exibição gráfica e eventos de toque.displayio: Biblioteca gráfica do CircuitPython para gerenciar elementos de tela.adafruit_bitmap_fonteadafruit_display_text: Para renderização de texto.adafruit_imageload: Para carregar rceursos de imagem do armazenamento.
Observação: Bibliotecas em CircuitPython são adicionadas na pasta /lib do dispositivo. Use os pacotes de bibliotecas (Bundles) da Adafruit, não pip.
Para instalar o firmware:
- Baixe o arquivo
.uf2mais recente do CircuitPython para o PyPortal do site oficial. - Conecte o PyPortal via USB e pressione o botão de reset duas vezes rapidamente para entrar no modo de bootloader (como um pendrive chamado
PORTALBOOT). - Arraste o arquivo
.uf2para o pendrive. O dispositivo reiniciará com o novo firmware. Um novo pendrive chamadoCIRCUITPYaparecerá.
Estrutura de Arquivos do Projeto e Configuração de Segredos
Uma estrutura de projeto recomendada no diretório raiz do CIRCUITPY é:
CIRCUITPY/
├── code.py # Arquivo principal de execução
├── secrets.py # Informações confidenciais (Wi-Fi)
├── lib/ # Bibliotecas CircuitPython
│ ├── adafruit_pyportal.mpy
│ └── ...
└── assets/ # Recursos de mídia
├── map.bmp # Mapa de fundo
└── icons.bmp # Sprites de ícones de tempestade
O arquivo secrets.py contém credenciais de Wi-Fi:
secrets = {
'ssid': 'SEU_WIFI_SSID',
'password': 'SUA_SENHA_WIFI',
}
Importante: Nunca submeta o secrets.py com suas credenciais reais para repositórios públicos. Use um arquivo de exemplo como secrets.py.example.
Aquisição e Análise de Dados JSON na Prática
Aálise da Fonte de Dados JSON da NOAA
Os dados das tempestades são obtidos do endpoint CurrentStorms.json da NOAA. Este é um API público que retorna informações sobre ciclones tropicais ativos. Ao acessar este URL, você recebe uma estrutura JSON similar a esta (simplificada):
[
{
"id": "20232024L10",
"name": "Tropical Storm Léo",
"stormType": "TROPICAL STORM",
"latitude": 15.6,
"longitude": -45.2,
"intensity": 1, // Exemplo: 1 = Tropical Storm, 2 = Hurricane Cat 1, etc.
"direction": 270 // Graus
},
// ... mais tempestades
]
O código em code.py precisará buscar esses dados e processá-los.