Eu construí uma moldura fotográfica E-Ink usando um Arduino, display E-Paper e Google Antigravity

por Nada Em Troca
10 minutos de leitura
Eu construí uma moldura fotográfica E-Ink usando um Arduino, display E-Paper e Google Antigravity

Recentemente comecei a trabalhar com microcontroladores – e recentemente, quero dizer, na semana passada. Graças à ajuda do novo IDE Antigravity do Google, um Arduino R4 WiFi e um display de papel eletrônico de 7 cores, consegui construir uma moldura fotográfica com tinta eletrônica em menos de uma semana.

Os componentes certos facilitaram meu trabalho

Pesquisei bastante antes de iniciar a jornada de construção de minha própria moldura fotográfica e-ink. Escolhi o display de papel eletrônico Waveshare de 7 cores, que é perfeito para a tarefa. As cores são um pouco mais desbotadas do que o modelo colorido E6 da Waveshare, mas o que escolhi é um pouco mais acessível e também é ótimo para outros tipos de projetos que estou planejando no futuro.

Também escolhi o Arduino UNO R4 WiFi para este projeto. Comprei o meu como parte de um kit inicial, mas você definitivamente pode usar apenas um WiFi R4 básico e alguns cabos de jumper. Optei pelo R4 WiFi porque é uma versão mais recente do Arduino, mas, além dos componentes normais do Arduino, ele também inclui um mini chip ESP32-S3 para lidar com a conectividade Wi-Fi.

Escolher esses dois componentes juntos me permitirá realizar muitos projetos. Embora um Raspberry Pi Zero 2 W também funcionasse (e fosse mais plug-and-play, já que o monitor vem com um GPIO Raspberry Pi HAT de 40 pinos pré-instalado), meu principal objetivo com este projeto é me familiarizar mais com C/C++ e o Arduino, e também funciona muito bem!

Escolhi o Waveshare em vez de outros monitores coloridos de papel eletrônico, como o Inky Impression, porque o Waveshare tem suporte e bibliotecas nativas para Arduino, tornando o projeto muito mais fácil para mim.

Também há muitos arquivos de impressão 3D disponíveis para este display de papel eletrônico Waveshare específico – embora eu não tenha conseguido imprimir nenhum deles, pois só tenho um Bambu Lab A1 mini. Embora esteja pensando em atualizar para um P2S em breve, eu precisava de algo que segurasse essa tela e parecesse decente enquanto trabalhava dentro das restrições do mini A1 que tenho. Então, rapidamente projetei um pequeno suporte que tem espaço para o cabo de fita sair pela parte de trás e o sustenta em um leve ângulo.

Eu sou um novato em Arduino, então este foi um grande empreendimento para mim

Eu uso Raspberry Pi há anos. Computadores de placa única não são novidade para mim. Também uso impressoras 3D há vários anos. Microcontroladores, por outro lado? Essas são uma fera completamente nova para eu enfrentar.

É claro que comecei com alguns dos projetos mais básicos: conectar um LED, fazer o LED piscar e alterar o brilho de um LED com um potenciômetro. O próximo passo lógico desses projetos seria algo um pouco mais complicado, como conectar um sensor de movimento ultrassônico, servo, sensor de temperatura ou qualquer outra coisa.

Em vez disso, fui direto do projeto mais iniciante para a construção de um aplicativo do zero para fazer interface com um display de papel eletrônico e o mini chip ESP32-S3. Esse tipo de tarefa definitivamente não é para os fracos de coração, mas ultrapassou meus limites e me ajudou a aprender muito em pouco tempo.

Um Arduino UNO R4 WiFi com cabos jumper conectados a ele. Crédito: Patrick Campanale / How-To Geek

Usando a documentação do próprio Waveshare, consegui usar alguns fios de jumper e fazer o display do e-paper rodar no código de exemplo fornecido. Na verdade, antes de usar o Arduino neste projeto, tentei usar um ESP32-S3 padrão – sem sucesso.

Passei provavelmente de três a quatro horas com o ESP32, apenas para não ter nenhum produto funcionando no final. O lado do Arduino correu muito bem, levando apenas alguns minutos. Essa é uma das principais razões para optar por um Arduino em vez de muitos outros microcontroladores por aí: documentação.

Poder usar a documentação oficial e seguir “este cabo vai para o cabeçalho D13” e assim por diante tornou o projeto muito mais simples. Isso me permitiu focar apenas no código, e não na fiação das coisas.

