Para ver o índice completo da documentação, consulte llms.txt. Para acessar a versão em Markdown de uma página da documentação, acrescente .md ao final da URL da página.
Navegação principal
Theme
Sep 23, 2026 Codex

Como dei vida ao meu painel de LED com o GPT-Live-1 e o Codex

Como usei o Codex, o GPT-Live-1 e um Raspberry Pi para transformar um painel de LED em um assistente controlado por voz.

Autor: Sid Rampally

Como dei vida ao meu painel de LED com o GPT-Live-1 e o Codex

De aniversário, dei ao meu colega de apartamento um pequeno painel de LED que mostra os voos que passam perto da nossa janela. Foi um presente bem legal, mas, depois de ver os aviões aparecerem na tela, comecei a me perguntar se um painel daqueles podia fazer mais do que acompanhar voos. Será que dava para mostrar a previsão do tempo ou a minha agenda? E, na hora de sair de casa, será que bastava perguntar “Que horas passa o próximo trem?” para ver a resposta no painel?

Logo isso virou um projeto que eu tocava no tempo livre, com um Raspberry Pi, um painel de LED HUB75 de 128 × 64 pixels, o Codex e um assistente que acabei chamando de Jack. Quem conduz a conversa é o GPT-Live-1, o modelo de voz full-duplex que lançamos recentemente na API. Outro modelo ajuda nas pesquisas, e um renderizador cuida dos pixels. No começo, porém, a divisão de tarefas estava longe de ser tão bem definida. Neste artigo, conto como chegamos lá.

Como o Codex me ajudou a fazer um painel de LED RGB HUB75 funcionar

O primeiro desafio que enfrentei com o Codex foi descobrir como mostrar algo útil na tela. Eu tinha um painel RGB HUB75 de 128 × 64 pixels, mas sabia pouco sobre o controlador, a fiação ou o que seria preciso para enviar ao painel algo diferente do conteúdo que ele já exibia.

Comecei a enviar fotos ao Codex e a pedir que me explicasse o que eu estava vendo. Ele me ajudou a identificar as conexões importantes, entender o controlador baseado no ESP32 e descobrir como um painel HUB75 recebe os dados que vai exibir. O Codex chegou a marcar nas fotos as partes que mereciam atenção. Isso ajudou porque, por conta própria, tudo o que eu via era uma placa de circuito e um monte de chances de dar o palpite errado.

Depois que entendemos o básico do hardware, o Codex me ajudou a colocar o WLED-MM em execução no controlador e a confirmar que o painel estava configurado para a resolução correta de 128 × 64 pixels. A partir daí, pudemos enviar quadros personalizados e experimentar para ver o que ficava bom numa tela tão pequena. O Codex pesquisava e investigava os problemas. Eu cuidava das conexões físicas e avisava quando algo se comportava de um jeito diferente do esperado.

Como criei no Mac um protótipo de painel de LED controlado por voz

A primeira versão que funcionou era bem mais simples que a versão final. Com o WLED-MM em execução no controlador, o Codex me ajudou a criar um renderizador e uma habilidade personalizada. Usei o Modo Voz no aplicativo do ChatGPT para desktop para dizer o que eu queria ver no painel.

Só isso já mudou minha experiência com o painel. Ele podia mostrar a previsão do tempo, minha agenda, os horários de chegada do metrô, gráficos financeiros, mensagens, contagens regressivas, fotografias, obras de arte ou uma cena animada personalizada. Sempre que uma ideia não funcionava bem numa tela tão pequena, ajustávamos o renderizador.

A interação por voz ainda acontecia no Codex, e a habilidade personalizada permitia que ele atualizasse o conteúdo exibido na parede. O renderizador no meu Mac convertia o layout em quadros RGB de 128 × 64 pixels e os enviava pela rede local usando DDP. O controlador ESP32, que executava o WLED-MM, exibia esses quadros no painel.

A ajuda do Codex foi além de conectar esses componentes. Numa tela de 128 × 64 pixels, o espaço é curto. Fomos testando maneiras de acomodar texto, imagens, previsão do tempo, compromissos e horários do metrô sem que tudo virasse uma bagunça ilegível. Eu dizia ao Codex o que parecia estranho, ele ajustava o renderizador ou o layout, e testávamos de novo. Aos poucos, a tela de espera ficou do jeito que eu queria para deixá-la à vista.

O problema era que tudo ainda dependia do meu Mac. O renderizador rodava nele, e era por ali que eu iniciava a conversa por voz. Se o notebook entrasse em repouso ou eu o levasse para outro lugar, já não dava para usar o painel como eu queria. A ideia era chegar em casa do trabalho e pedir à minha parede que me mostrasse alguma coisa.

Como transferi o assistente de voz e o renderizador para um Raspberry Pi

Contei ao Codex que queria usar o painel sem depender do notebook. Transferimos para um Raspberry Pi os componentes que precisavam ficar em execução, colocamos o código em um repositório privado e garantimos que houvesse uma cópia de segurança e uma maneira de voltar à versão anterior caso algo desse errado. Assim que conectei o Pi, o Codex cuidou de colocar o código em execução, verificar os logs e resolver os problemas que surgiam, enquanto eu continuava descrevendo o que queria que o assistente fizesse.

