2 pontos por GN⁺ 2024-06-09 | 1 comentários | Compartilhar no WhatsApp
  • Sol Mate e-Paper Display é um projeto que gera uma ilustração refletindo o clima atual e as condições de iluminação do local especificado e a exibe em uma tela Waveshare e-Paper conectada a um Raspberry Pi
  • O script recebe uma localização, busca o clima e renderiza imagens de alta qualidade usando um prompt criado por gpt-5-mini e o gpt-image-1-mini, por isso é necessário um token da API da OpenAI
  • É possível informar não só uma localização real, mas também a localização de um amigo ou um lugar fictício; no caso de lugares fictícios, o GPT envia ao serviço de clima a latitude e longitude do local mais parecido na Terra
  • O hardware é baseado em um Raspberry Pi 5 e em um display Waveshare e-Paper de 7.3", e usar telas de outros tamanhos exige alterações no código
  • control.py oferece suporte para exibição na tela, pré-visualização local e limpeza da tela, e é preciso considerar tanto a recomendação da Waveshare de não deixar a mesma imagem exibida por muito tempo quanto o possível aumento dos custos de API

O que o Sol Mate e-Paper Display faz

  • Sol Mate e-Paper Display é um conjunto de códigos para gerar e exibir uma imagem de relatório do clima usando Raspberry Pi e um display Waveshare e-Paper
  • Ele foi criado inicialmente com o ☀️ Sol Mate GPT, e depois este projeto surgiu da curiosidade sobre como isso ficaria em um display e-Paper
  • A localização de entrada pode ser um lugar real, a localização de um amigo ou até um lugar fictício
    • Se estiver chovendo, por exemplo, a ilustração reflete o clima atual com pessoas segurando guarda-chuva
    • Ao informar um lugar fictício, o GPT envia ao serviço de clima a latitude e longitude do local mais parecido na Terra

Como as imagens são geradas

  • As ilustrações são renderizadas com o modelo gpt-image-1-mini
  • O prompt da imagem é gerado pelo gpt-5-mini, usando configuração de alta qualidade de imagem
  • Por causa desse fluxo de geração, a execução requer um token da API da OpenAI

Hardware necessário

Execução e uso

  • O projeto foi pensado para rodar em um Raspberry Pi
  • O gerenciamento do ambiente Python usa uv
    • Como o uv gerencia o ambiente virtual, não é necessário ativá-lo manualmente
uv sync
  • Em máquinas de desenvolvimento que não sejam macOS ou Linux, a biblioteca de hardware do Raspberry Pi é ignorada por padrão
  • É necessário definir a variável de ambiente OPENAI_API_KEY
    • As variáveis de ambiente podem ser lidas de um arquivo .env no diretório de trabalho atual
OPENAI_API_KEY=... uv run python control.py show Barcelona
  • Para verificar rapidamente no ambiente local, é possível executar o comando preview, que usa a exibição de imagens do iTerm2
    • Por padrão, ele salva em sol-mate-preview-<timestamp>.png no diretório temporário do sistema
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"

Gerenciamento de tela e atualizações automáticas

  • A Waveshare recomenda_Manual#Precautions) não deixar a mesma imagem no display por tempo demais
  • Para limpar a tela, use o comando clear
uv run python control.py clear
  • A configuração de exemplo atualiza a imagem duas vezes por dia com cron e limpa a tela de madrugada
    • Os caminhos precisam ser ajustados de acordo com o ambiente de instalação de cada um
    • Execuções repetidas podem ter um custo considerável
0 8 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 18 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 2 * * * cd ~/src/sol-mate-eink && uv run python control.py clear

Backend e materiais de referência

