Um hub de produtividade pessoal rodando em um Raspberry Pi. Este projeto integra, de maneira simples, hardware e software para ajudar no foco, organização e captura de notas:
- Sense HAT — 6 modos de trabalho com controle via joystick e feedback visual LED 8×8
- Display e-Paper (Waveshare) — para mostrar status e tarefas
- Análise de postura — usa a câmera e OpenCV para checar postura
- Digitalização de notas (OCR) — converte imagens em texto com Tesseract
- Motion API — sincroniza tarefas automaticamente
- Servidor web leve (FastAPI) — interface/API para monitorar e controlar o sistema
- Banco de dados de tarefas — para gerenciar itens pendentes
Este README foi escrito para quem tem pouca ou nenhuma experiência em programação. Siga os passos no terminal do Raspberry Pi, um por vez.
- Raspberry Pi (recomendado: Pi 4 ou superior)
- Raspberry Pi OS (com acesso ao desktop e ao terminal)
- Sense HAT conectado nos pinos GPIO
- Raspberry Pi Camera Module conectado
- Display e-Paper Waveshare (conectado via SPI)
- Python 3 instalado
- Git instalado
Execute os comandos abaixo diretamente no terminal do Raspberry Pi.
- Clone o repositório para sua pasta pessoal:
cd ~
git clone https://github.com/alebmorais/pi_productivity.git
cd pi_productivity- Atualize o sistema e instale dependências essenciais (no Raspberry Pi OS):
sudo apt update
sudo apt upgrade -y
sudo apt install -y \
libcamera-dev \
libcap-dev \
python3-opencv \
python3-spidev \
python3-rpi.gpio \
tesseract-ocr \
libatlas-base-devObservações:
- O
tesseract-ocré necessário para a funcionalidade de OCR (pytesseract). - Se você usar outra distribuição (Ubuntu/Debian), alguns pacotes podem ter nomes diferentes.
- Habilite interfaces no Raspberry Pi (camera e I2C):
sudo raspi-configVá em "Interface Options" e habilite:
- Camera
- I2C
Reinicie se o sistema pedir.
- Configure um ambiente virtual Python (recomendado):
python3 -m venv --system-site-packages .venv
source .venv/bin/activateO uso de --system-site-packages permite que o ambiente use pacotes do sistema (útil para bibliotecas com integração ao hardware).
- Instale dependências Python do projeto:
pip install -r requirements.txt- Instale o driver da Waveshare e-Paper (correção do caminho):
# 1. Clone o repositório de drivers
git clone https://github.com/waveshare/e-Paper.git
# 2. Obtenha a pasta site-packages do venv
SITE_PACKAGES=$(python -c "import site; print(site.getsitepackages()[0])")
# 3. Copie a biblioteca correta para o venv
cp -r e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd "$SITE_PACKAGES/"
# 4. Limpe o repositório local de drivers (opcional)
rm -rf e-Paper- Configure variáveis de ambiente e chaves
Crie seu arquivo de configuração a partir do exemplo:
cp env.example .env
nano .envEdite as chaves (ex.: MOTION_API_KEY) e salve.
Ative o ambiente virtual e rode o servidor FastAPI com Uvicorn:
source .venv/bin/activate
uvicorn main:app --host 0.0.0.0 --port 8000- --host 0.0.0.0 torna a interface acessível por outros dispositivos na mesma rede (use o IP do seu Pi).
- Acesse em: http://[IP_DO_SEU_PI]:8000
O sistema possui 6 modos que você controla pelo joystick do Sense HAT. Cada modo tem feedback visual no LED 8×8.
Navegação (←→↑↓):
- Alterna entre os 6 modos disponíveis
- Mostra uma letra colorida no Sense HAT indicando o modo ativo
Botão do Meio (pressionar):
- Em
posture_check: Captura e analisa sua postura - Em
ocr_capture: Captura uma nota e processa OCR
Visual: Letra "P" azul escuro
Ação: Captura postura quando apertar o botão do meio
✓ Postura OK → Mostra "OK" verde
✗ Postura ruim → Mostra "!" vermelho
Uso: Verificação manual de postura
Visual: Letra "O" verde escuro
Ação: Captura nota via câmera e processa OCR
→ Mostra "T" azul após captura
→ Envia automaticamente para Motion API (se habilitado)
Uso: Digitalizar notas manuscritas rapidamente
Visual: Letra "H" verde → Barra verde progressiva
Duração: 60 minutos
Alerta Final: Animação do robô (10x)
Uso: Turnos longos de trabalho focado
Progresso: Barra de 8 pixels avançando
Visual: Letra "C" azul → Barra azul progressiva
Duração: 30 minutos por ciclo
Alerta: Últimos 5 min = arco-íris piscando
Final: Flash branco/preto + reinicia ciclo
Uso: Blocos médios com avisos de tempo
Visual: Letra "S" laranja → Verde/Azul alternado
Foco: 20 min (tela verde contínua)
└─ Último 1 min: pisca amarelo
Pausa: 10 min (azul escuro contínuo)
Ciclo: Repete automaticamente
Uso: Estudo com TDAH - Pomodoro adaptado
Visual: Letra "L" roxo → Azul pulsando
Efeito: Onda senoidal suave (respiração)
Duração: Contínua até trocar de modo
Uso: Relaxamento, meditação, pausas
- Ligue o sistema → Modo inicial:
posture_check(letra "P" azul) - Mova joystick para a direita → Alterna para
ocr_capture(letra "O" verde) - Continue navegando →
teleneuro,telec,study_adhd,leisure - Escolha
study_adhd→ Tela mostra "S" laranja por 0.5s - Timer inicia → Tela fica verde (período de foco 20min)
- Último minuto → Pisca amarelo (aviso)
- Após 20min → Troca para azul (pausa de 10min)
- Ciclo se repete automaticamente
O sistema também executa automaticamente:
- Sync Motion API: A cada 15 minutos (900s) - sincroniza tarefas
- Posture Check: A cada 5 minutos (300s) - verifica postura automaticamente
- E-Paper Update: Atualiza display quando há novas tarefas
Configure os intervalos no arquivo .env:
MOTION_SYNC_INTERVAL=900 # Segundos entre syncs Motion
POSTURE_INTERVAL=300 # Segundos entre checks postura
OCR_INTERVAL=600 # (Não usado atualmente)Acesse a interface web pelo navegador em http://[IP_DO_PI]:8000
- Dashboard em tempo real: Temperatura, umidade, pressão do Sense HAT
- Status do modo ativo: Visualize qual modo está rodando
- Lista de tarefas: Sincronizadas automaticamente com Motion API
- Calendário semanal: Visualize tarefas organizadas por dia
- Feed da câmera: Visualização ao vivo (atualiza a cada 2s)
- Controle de modos: Troque o modo via dropdown
- Captura OCR: Botão para capturar nota manualmente
GET /- Interface principal (HTML)GET /api/status- Status completo (JSON): modo, sense, tarefasPOST /sense/mode- Alterar modo programaticamentePOST /ocr- Disparar captura OCRGET /camera.jpg- Frame atual da câmeraGET /api/week-calendar- Calendário da semanaWebSocket /ws- Updates em tempo real a cada 2s
A aplicação expõe dados pessoais — é recomendado adicionar autenticação básica no FastAPI. Exemplo simples à parte (incluir no código do FastAPI):
- Use dependências do FastAPI para proteger rotas com BasicAuth ou OAuth2.
- Para um começo rápido, adicione uma dependência que verifique usuário/senha antes de acessar rotas principais.
(Se quiser, eu gero um exemplo de código de autenticação básico para você inserir no main.py.)
- Para parar o servidor: pressione Ctrl+C no terminal onde o uvicorn está rodando.
- Para remover arquivos temporários (ex.: drivers baixados): veja os comandos acima onde usamos
rm -rf.
- main.py — ponto de entrada do servidor FastAPI
- epaper.py — lógica de controle do display e-paper
- camera_posture.py — análise de postura com OpenCV
- ocr_notes.py — captura e OCR de notas (Tesseract)
- task_database.py — gerenciamento de tarefas
- requirements.txt — dependências Python
- Faça tudo com calma e copie/cole os comandos no terminal.
- Se algo der erro, copie a mensagem e pesquise; posso ajudar a interpretar.
- Guarde o arquivo
.envcom cuidado (contém chaves). - Reinicie o Raspberry Pi se hardware não for detectado na primeira vez.
Se quiser, eu atualizo o arquivo main.py adicionando um exemplo de autenticação (usuário/senha) e forneço instruções passo a passo para iniciantes.