Hoje, o Pi executa dois pequenos serviços:

  • O serviço de voz gerencia o microfone, o áudio via PipeWire, o cancelamento de eco via WebRTC, a ativação e o retorno ao modo de espera, as interrupções, a conexão com o GPT-Live-1 e a delegação de tarefas no cliente.
  • O serviço de renderização mantém a animação da tela de espera, atualiza a previsão do tempo e os horários de chegada do metrô da MTA, usa dados sanitizados da agenda, valida as descrições das cenas e transmite os quadros para o painel na parede.

Com um microfone e um alto-falante conectados ao Pi, eu já podia entrar na sala, dizer “Hey Jack” e fazer um pedido sem abrir o computador. Passamos um tempo ajustando a ativação por voz e o jeito como Jack respondia. Mas foi quando ele deixou de depender do meu Mac que o projeto passou de uma demonstração no notebook a algo que podíamos simplesmente deixar ligado.

Como o GPT-Live-1 e o Raspberry Pi trabalham juntos

Na divisão de tarefas a que chegamos, eu converso com o GPT-Live-1, e o renderizador desenha na parede. O GPT-Live-1 mantém a conversa aberta, continua ouvindo enquanto fala, permite que eu o interrompa e decide quando um pedido exige algo além da conversa em si.

Quando isso acontece, o Raspberry Pi recebe a tarefa delegada e faz, no cliente, uma solicitação à Responses API usando o GPT-5.6 Luna com baixo esforço de raciocínio. O Luna pode pesquisar na Web pública, consultar minha agenda por uma conexão somente leitura, encontrar imagens reutilizáveis no Wikimedia Commons e decidir que tipo de cena o pedido exige.

Uma vez, pedi ao Jack que mostrasse uma foto na parede, e ele disse que não conseguia. O renderizador já aceitava imagens, mas eu não tinha dado ao assistente de voz uma ferramenta para encontrar e enviar uma foto. O Codex me ajudou a conectá-lo ao Wikimedia Commons para que ele pudesse procurar uma imagem que atendesse ao pedido, verificar a licença e conferir a quem dar o crédito. Também ajustamos a forma de exibir as imagens. O Pi as redimensionava para caber nos 128 × 64 pixels do painel, preservando as proporções para que não ficassem esticadas.

À medida que acrescentávamos recursos, o Codex nos ajudava a manter clara a função de cada componente. O código no Pi define quais ferramentas o Luna pode usar, o Luna identifica as informações ou a cena de que precisa, e o renderizador verifica o JSON da cena antes de convertê-la em exatamente 128 × 64 pixels RGB. Em seguida, o renderizador envia os quadros via DDP ao controlador com WLED-MM, que aciona o painel HUB75.

O usuário conversa com o GPT-Live-1 por meio de um Raspberry Pi. O Pi envia ao GPT-5.6 Luna tarefas de pesquisa e de uso de ferramentas, recebe os resultados e envia os pixels do renderizador local para o painel de LED na parede.

Um dos primeiros bugs apareceu numa conversa bem comum. Eu perguntava ao Jack sobre o tempo em Nova York e depois dizia “Mostre isso na parede”. Ele não sabia a que “isso” se referia. O Codex descobriu que nosso aplicativo enviava apenas o pedido mais recente ao modelo encarregado de atualizar o painel. Passamos a enviar também a conversa recente e os resultados anteriores.

De “Hey Jack” aos pixels no painel de LED

Quando peço ao Jack que pesquise algo e mostre o resultado no painel, o processo é mais ou menos assim:

  1. O Raspberry Pi captura minha voz em áudio PCM a 24 kHz e processa o áudio localmente.
  2. O GPT-Live-1 recebe o fluxo de áudio, entende meu pedido e mantém a conversa aberta para que eu possa interrompê-lo ou acrescentar algo.
  3. Se o pedido exigir uma pesquisa, informações da agenda, uma imagem ou uma atualização do painel, o GPT-Live-1 delega a tarefa ao cliente, e o Pi a envia ao GPT-5.6 Luna pela Responses API.
  4. O Luna usa as ferramentas que disponibilizei para aquele pedido, como o serviço hospedado de pesquisa na Web, a conexão somente leitura com a agenda, a busca de imagens reutilizáveis ou a ferramenta para atualizar o painel.
  5. Ele escolhe uma cena de previsão do tempo, agenda, mensagem ou contagem regressiva se alguma delas já atender ao pedido. Se eu pedir algo que não tínhamos previsto, ele cria uma cena nova.
  6. O renderizador local valida a cena, converte-a em quadros RGB de 128 × 64 pixels e os envia ao painel via DDP, enquanto o GPT-Live-1 me conta o que encontrou.

Do que eu mais gosto é de poder falar de novo sem ter que esperar o assistente de voz terminar a resposta. Posso interromper o Jack e explicar melhor o que eu quis dizer, enquanto a pesquisa e a renderização continuam em segundo plano.

No fim das contas, foi um projeto bem simples que fiz no tempo livre. Eu não tinha experiência com painéis HUB75, controladores ESP32, placas Raspberry Pi ou modelos de voz. Em outra época, provavelmente teria desistido assim que abrisse o painel. Com o Codex, fui descobrindo como tudo funcionava à medida que avançava. Sempre que eu encontrava algo desconhecido, bastava perguntar.

Se você tem um projeto assim e não sabe por onde começar, pergunte ao Codex. Talvez você se surpreenda com o quanto consegue avançar.