1 comentários

 
GN⁺ 2024-06-09
Opiniões do Hacker News
  • Estou usando um Inkplate 6Color em um projeto parecido
    Ele vem com um controlador ESP32 integrado, então não precisa de Pi, e também pode funcionar só com bateria
    Com uma boa programação de deep sleep/despertar, aguenta até algumas semanas com uma carga
    O que mais gosto é uma placa vermelha de On Air que deixei pendurada na porta do escritório; quando executo um Atalho no Mac durante reuniões ou gravações, o status é atualizado automaticamente e os dispositivos são silenciados
    Também há exemplos open source para exibir clima, notícias e Google Calendar
    https://soldered.com/product/inkplate-6color-color-e-paper-b...
    Projetos baratos com e-ink são realmente divertidos e úteis

    • Fiz um projeto parecido
      Um display e-ink conectado a um Pi Zero mostra apenas Yes/No para indicar se vai chover nas próximas 3 horas
      Pensando melhor, talvez nem seja necessário um display de 7 cores
      O display que uso é este https://shop.pimoroni.com/products/inky-impression-7-3?varia... e parece ser mais barato
    • Uso inteligente e bacana
      É divertido a ponto de dar vontade de espalhar essas telas pela casa
    • Fiquei surpreso por ser algo que atende a todos os requisitos que eu precisava, e surpreso de novo com o preço
  • Independentemente, há uma semana fiz algo quase igual com o mesmo display
    https://imgz.org/iBLADkCU.jpg
    É um porta-retratos que obtém o clima atual e a hora de um local específico, e a IA gera e exibe uma foto que inclui esse local
    É curioso como nós dois chegamos até aqui de forma independente
    Talvez fosse mesmo o uso mais óbvio

    • É um caso em que a ideia estava espalhada por aí
      É um bom exemplo para mostrar a novos fundadores que a ideia deles não é única; na prática, quase nenhuma ideia é realmente única
      O importante é a execução
      Parece o Uber e a Lyft dos painéis de clima em e-ink; já marquei outras coisas parecidas no HN
      Quando tiver tempo, também pretendo fazer um, e tudo isso me inspira em desenvolvimento com ESP32 e automação residencial livre e open source
  • O projeto de hardware e a ideia são legais, mas eu jamais mexeria com a API da OpenAI em um dispositivo sempre ligado
    Se um dia eu fizer algo por diversão, talvez faça uma versão usando OpenStreetMap e Stable Diffusion hospedado na LAN, então vale salvar nos favoritos

    • Fiquei curioso: qual é o problema da combinação entre a API da OpenAI e um dispositivo sempre ligado?
  • Comprei dois displays iguais depois de ver projetos parecidos

    • "A WiFi color eInk picture frame" https://news.ycombinator.com/item?id=35689706
    • "Color E-Ink Display Photo Frame Pranks [Mom]" https://news.ycombinator.com/item?id=26977747
      Originalmente eu planejava fazer um display de fotos coloridas como nesses dois exemplos, mas esta aplicação também parece boa
    • Gosto que o segundo post também tenha um close-up de microscópio durante a troca da tela
      Espero que o hacking dê certo, e seria legal ver em breve o projeto pronto por aqui
  • Na imagem, Barcelona aparece com 26°C e 2°C
    Já estive em Barcelona algumas vezes, mas é difícil imaginar as duas temperaturas no mesmo dia
    Fico me perguntando se os dados meteorológicos são confiáveis, ou se é tudo alucinação e a ideia é só curtir a animação
    Ou talvez eu conheça menos do clima de Barcelona do que penso, e uma máxima de 26 e uma mínima de 2 seja possível

    • Este é um caso em que o Dall-E não conseguiu escrever texto de forma limpa
      Os 2°C são apenas uma alucinação derivada dos 26°C
      Como é um projeto de hobby, priorizei fazer o texto parecer único a cada vez e, em geral, mais artístico, em vez de renderizá-lo da forma tradicional
      Mas, para transformar isso em um produto sério, modelos de geração de imagem ainda não são bons o suficiente para esse uso
  • Fico curioso sobre o motivo de “não deixar a mesma imagem no display por tempo demais”
    É um problema específico do e-ink colorido?

    • A recomendação da Waveshare é “atualizar pelo menos uma vez a cada 24 horas”[1]
      Na prática, acho que não é um problema tão grande, mas pode haver risco de retenção se os pixels ficarem ativos por tempo demais
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
    • Fico na dúvida se é por burn-in ou se é porque as cores desbotam
  • Fico curioso se há alguma diferença no modo de exibição que exija o cuidado de não deixar a mesma imagem por muito tempo, ao contrário do e-ink comum em preto e branco
    Se me lembro bem, displays e-ink padrão em preto e branco não tinham burn-in

  • Fico curioso por que esses projetos sempre especificam o uso de um computador pequeno e de baixo consumo, como um Raspberry Pi, para acionar o display
    Já existem muitos computadores comuns rodando Debian GNU/Linux
    Se eu quisesse usar este código em um desses computadores para acionar um display de papel eletrônico com um cabo USB comum, não seria possível?
    Não vejo motivo para ser obrigatório usar algo como um Raspberry Pi

    • Computadores pequenos como o Raspberry Pi facilitam o acesso a GPIO e periféricos de baixo nível, como SPI, usados por essa telinha
      Em um computador grande, se o sistema operacional permitir usar esses periféricos, dá para fazer do mesmo jeito
      Antes de esses computadores pequenos se popularizarem, era possível usar os mesmos sinais de baixo nível com uma porta paralela e um programinha para se comunicar diretamente com periféricos
    • Não há nenhuma necessidade disso
      O Raspberry Pi tem muita documentação e código de bootstrap, então é conveniente para alguém com um pouco de experiência em Linux ligar, instalar pacotes e fazer alguma coisa
      Com tempo e conhecimento, também dá para fazer com um microcontrolador bem pequeno
      Não há nada mágico no display em si, exceto que às vezes ele exige tensões de alimentação estranhas
      O problema mais comum é que esses displays não se comunicam diretamente via USB
      Para definir os pixels, eles usam SPI ou uma interface digital paralela, então é preciso uma interface intermediária e software para desenhar na tela
      Por isso muita gente simplesmente conecta um Raspberry Pi e fala com ele por um protocolo mais comum
    • Porque é barato e dura muito tempo na bateria
      Manter um computador comum ligado o tempo todo só para acionar este display é ineficiente
  • Como todo ótimo projeto, ele permite que alguém avance para a customização
    Além das recomendações de hardware, vale olhar só o epaper.py[1] como referência
    [1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py

  • Não entendo muito bem por que usar IA para obter a previsão do tempo
    Existem dezenas de APIs meteorológicas gratuitas que podem ser chamadas diretamente

    • A IA é usada para algumas coisas difíceis de fazer com APIs gratuitas
      Converter o nome coloquial de um bairro em latitude e longitude exatas é algo que alguma API provavelmente faz até certo ponto, mas não conheço uma API gratuita tão precisa quanto o GPT
      Além disso, se você digitar “Hogwarts” ou “Tatooine”, graças à IA ela também inventa direitinho o clima desses lugares[1]
      Mais importante: ela escreve o prompt para o Dall-E gerar uma imagem que reflita as condições meteorológicas reais, o sol, a lua etc.
      [1]: https://x.com/blixt/status/1724099967361462714
    • Vira uma linha muito boa para colocar no currículo
    • Também dá só para olhar pela janela