Desenvolvimento de um Rastreador de Tempestades em Tempo Real com PyPortal e API JSON

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:

  1. Um Adafruit PyPortal (ou modelo similar).
  2. Um cabo Micro-USB para alimentação e programação.
  3. Uma rede Wi-Fi de 2.4GHz estável.
  4. 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_font e adafruit_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:

  1. Baixe o arquivo .uf2 mais recente do CircuitPython para o PyPortal do site oficial.
  2. 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).
  3. Arraste o arquivo .uf2 para o pendrive. O dispositivo reiniciará com o novo firmware. Um novo pendrive chamado CIRCUITPY aparecerá.

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.

Tags: CircuitPython MicroPython Adafruit PyPortal JSON API

Publicado em 7-11 00:20