A antigravidade do Google fez o trabalho pesado

O IDE do Google Antigravity foi aberto em um Mac com código Python na área do editor principal. Crédito: Patrick Campanale / How-To Geek

Meu Arduino e meu display de e-paper chegaram nos dias 18 e 20 de novembro, respectivamente. Estou escrevendo este artigo em 24 de novembro. A melhor parte da chegada do hardware é que ele foi perfeitamente sincronizado com o lançamento do Antigravity do Google.

Assim que concluí os passos de iniciante, liguei o Antigravity e comecei a programar. A maior parte do projeto foi construída pelo Antigravity e Gemini 3.0 Pro. Usei parte do meu conhecimento básico de C/C++ para fazer alterações aqui ou ali, ou para solicitar o Antigravity em uma determinada direção. No entanto, o AI IDE do Google realmente fez a maior parte do trabalho.

Na verdade, fiquei agradavelmente surpreso com o quão bem o Antigravity funcionou para esse tipo de projeto. Foi bastante tranquilo, considerando todas as coisas. Optei por ainda usar o IDE nativo do Arduino para implantar o projeto no próprio Arduino, enquanto me limitava a fazer a programação propriamente dita no Antigravity.

A depuração levou dias, não horas

O IDE Antigravity do Google mostrando alguns prompts e arquivos que foram alterados. Crédito: Patrick Campanale / How-To Geek

Não sei se esperava a quantidade de depuração que viria com a construção de um programa como este. Na minha opinião, é um aplicativo simples e não deveria ser tão difícil, certo? Eu estava tão errado.

Conseguir um protótipo funcional em Antigravidade foi realmente mais rápido do que eu esperava. Eu tinha uma versão básica de trabalho deste projeto em provavelmente uma ou duas horas. O problema surgiu quando eu estava tentando fazer com que o projeto tivesse funcionalidades mais avançadas.

No início, ele esticava todas as imagens para caber na resolução de 800×480 – não cortava. Isso significava que as fotos pareciam muito estranhas e desproporcionais. A partir daí, consegui passar algumas horas para fazer o YOLO funcionar (um modelo local de IA para corte de imagens), e isso foi definitivamente um passo na direção certa.

A implementação do modelo YOLO fez com que todas as imagens fossem cortadas, usando funcionalidades básicas de IA e ML, de acordo com o assunto da imagem. Isso foi bom para a maioria das fotos, mas definitivamente havia algumas fotos de minha esposa e eu que estavam muito cortadas, pois eram retrato em vez de paisagem.

A partir daí, comecei a tentar fazer com que o Antigravity removesse todo o período de corte e apenas exibisse as imagens em sua proporção nativa na tela. Foi nisso que acabei chegando para a versão final do projeto.

Assim que tive um projeto funcionando localmente, comecei a tarefa de tornar o componente do lado do servidor portátil para que pudesse ser facilmente movido para um novo sistema e configurado sem a necessidade de interface com o systemd. Optei por construir uma imagem Docker para o componente do lado do servidor, e isso também se mostrou bastante difícil.

Para começar, havia muitos valores codificados em meu código original. Digitei o endereço IP do meu servidor diretamente, assim como minhas credenciais de Wi-Fi para minha rede doméstica. Levei cerca de quatro horas para fazer o contêiner Docker funcionar da maneira que pretendia e alterar o código para que o IP do servidor inserido no Arduino fosse o que atualizasse o arquivo JSON fornecido pelo servidor.

No total, passei provavelmente cerca de 18 a 20 horas trabalhando neste projeto, de quarta a domingo. Definitivamente, demorei muito mais para solucionar problemas e depurar do que esperava, mas ainda assim foi muito mais rápido do que tentar aprender Python e C/C++ do zero para construir esse tipo de aplicativo. Eu não teria sido capaz de construir, prototipar, testar e lançar um projeto como este em poucos dias sem o Antigravity – e irei usá-lo cada vez mais em projetos futuros.

Este projeto me ensinou muitos conceitos para iniciantes em um curto espaço de tempo

Um microcontrolador Arduino R4 WiFi com cabos jumper e um cabo USB-C conectado. Crédito: Patrick Campanale / How-To Geek

Embora o Antigravity do Google tenha programado a maior parte deste projeto, ainda estou aprendendo Python e C/C++ ao longo do caminho – apenas mais devagar do que gostaria. Estou dedicando meu tempo aprendendo os idiomas para que possa começar a construir meu próprio software no futuro, com pouca ajuda de IA.

