Resolvendo problemas
Mar 18, 2026 - ⧖ 3 minA decadas resolvo problemas de outras pessoas(empresas) usando código. Aconteceu de eu precisar resolver um problema aqui em casa com software.
Qual é o problema
Comprei uma impressora térmica para não gastar mais com cartuchos de impressão. Comprei a Peripage A40, o problema, ela comunica somente via bluetooth com o aplicativo Android/IoS.
Eu gostaria que essa impressora funcionasse como uma impressora de rede e que fosse detectada automaticamente assim que eu colocasse ela na rede.
A solução
O que eu já tinha rodando em casa:
- Uma raspberry pi modelo B
- Uma variação bem enxuta do debian - DietPI
Já uso esse equipamento para bloquear anúncios, usando o pihole. Funciona muito bem, mas eu apenas instalei, agora eu precisava do seguinte:
- Conversar com a impressora via bluetooth
- Expor para a rede a interface da impressora(torna-la pública na rede)
- Receber o job de impressão e enviar para a impressora
Resolvi criar uma solução que visesse exatamente isso.
Como funciona essa gambiarra
Basicamente transformei um computadorzinho (Raspberry Pi) numa ponte entre a minha rede WiFi e a impressora Bluetooth. Pensa assim: a impressora só fala "bluetoothês", mas os computadores da casa falam "rede". O Raspberry fica no meio traduzindo essa conversa.
O que foi feito
Criei um programinha em Go que roda nesse Raspberry e faz essas coisas:
- Interface IPP na porta 631 - Qualquer dispositivo na rede pode mandar um trabalho de impressão usando o protocolo IPP padrão (o mesmo do CUPS). Funciona direto no diálogo de impressão do Linux, macOS e Windows
- Conversa com a impressora via Bluetooth - Usa RFCOMM para se conectar à Peripage
- Reconexão automática - Se a impressora desconectar, ele detecta e tenta reconectar automaticamente
- Fila de impressão - Um worker em background que gerencia jobs com estado individual (pendente, processando, concluído, abortado)
- API de configuração - É possível alterar o MAC do bluetooth e modelo da impressora em tempo de execução via REST API, sem precisar reiniciar
- Página web com status - Mostra conexão, nível de bateria, fila de impressão, e updates em tempo real via WebSocket
Formatos suportados
A impressora térmica só entende imagens, mas o hotPrinter converte automaticamente:
- Imagens: PNG, JPEG
- Texto plano
- PDF (via
pdftoppm) - PostScript (via Ghostscript)
Diagrama de blocos (como as peças se encaixam)

Diagrama de sequência (como acontece a mágica)

O fluxo resumido
Você manda imprimir → Rede WiFi → Raspberry → Bluetooth → Peripage → Papel! 🎉
A parte legal é que depois de configurar, a impressora aparece automaticamente nos computadores da casa via mDNS/Bonjour (Avahi). No Linux e Mac aparece direto no diálogo de impressão. No Windows dá pra adicionar manualmente usando o endereço ipp://raspberry:631/ipp/print.
Se não quiser usar a detecção automática, basta adicionar manualmente no CUPS:
lpadmin -p Peripage -E \
-v ipp://raspberry:631/ipp/print \
-m everywhere
A página web (http://raspberry:8080) mostra status em tempo real (via WebSocket), bateria, fila de impressão e permite imprimir uma página de teste. Para quem prefere CLI, tem endpoints REST:
# Ver status da impressora
curl http://raspberry:8080/api/status
# Configurar impressora em runtime
curl -X POST http://raspberry:8080/api/config \
-H "Content-Type: application/json" \
-d '{"bluetooth":{"mac":"AA:BB:CC:DD:EE:FF","model":"A40"}}'
# Imprimir direto (sem passar pelo diálogo do sistema)
curl -F "file=@documento.pdf" http://raspberry:8080/api/print
O código tá em Go, que é uma linguagem que compila pra binário pequeno e rápido - perfeito pra rodar num Raspberry Pi antigo que já tava fazendo outras coisas aqui em casa (bloquear anúncios com Pi-hole).
O nome do projeto? hotPrinter - porque é uma impressora térmica que fica na rede, sempre pronta pra receber trabalhos. 🔥
