Este programa foi marcado como "Limpo" pelo anfitrião.
Olá, de novo. Este é Trey.
Bem-vindos à parte 8 da série do Projeto Cheap Yellow Display (CYD).
Se você deseja acompanhar os episódios anteriores, você pode encontrá-los no meuPágina de perfil do HPR Desculpe, não é possível fornecer uma tradução precisa sem o acesso ao conteúdo do link fornecido. Certifique-se de que o link esteja acessível e contenha um texto em inglês para que eu possa traduzi-lo para o português brasileiro.
É difícil acreditar que comecei este projeto e a série HPR para documentá-lo há mais de um ano. O tempo voa. A vida acontece. Nos últimos 8 meses, estive tão focado em atividades relacionadas ao trabalho que tive que colocar o projeto de lado. E uma vez que o coloquei de lado, foi difícil voltar a ele. Na única vez que tentei, descobri que o antigo laptop Windows do meu filho, que eu havia tomado para usar no projeto, estava realmente morto.
Vivemos em um mundo diferente agora do que vivíamos quando comecei este projeto. Hoje, tudo gira em torno da IA - como ela está mudando o nosso mundo, aumentando a eficiência e até deslocando certos tipos de empregos. "Codificação de vibe" está transformando a maneira como criamos softwares, e agora todo mundo é um desenvolvedor.
Dentro da minha organização, estamos todos sendo fortemente incentivados a aprender mais sobre IA e aplicá-la em nosso trabalho diário. Temos a sorte de ter acesso a uma ampla gama de treinamentos e a ferramentas poderosas que apoiam o processo. Vários colegas dentro e fora da minha organização recomendaram o Claude Code - para desenvolvimento, organização, brainstorming e muito mais. Meu papel não é o de desenvolvedor, e eu não tive necessidade de usar o Claude Code no trabalho. Existem muitas outras ferramentas que posso usar.
Mas em casa, pensei... Poderia instalar o Claude Code em casa para experimentar e aprender. E então me dei conta. Será que posso usar o Claude Code para me ajudar com meu projeto CYD estagnado?
Olá, meu nome é Trey, e eu sou um fraudador.
Ok. Eu não acho que sou um fraudador, mas nunca usei uma ferramenta tão poderosa para me ajudar a codificar, então me sinto um pouco como um fraudador, com o Claude fazendo o trabalho por mim. Vamos conversar sobre o que fizemos.
Como mencionei, não consegui usar o laptop no qual criei o código original da GUI. Mas sem preocupações, pois tudo estava no GitHub, certo?
Então, comecei tentando instalar o Claude Code em uma das minhas máquinas Ubuntu. Isso falhou miseravelmente, e todas as instruções que encontrei online recomendavam executá-lo no Windows. Então, mudei para instalar o Claude Code em um sistema Windows 10 recém-construído usando algum hardware antigo que não suporta o Windows 11. Surpreendentemente, parece que o Claude quer rodar dentro do Ubuntu no Windows Subsystem for Linux (WSL).
Depois de passar por todos os obstáculos para instalar e configurar minha assinatura básica, comecei a trabalhar. Criei um novo diretório para usar para todos os arquivos do meu projeto e outro para que o Claude escreva todos os arquivos de saída.
Tudo o que li e ouvi sobre usar o Claude Code para um projeto como este recomendou começar usando o Claude para criar o plano do projeto. Então, minha primeira solicitação foi a seguinte:
Estou construindo um projeto utilizando uma tela de exibição amarela barata ESP32. O objetivo final é ter um dispositivo com uma interface gráfica de usuário que me permita armazenar várias mensagens de texto, cada uma atribuída ao seu próprio botão específico. Então, quando um dos botões é pressionado, a mensagem é convertida para código Morse e enviada piscando um LED embutido. Já tenho o design inicial da GUI codificado em meu repositório GitHub. Por favor, construa um plano detalhado passo a passo para construir este aplicativo.
Eu queria manter as coisas simples no início, então, embora eu planeje usar um relê isolado opticamente para a saída, estou começando com o LED embutido.
Claude me pediu o URL do meu repositório GitHub, e eu forneci. Depois de pensar um pouco, isso gerou um plano de projeto.
Enviador Morse CYD — Plano de Construção Passo a Passo
O que você já tem:
- 7 botões de envio com estilo verde na tela Enviar
- Deslizador de velocidade (5–30 WPM) e dropdown de slot de programa na tela Configurar
- Deslizador de velocidade (5–30 WPM) e menu suspenso de slot de programa na tela "Configurar"
Área de texto + widget de teclado LVGL na Tela de Teclado.
Motor de exibição e hardware de touchscreen inicializados (mas a leitura de toque foi simplificada).
---
Fase 1: Corrigir Entrada de Touchscreen.
Inicializar o XPT2046 na VSPI, substituir o toque codificado por dados de toque reais, calibrar as coordenadas ADC cruas em pixels da tela e verificar se todas as três teclas de navegação mudam de tela corretamente.
Fase 2: Armazenamento de Mensagens Persistentes.
Utilize Preferences.h / NVS para armazenar 7 mensagens ("msg0" – "msg6") que sobrevivem a ciclos de energia. Carregar na inicialização e preencher os rótulos do botão enviar.
Fase 3: Tela de Configuração — Seleção de Slot e Velocidade.
Conecte a lista suspensa de Programa a g_selectedSlot, conecte o deslizador de Velocidade a g_wpm com um rótulo WPM ao vivo e conecte o botão Definir para limpar a área de texto e navegar para a Tela de Teclado.
Fase 4: Tela de Teclado — Captura e Salvamento de Texto
No OK do teclado (LV_EVENT_READY): leia a área de texto, salve no NVS, atualize o rótulo do botão enviar, navegue para trás. Se Cancelar: navegue para trás sem salvar.
Fase 5: Motor de Código Morse
Construa morse.h com a tabela completa de pesquisa A–Z / 0–9, um conversor de texto para Morse e o cronômetro padrão de Paris (unit_ms = 1200 / wpm).
Fase 6: Transmissão LED sem Bloqueio
Máquina de estados (IDLE / LED_ON / LED_OFF) impulsionada por millis() em uma função morseUpdate() chamada a cada loop — sem atraso(). LED no GPIO 17 (azul).
Fase 7: Encabele os Botões de Envio
Cada botão chama startMorse(getMessage(slot)) se não estiver já transmitindo. Desabilite todos os botões de envio durante a transmissão; reative quando a máquina de estados atingir o final.
Fase 8: Integração e Acabamento
Botão de parada, persistência WPM, guarda de slot vazio, saída de depuração serial, calibração do toque final, lista de verificação de teste de ponta a ponta.
---
Ordem recomendada: Fase 1 → 2 → 7 (parcial) → 5 → 6 → 7 (completa) → 3 → 4 → 8
Isso foi louco! O Claude determinou exatamente em que estágio o projeto estava e também me alertou de que o "toque de leitura estava desabilitado". Ugh. Isso significa que os arquivos que eu havia carregado no GitHub eram meus arquivos GUI originais (Episode 05 – HPR4532 -O link fornecido leva a um episódio do podcast Hacker Public Radio, especificamente o episódio número 4532. A tradução para o português brasileiro seria: Link: https://hackerpublicradio.org/eps/hpr4532/index.htmlE não as que finalmente funcionaram corretamente (Episódio 07 – HPR4624 - )Aqui está a tradução do texto fornecido: Texto: https://hackerpublicradio.org/eps/hpr4624/index.html Tradução: https://hackerpublicradio.org/episodios/hpr4624/index.htmlIsso foi culpa minha. Eu mencionei que não entendo do Git? REALMENTE preciso aprender a usar o Git corretamente!
Mas temos um plano, dividido em oito fases numeradas. E elas parecem abordar todas as funcionalidades que eu queria, com alguns adicionais que eu não havia considerado. Interessantemente, embora essas fases sejam numeradas sequencialmente, Claud recomendou que abordássemos a elas em uma ordem bizarra: Fase 1 → 2 → 7 (parcial) → 5 → 6 → 7 (completa) → 3 → 4 → 8.
Bem, vamos ver o que podemos fazer. A primeira fase é consertar a entrada de toque na tela.
Claud me guiou passo a passo, perguntando o que precisava para ler arquivos específicos do projeto.
Finalmente, ele escreveu um novo código de arquivo ui.ino para o meu diretório de saída especificado, para que eu pudesse testar. Copiei-o para a localização correta do arquivo, rezei um rápido prayer, compilei no Arduino IDE e baixei no CYD.
Bem, isso é... interessante. A exibição não parecia nada com o que deveria. Havia barras verticais verdes com listras verticais pontilhadas menores nelas. Incluirei uma foto nos notas do show para que você possa ver como era e por que foi tão difícil de descrever.
Passei a próxima hora ou assim tentando explicar o que estava vendo para um chatbot. Claud recomendou possíveis correções que ou não fizeram nada ou pioraram a situação. Comecei a questionar se essa era uma boa ideia, como as pessoas realmente ganham eficiência falando com um bot, e até várias escolhas de vida.
Então tive uma ideia. Perguntei a Claud:
Se eu tirasse uma foto da tela na exibição amarela barata e copiasse para a pasta de saída, você seria capaz de analisar para determinar melhor o que está errado e como consertar?
De forma surpreendente, Claude respondeu afirmativamente e me disse para copiar a imagem para a pasta de saída e avisar quando prosseguir. Ele analisou a imagem e outros arquivos de apoio que havia copiado do meu GitHub, perguntando sempre se poderia acessar aquele arquivo. Ele determinou que meu código original foi escrito para uma variante do LVGL versão 8 e eu estava usando agora o LVGL 9.5.
Ele recomendou mudanças e, então, pediu permissão para fazer essas mudanças, arquivo por arquivo. Arquivos .h e .c. Finalmente, eu apenas dei permissão para editar os arquivos na pasta do projeto sem pedir permissão para cada arquivo toda vez. Claude ainda explicava cada mudança, mostrando-me exatamente o que seria alterado, e pedia permissão, para que eu pudesse revisar todas as mudanças. Mas agora ele não pedia permissão adicional para escrever em cada um dos arquivos afetados.
Em seguida, o código foi compilado e baixado. Tela diferente, mas não corretamente. Novamente, tirei uma foto e dei a Claude para analisar. Então, Claude pausou e alterou o código para gerar um padrão de teste específico sobre o GUI.
O padrão de teste era para cobrir a tela retangular inteira. Mas partes do padrão estavam em um quadrado na tela e partes não. Outra foto e análise, disseram a Claude que havia problemas de rotação/tamanho da tela.
Repetimos isso várias vezes. Alguns resultados melhoraram, e outros não.
Este é o ponto em que percebi algo interessante. Não sobre Claude, especificamente, ou sobre o aplicativo. Mas percebi algo interessante sobre mim e sobre o processo.
Anteriormente, quando eu estava enfrentando alguns desses desafios sem Claude, eu me encontrava cada vez mais estressado, frustrado e irritado, até encontrar uma solução. Então, outro problema repetia o ciclo. O sucesso no final foi ótimo, mas as extremos emocionais durante o processo nem sempre eram agradáveis.
Agora, eu estava efetivamente gerenciando o projeto e transmitindo informações ao responsável pelos recursos para consertar os problemas — uma experiência muito diferente.
Mas também me deparei com outro problema. Claude ficou absolutamente certo de que o problema girava em torno do dispositivo não sabendo com precisão onde estavam os 4 cantos da tela. Mas, na realidade, a saída do padrão de teste estava rotacionada em 90 graus em relação à tela real. Levou várias iterações de eu insistir que o problema tinha a ver com a orientação da tela e não com as coordenadas dos cantos. Foi interessante ver a ferramenta insistir em um erro óbvio, mas finalmente resolvemos isso.
Novamente, embora tenha sido frustrante, foi muito menos estressante.
Procedemos a... Fase 2: Armazenamento Persistente de Mensagens onde garantimos que os rótulos dos botões na tela de envio fossem armazenados na memória persistente dos dispositivos, para que, quando editados para conter a mensagem a ser enviada, essa informação sobrevivesse a um reinício.
Em seguida, combinamos elementos de... Fase 5: Motor de Código Morse , Fase 6: Transmissão LED Não Bloqueante , and Fase 7: Fio dos Botões de Envio Juntos. Construir o motor de código Morse foi uma área sobre a qual eu havia estado pensando por um tempo. Eu já tinha partes funcionais de algo semelhante no oscilador de prática Arduino, que eu me refiri algumas vezes nesta série. O código para o oscilador de prática pode ser encontrado no meu GitHub, mas ele foi todo baseado no código original de jmharvey1, com a minha única contribuição sendo tornar as atribuições de pino variáveis, de modo que o código pudesse ser facilmente transferido para diferentes dispositivos.
Então, fiquei feliz que estávamos construindo o motor de código Morse diretamente. O código para ele pode ser encontrado em morse.h, que utiliza uma tabela de pesquisa de caracteres constantes para definir cada caractere. Sem nenhuma direção específica da minha parte, Claude usou os métodos de sincronização de PARIS que já descrevi no Episódio 6 desta série. Ele define o sincronismo para DOT, DASH, LETTER_GAP e WORD_GAP, e todos são baseados em um cálculo simples de 1200 ms dividido pelo número de palavras por minuto (WPM) que desejamos transmitir.
Ao longo do caminho, descobrimos que, se tentássemos usar a função delay(), o programa seria travado devido a um conflito com o temporizador LVGL usado para entradas de tela sensível ao toque. Claude alterou todos os atrasos de acordo.
Então, Fase 3: Tela de Configuração — Seleção de Slot e Velocidade Permite que configurássemos o WPM que desejávamos utilizar, além de selecionarmos um botão Enviar específico para reconfigurar. Isso nos obrigou a trabalhar em Fase 4: Tela de Teclado — Capturar e Salvar Texto que é usado para digitar as entradas para cada botão Enviar. Neste ponto, também decidi que gostaríamos de usar a Tela de Teclado para enviar códigos Morse ad hoc enquanto os digitávamos.
Durante esta fase, descobrimos vários bugs que pareciam causar travamentos aleatórios. Uma depuração cuidadosa, com mensagens exibidas na console serial do Arduino IDE, nos ajudou a identificar e corrigir as causas.
Finalmente todos os testes deram certo e eu consigo preconfigurar alegremente botões de macro com mensagens personalizadas e usar o CYD para enviar o código Morse dessas mensagens para o LED em bordo na taxa que eu especificar.
Percebi, ao apresentar essa narrativa, que repetidamente recorro aos termos em primeira pessoa plural "nós" e "nós" em vez dos termos em primeira pessoa singular "eu" e "mim". Conscientemente, humanizei Claud e reconheci que ele faz parte integral da minha (antiga) equipe de desenvolvimento.
Finalmente, configurei o Claude para se conectar ao meu repositório GitHub e fazer o upload de todos os arquivos e documentação. Além disso, criamos um arquivo CYD-Narrative.md que descreve com mais detalhes todo o trabalho realizado no projeto. Ainda não entendo 100% o git, mas estamos usando-o com sucesso.
Você pode encontrar todos esses arquivos no meu repositório GitHub.O texto traduzido para o português brasileiro é: Texto: https://github.com/jttrey3/CYD_MorseSenderOnde são compartilhados sob uma licença GPL 3.0.
Ainda há vários passos adicionais que planejo concluir nos próximos meses.
1. Integrarei um relé isolado opticamente que me permitirá conectar o dispositivo à entrada de chave reta de qualquer rádio amador. Isso exigirá uma fonte de energia de bateria, um controlador de carga e mais hardware.
- Eu... quero dizer, "Nós" (Claude e eu) modificaremos o código para suportar um tom de áudio através de um alto-falante conectado ao enviar o código.
- Adicionaremos um interruptor de seleção de saída na página de configuração para escolher qualquer combinação de alto-falante, relé ou LED como saída.
- Desenvolveremos um firmware baixável que espero compartilhar com a comunidade de exibição amarela barata.
Se você puder pensar em quaisquer recursos adicionais que gostaria de ver integrados, envie-me um e-mail usando o endereço no meu perfil HPR.
Também posso trabalhar com um amigo para tentar imprimir em 3D um caso para todo o dispositivo, e me certificarei de gravar episódios adicionais compartilhando o processo.
Aprendi muito durante este projeto, sobre o CYD, ESP32, GUIs, Claude Code, GitHub e, acima de tudo, sobre mim mesmo.
Usar IA para desenvolver este código me torna um fraudulento? Ainda me sinto assim de alguma forma.
Isso me torna mais produtivo? ABSOLUTAMENTE! Fiz progresso constante quando tinha apenas 30-60 minutos por dia para trabalhar nisso, e tudo discutido neste episódio foi concluído em menos de uma semana. Se tivesse podido trabalhar nisso por algumas horas sem interrupções, pode ter tomado apenas 3-5 horas.
Isso me capacita e inspira a fazer mais projetos assim? 100% Sinto que tive apoio trabalhando comigo durante todo o caminho. Estava menos estressado no geral, e teve menos impacto na quantidade e qualidade do tempo que passei com minha família.
Em breve terminarei esta série, sem mais lacunas de 6 meses, espero.
Até a próxima...