A melhor parte deste projeto é que pude realmente aprender um pouco muito de conceitos em apenas alguns dias. Posso explicar como tudo funciona para você? Não, não, não posso. No entanto, agora sei muito mais sobre Python e C/C++ do que na segunda-feira passada, e esse é meu objetivo: aprender rapidamente.

Embora a IA tenha escrito a maior parte do código para mim, tentei fazer o máximo de depuração que pude sozinho. Quando vi um erro, tentei descobrir o que era sozinho. Às vezes, eu pedia à IA para resolver isso para mim, outras vezes, tentava descobrir sozinho. Ambas as maneiras me ensinaram muito, no entanto.

Fios de jumper entre o display de papel eletrônico Waveshare de 7 cores e um Arduino. Crédito: Patrick Campanale / How-To Geek

Quando a IA resolveu o bug para mim, consegui ver qual era o código que causou o erro, bem como qual foi o código que corrigiu o erro. Observar os dois blocos de código lado a lado me ensinou o que não fazer e o que fazer.

Usando essa técnica, comecei a resolver alguns problemas sem sequer consultar a IA ou o Google. Eu adquiri conhecimento suficiente para ver onde a IA cometeu um erro, como inserir o mesmo pedaço de código duas vezes quando deveria estar lá apenas uma vez.

Este projeto também me permitiu realmente começar a aprender como funcionam os microcontroladores. Na verdade, comecei este projeto em um ESP32-S3 que comprei, mas mudei para o Arduino porque definitivamente ainda estou lutando para aprender um pouco do lado da programação do ESP32.

Como construir sua própria moldura de papel eletrônico sem fazer nenhuma codificação

Um display de e-paper mostrando uma mensagem de boas-vindas. Crédito: Patrick Campanale / How-To Geek

Se você deseja construir sua própria moldura de papel eletrônico – enquanto pula dezenas de horas de depuração – você está com sorte! Abri o código-fonte do meu código para que qualquer pessoa possa criar facilmente sua própria moldura de foto. Todo o código está no meu GitHub e também há instruções detalhadas.

Basta iniciar o contêiner do Docker como faria com qualquer outro contêiner, encaminhando uma porta do seu computador para a porta 80 do contêiner. Em seguida, vincule a montagem de uma pasta em seu computador ou servidor a /srv/frame/gallery e a parte do servidor deste projeto estará pronta para uso.

Em seguida, acesse o próprio código (que você deve obter no GitHub) e abra o arquivo firmware_arduino.ino no IDE do Arduino. isso abrirá todo o projeto com todas as dependências abrindo também.

A última parte prática do código é simplesmente editar o arquivo secrets.h para ter o SSID e a senha do Wi-Fi da sua casa e o IP do servidor Docker de onde ele pode acessar as imagens.

A placa do driver de vídeo da tela do Waveshare e-paper. Crédito: Patrick Campanale / How-To Geek

A parte mais fácil deste projeto é conectar os cabos. A documentação do Waveshare fornece um esquema pino por pino de como conectar o monitor a um Arduino, e funcionou perfeitamente para mim.

Agora, você pode simplesmente soltar imagens JPG, JPEG ou PNG na pasta que você conectou ao contêiner Docker. O contêiner cuidará da conversão desses arquivos em arquivos .bin que o Arduino pode ler e transmitir diretamente para o display do e-paper. É isso!

O servidor atualizará automaticamente o arquivo JSON sempre que você adicionar ou remover uma foto da pasta montada, então tudo que você precisa fazer é fornecer as imagens e alterá-las conforme desejar. O código também foi projetado para ter um histórico contínuo das últimas 10 fotos mostradas e fazer o possível para não repetir fotos quando possível.

Se você tiver algum problema com o código, abra um problema no repositório GitHub e farei o possível para responder a todos em tempo hábil! Já tenho algumas atualizações planejadas para este projeto e mal posso esperar para trabalhar nelas no futuro.


Microcontroladores são uma tecnologia muito legal que ignorei por muito tempo e estou animado para entrar nessa nova toca do coelho. Tenho muitos projetos no futuro, desde coisas simples como este display de papel eletrônico até construir meu próprio drone (quadricóptero) do zero – e sim, isso significa projetar meus próprios arquivos em CAD também.

Este artigo foi útil?
Gostei0Não Gostei0

Deixe um comentário

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?
-
00:00
00:00
Update Required Flash plugin
-
00:00
00:00