Plaud Pi Zero: Gravador de Voz com IA Open Source
Publicado em 12 de Dezembro de 2025 às 09:39
Crie seu próprio assistente de gravação de voz já com transcrição associada, usando o Gemini como ferramenta. A referência ao Plaud (que é uma ferramenta robusta para esta função), para somente no nome, pois este projeto utiliza hardware que qualquer um pode ter acesso, com código em Python e usando o Gemini para fazer a interpretação do áudio e transcrição.
A intenção do projeto foi criar um aparelho menor possível, e mais barato possível para nossa realidade. É possível aplicar este projeto em outros hardwares, mas aí, adaptando o código.
Arquivos do Projeto
8.19 KB
2.20 KB
2.54 KB
225 B
124 B
Materiais Necessários
- Raspberry Pi Zero 2W
- Raspberry Pi 2,13 polegadas e-Paper E-Ink Display HAT Interface SPI 250x122 2,13 polegadas
- Etcs-para raspberry pi zero w ups-lite placa de fonte de alimentação bateria i2c max17040g indicador
- Mini microfone USB para Raspberry Pi
- Cartão Micro SD classe 10 (mínimo de 64Gb)
- Cabo OTG (conversor de USB fêmea para micro usb macho) para conectar o microfone
Ferramentas Necessárias
- Um notebook ou PC para conseguir fazer as instruções no Raspberry
Etapas
Introdução
-
O Plaud Pi Zero é um dispositivo DIY (Faça Você Mesmo) baseado em Raspberry Pi Zero 2W que grava áudio continuamente, transcreve e resume o conteúdo usando Inteligência Artificial (Google Gemini 2.5 Flash) e envia os resultados diretamente para o Telegram.
Principais Funcionalidades
Gravação Contínua: Blocos de 15 minutos (configurável) com processamento em segundo plano.
IA Multimodal: Usa o Gemini 2.5 Flash para transcrição fiel e sumarização em tópicos.
Interface Visual: Tela E-Ink (e-Paper) mostrando status de gravação, Wi-Fi e Bateria.
Notificações: Envia áudio (MP3 compactado) e texto (transcrição) via Bot do Telegram.
Resiliência: Reconexão automática de Wi-Fi, buffer anti-falhas e retentativa de upload.
Hardware Necessário
-
Raspberry Pi Zero 2W (com headers soldados).
Cartão MicroSD (16GB ou superior, Class 10/A1 recomendado).
Tela E-Ink 2.13inch (Modelo V4 Waveshare ou Spotpear compatível).
Microfone USB (Mini USB Mic ou similar).
Fonte de Energia: PowerBank ou UPS HAT (Ex: PiSugar/Waveshare UPS).
Adaptador OTG (Micro USB para USB-A) para conectar o microfone.
Instalação de Software
-
Passo A: Sistema Operacional
Instale o Raspberry Pi OS Lite (Bookworm) usando o Raspberry Pi Imager. Configure o Wi-Fi e SSH antes de iniciar.
Passo B: Dependências
Acesse o terminal via SSH e instale os pacotes necessários:
Bash
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-pil python3-numpy git ffmpeg libopenjp2-7 -y
sudo pip3 install requests RPi.GPIO spidev --break-system-packages
Passo C: Configuração da Tela (SPI)
Execute sudo raspi-config.
Vá em Interface Options > SPI > Yes.
Reinicie (sudo reboot).
Passo D: Drivers da Tela
Clone o repositório da Waveshare para obter os drivers básicos:
Bash
cd ~
git clone https://github.com/waveshare/e-Paper.git
mkdir -p /home/pi/plaud_pi_zero/lib
cp -r /home/pi/e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd /home/pi/plaud_pi_zero/lib/
Nota: Substitua /home/pi pelo seu usuário se for diferente (ex: /home/andregomes).
Configuração do Projeto
-
Crie a pasta do projeto: /home/pi/plaud_pi_zero.
Coloque os arquivos Python (disponíveis na seção de Código Fonte) nesta pasta.
IMPORTANTE: Edite os arquivos para inserir suas chaves:
main_epaper.py: Insira sua GEMINI_API_KEY.
cloud_sync.py: Insira TELEGRAM_BOT_TOKEN e TELEGRAM_CHAT_ID.
Instalação do Serviço (Auto-Start)
-
Para iniciar automaticamente ao ligar:
Crie o arquivo de serviço: sudo nano /etc/systemd/system/plaud-pi-zero.service
Cole o conteúdo (ajuste o usuário User=pi e caminhos conforme necessário).
Ative:
Bash
sudo systemctl daemon-reload
sudo systemctl enable plaud-pi-zero.service
sudo systemctl start plaud-pi-zero.service
Comandos de Controle
-
O projeto inclui scripts para criar comandos de terminal:
pausar: Para a gravação e coloca a tela em espera.
retomar: Reinicia o serviço e volta a gravar.
desativar: Encerra totalmente o assistente.
Código Fonte (Arquivos Python)
-
Aqui estão os arquivos finais. Copie e salve cada bloco com o nome do arquivo indicado.
1. main_epaper.py (O Cérebro)
Gerencia gravação, threads, IA e lógica principal.
2. cloud_sync.py (Integração Telegram)
Gerencia envio de arquivos e divisão de mensagens longas.
3. epaper_display.py (Interface Visual)
Desenha status, Wi-Fi e bateria na tela E-Ink.
4. wifi_manager.py e battery_manager.py
wifi_manager.py:
battery_manager.py:
Ajuste no GPIO
-
Essencial para funcionar no Pi Zero 2W com sistema novo. Substitua o arquivo original da Waveshare por este.
Python
import os
import sys
import time
import spidev
import RPi.GPIO as GPIO
# Definição Padrão HAT
RST_PIN = 17
DC_PIN = 25
CS_PIN = 8
BUSY_PIN = 24
class RaspberryPi:
def __init__(self):
self.SPI = spidev.SpiDev(0, 0)
self.SPI.max_speed_hz = 4000000
self.SPI.mode = 0b00
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(RST_PIN, GPIO.OUT)
GPIO.setup(DC_PIN, GPIO.OUT)
GPIO.setup(CS_PIN, GPIO.OUT)
GPIO.setup(BUSY_PIN, GPIO.IN)
def digital_write(self, pin, value): GPIO.output(pin, value)
def digital_read(self, pin): return GPIO.input(pin)
def delay_ms(self, delaytime): time.sleep(delaytime / 1000.0)
def spi_writebyte(self, data): self.SPI.writebytes(data)
def spi_writebyte2(self, data): self.SPI.writebytes2(data)
def module_init(self):
GPIO.setup(RST_PIN, GPIO.OUT)
GPIO.setup(DC_PIN, GPIO.OUT)
GPIO.setup(CS_PIN, GPIO.OUT)
GPIO.setup(BUSY_PIN, GPIO.IN)
return 0
def module_exit(self):
self.SPI.close()
GPIO.output(RST_PIN, 0)
GPIO.output(DC_PIN, 0)
GPIO.cleanup()
implementation = RaspberryPi()
for func in [x for x in dir(implementation) if not x.startswith('_')]:
setattr(sys.modules[__name__], func, getattr(implementation, func))
Scripts de Controle (pausar.py, parar.py)
-
pausar.py:
#!/usr/bin/env python3
import sys, subprocess, time
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
try: from epaper_display import initialize_display, display_status
except: pass
print("⏸️ Pausando...")
subprocess.run(["sudo", "systemctl", "stop", "plaud-pi-zero-auto.service"], check=False)
time.sleep(2)
if initialize_display():
display_status("PAUSADO ||", "Use 'retomar'", "OFF")
(Crie os atalhos em /usr/local/bin conforme explicado na documentação).
Conclusão
Tentei fazer o menor tamanho possível, mas isso gera alguns problemas, como a necessidade de uso de SSH para instalação do sistema e arquivos. Assim como o uso de um microfone USB, pois é muito difícil achar um microfone para embutir na placa.
Vale ressaltar que é necessário um pequeno conhecimento em programação e uso de SSH e itens parecidos, porém todo o projeto foi feito usando IA.
Caso você vá precisar de muita transcrição, vale a pena usar a troca automática de chaves do Gemini, pois os limites gratuitos são baixos.
Ainda preciso projetar uma "caixa" em 3D para imprimir. Assim que o fizer, atualizo o projeto.

Comentários
0