Sistema completo de assistência para pessoas com deficiência visual usando ESP32, visão computacional com TensorFlow.js, feedback tátil e narração de objetos em tempo real.
Sistema de assistência para detecção de obstáculos usando ESP32, ESP-NOW, sensor HC-SR04 e feedback tátil.
- �️ Visão Computacional com TensorFlow.js (modelo COCO-SSD, 80 classes)
- 📡 Comunicação ESP-NOW entre módulos ESP32 (baixíssima latência ~10ms)
- 🌐 Backend Node.js com captura e processamento de imagens
- 📹 ESP32-CAM para captura de imagens em tempo real
- 📏 Sensor ultrassônico HC-SR04 para detecção de obstáculos
- 🔊 Feedback tátil proporcional à distância
- 📱 App Mobile React Native com SSE (Server-Sent Events)
- �️ Narração em português dos objetos detectados
- ☁️ Deploy pronto para Render (produção)
┌──────────────────── REDE LOCAL / INTERNET ─────────────────────┐
│ │
│ ┌────────────────┐ │
│ │ ESP32-Sensor │ (Módulo 1) │
│ │ HC-SR04 │ │
│ └───────┬────────┘ │
│ │ ESP-NOW (Distância) + Temperatura + Giróscopio │
│ │ │
│ ▼ │
│ ┌────────────────┐ WebSocket │
│ │ ESP32-PAI │◄────────────────────┐ │
│ │ (Mestre) │ │ │
│ └───────┬────────┘ │ │
│ │ ESP-NOW (Vibração) │ │
│ │ │ │
│ ▼ │ │
│ ┌────────────────┐ │ │
│ │ ESP32-Motor │ (Módulo 3) │ │
│ └────────────────┘ │ │
│ │ │
│ ┌────────────────┐ (Módulo 2) HTPP ▼ │
│ │ ESP32-CAM │◄───┐ ┌──────────────────────┐ │
│ │ (Câmera) │ └───│ Servidor Node.js │ │
│ └────────────────┘ │ + TensorFlow.js │ │
│ 192.168.100.56 │ + COCO-SSD │ │
│ └────────┬─────────────┘ │
│ │ │
│ │ SSE / WebSocket │
│ ▼ │
│ ┌──────────────────┐ │
│ │ App Mobile │ │
│ │ React Native │ │
│ └──────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘
- Módulo 1 (Sensor) mede distância a cada 500ms
- Envia ao ESP32-PAI via ESP-NOW
- ESP32-PAI calcula intensidade de vibração:
< 20cm→ 🔴 FORTE (nível 3) + Alerta DANGER20-50cm→ � MÉDIA (nível 2) + Alerta WARNING50-100cm→ � BAIXA (nível 1) + Alerta INFO> 100cm→ ⚪ PARADO (nível 0)
- ESP32-PAI envia comando ao Módulo 3 (Motor) via ESP-NOW
- ESP32-PAI envia status ao Servidor via WebSocket
- Servidor faz broadcast via SSE ao App Mobile
- Servidor Node.js captura imagem da ESP32-CAM via HTTP (
/capture) - Processa com TensorFlow.js (modelo COCO-SSD)
- Detecta objetos com bounding boxes
- Traduz para português e gera descrição
- Faz broadcast via SSE ao App Mobile
- App narra objetos detectados via TTS (Text-to-Speech)
sistema_de_dectacao_de_objetos/
│
├── back-end/ # Servidor Node.js
│ ├── server-vision-streaming.js # Servidor principal (TensorFlow + SSE)
│ ├── server.js # Servidor básico (alternativo)
│ ├── Dockerfile # Container Docker
│ ├── docker-compose.yml # Orquestração
│ ├── package.json # Dependências npm
│ ├── RENDER_DEPLOY.md # Guia de deploy no Render
│ ├── SSE_*.md # Documentação SSE
│ └── test-sse.html # Cliente de teste SSE
│
├── firmware/ # Código dos ESP32
│ ├── modulo1-sensor/ # Sensor HC-SR04 + ESP-NOW
│ ├── esp32-pai-mestre/ # Controlador central + WebSocket
│ │ ├── src/main.cpp # ✅ ATUALIZADO (WebSocket + ESP-NOW)
│ │ └── platformio.ini # ✅ Deps: ArduinoJson + WebSockets
│ ├── modulo3-motor/ # Motor de vibração
│ ├── ARQUITETURA_SIMPLIFICADA.md # 📚 Documentação completa
│ └── INTEGRACAO_COMPLETA.md # 📚 Guia de integração
│
├── esp-32-cam/ # ESP32-CAM
│ ├── src/main.cpp # ✅ ATUALIZADO (HTTP puro)
│ └── platformio.ini # Configuração da câmera
│
├── app/ # App Mobile React Native
│ └── pcd-visual-app/ # Interface do usuário
│
├── docs/ # Documentação
│ ├── README_HARDWARE.md # Conexões físicas
│ ├── README_CONFIGURACAO.md # Setup detalhado
│ └── TROUBLESHOOTING.md # Solução de problemas
│
└── deprecated/ # Código legado
Hardware:
- 3x ESP32 DevKit (Módulo 1: Sensor, PAI, Módulo 3: Motor)
- 1x ESP32-CAM (AI-Thinker ou similar)
- 1x Sensor HC-SR04 (ultrassônico)
- 1x Motor vibracall 1027
- 1x Transistor NPN (BC547 ou similar)
- 1x Resistor 1kΩ
- Jumpers e protoboard
Software:
- Node.js 18+ (recomendado: 22)
- PlatformIO instalado
- VS Code (recomendado)
- Git
git clone https://github.com/fabiobrasileiroo/sistema_de_dectacao_de_objetos.git
cd sistema_de_dectacao_de_objetoscd back-end
# Instalar dependências
npm install
# Configurar IP da câmera (editar .env ou usar variável de ambiente)
export ESP32_CAM_IP=192.168.100.56
# Iniciar servidor
node server-vision-streaming.jsServidor estará disponível em:
- HTTP:
http://localhost:3000 - WebSocket (ESP32):
ws://localhost:3000/esp32 - WebSocket (App):
ws://localhost:3000/ws - SSE:
http://localhost:3000/api/stream/events - Swagger UI:
http://localhost:3000/api/docs
ESP32-PAI (firmware/esp32-pai-mestre/src/main.cpp):
const char* ssid = "SEU_WIFI";
const char* password = "SUA_SENHA";
// IP do servidor (seu PC na rede local)
const char* wsServer = "192.168.100.11"; // ← Ajuste aqui
const int wsPort = 3000;ESP32-CAM (esp-32-cam/src/main.cpp):
const char *ssid = "SEU_WIFI";
const char *password = "SUA_SENHA";# ESP32-Sensor (Módulo 1)
cd firmware/modulo1-sensor
pio run --target upload
pio device monitor # Ver MAC Address
# ESP32-PAI (Mestre)
cd ../esp32-pai-mestre
pio run --target upload
pio device monitor # Ver MAC Address e conexão WebSocket
# ESP32-Motor (Módulo 3)
cd ../modulo3-motor
pio run --target upload
pio device monitor
# ESP32-CAM
cd ../../esp-32-cam
pio run --target upload
pio device monitor # Ver IP da câmeraApós o primeiro upload, anote os MACs exibidos no Serial Monitor:
ESP32-Sensor (firmware/modulo1-sensor/src/main.cpp):
// MAC do ESP32-PAI (copiar do Serial Monitor do PAI)
uint8_t broadcastAddress[] = {0xEC, 0x64, 0xC9, 0x7C, 0x38, 0x30};ESP32-PAI (firmware/esp32-pai-mestre/src/main.cpp):
// MAC do Módulo 1 (Sensor)
uint8_t modulo1Address[] = {0xD0, 0xEF, 0x76, 0x15, 0x8F, 0x04};
// MAC do Módulo 3 (Motor)
uint8_t modulo3Address[] = {0xEC, 0x64, 0xC9, 0x7B, 0x99, 0x8C};Recompile após configurar os MACs:
cd firmware/modulo1-sensor && pio run --target upload
cd ../esp32-pai-mestre && pio run --target upload# Terminal 1: Servidor Node.js
cd back-end
node server-vision-streaming.js
# Terminal 2: ESP32-PAI
cd firmware/esp32-pai-mestre
pio device monitor --baud 115200
# Terminal 3: ESP32-CAM
cd esp-32-cam
pio device monitor --baud 115200Servidor Node.js:
✅ Modelo COCO-SSD carregado com sucesso!
🌐 HTTP Server: http://localhost:3000
🔌 WebSocket: ws://localhost:3000/esp32
📡 ESP32-CAM IP: 192.168.100.56
📸 Modo: CAPTURA
🤝 ESP32 conectado: ::ffff:192.168.100.10
✅ ESP32-PAI identificado: ESP32-PAI-MESTRE
🔄 Processando frame #1...
🎯 DETECÇÃO TENSORFLOW
📝 Descrição: Detectados 2 objetos: pessoa (95%), cadeira (87%)
ESP32-PAI:
╔════════════════════════════════════╗
║ ESP32-PAI - MESTRE + WEBSOCKET ║
╚════════════════════════════════════╝
✅ WiFi conectado!
IP: 192.168.100.10
MAC: EC:64:C9:7C:38:30
✅ WebSocket conectado a: 192.168.100.11
╔════════════════════════════════╗
║ SENSOR (Módulo 1) ║
╚════════════════════════════════╝
📏 Distância: 45 cm
🟡 Intensidade: MÉDIA (nível 2)
✅ Comando enviado ao Motor
ESP32-CAM:
WiFi connected
Camera Ready! Use 'http://192.168.100.56' to connect
- Aproximar objetos do sensor → Motor vibra
- Colocar objetos na frente da câmera → Servidor detecta e narra
- Abrir navegador em
http://localhost:3000/api/docs→ Swagger UI - Testar SSE em
http://localhost:3000/test-sse.html
| Documento | Descrição |
|---|---|
| Firmware | |
| ARQUITETURA_SIMPLIFICADA.md | 📐 Arquitetura completa do sistema |
| INTEGRACAO_COMPLETA.md | 🔌 Guia de integração ESP32 ↔ Servidor |
| Backend | |
| RENDER_DEPLOY.md | ☁️ Deploy no Render (produção) |
| SSE_REALTIME_GUIDE.md | 📡 Server-Sent Events em tempo real |
| DOCKER_GUIDE.md | 🐳 Rodar com Docker |
| API_DETECTIONS_REALTIME.md | 🎯 API de detecções |
| Hardware | |
| README_HARDWARE.md | 🔌 Conexões e esquemas elétricos |
| README_CONFIGURACAO.md | ⚙️ Configuração passo a passo |
| TROUBLESHOOTING.md | 🐛 Solução de problemas |
| Legado | |
| README_ESP32_SISTEMA.md | 📖 Guia completo original |
- Node.js 22 + Express
- TensorFlow.js com modelo COCO-SSD
- WebSocket (ws) para ESP32 e App
- Server-Sent Events (SSE) para push em tempo real
- Canvas para processamento de imagens
- Swagger para documentação da API
- PlatformIO + Arduino Framework
- ESP-IDF para funcionalidades avançadas
- ESP-NOW para comunicação entre ESP32s
- WebSocketsClient (ESP32-PAI)
- ArduinoJson para parsing JSON
- ESP32-Camera driver
- React Native + Expo
- EventSource para SSE
- Text-to-Speech para narração
- Axios para HTTP requests
- Docker + Docker Compose
- Render para deploy em produção
- Git para controle de versão
| Componente | Especificação | Consumo | Alcance/Precisão |
|---|---|---|---|
| ESP32-PAI | DevKit V1 | ~80mA | ESP-NOW: 200m |
| ESP32-CAM | AI-Thinker | ~180mA | Resolução: UXGA |
| ESP32-Sensor | DevKit V1 | ~80mA | HC-SR04: 2-400cm |
| ESP32-Motor | DevKit V1 | ~100mA | PWM 0-255 |
| Total | - | ~440mA | - |
| Métrica | Valor | Observação |
|---|---|---|
| Latência ESP-NOW | ~10ms | Sensor → PAI → Motor |
| Latência WebSocket | ~50ms | PAI → Servidor |
| Captura de Imagem | ~200ms | HTTP GET da câmera |
| Processamento TensorFlow | ~300-500ms | Depende da imagem |
| Taxa de Detecção | 0.5-1 fps | Configurable (1.5s default) |
| Alcance WiFi | ~50m | Indoor, depende do ambiente |
| Alcance ESP-NOW | ~200m | Campo aberto |
- Modelo: COCO-SSD (TensorFlow.js)
- Classes: 80 objetos comuns
- Confiança mínima: 50% (configurável)
- Objetos por frame: até 5 (configurável)
- Idioma: Português (tradução automática)
Exemplos de detecção:
- Pessoas, animais (cachorro, gato)
- Veículos (carro, bicicleta, moto)
- Móveis (cadeira, sofá, mesa)
- Eletrônicos (celular, notebook, TV)
- Utensílios (garrafa, xícara, livro)
cd back-end
# Build da imagem
docker build -t vision-backend:latest .
# Rodar container
docker run -p 3000:3000 \
-e ESP32_CAM_IP=192.168.100.56 \
vision-backend:latest# Iniciar todos os serviços
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar serviços
docker-compose down-
Criar conta no Render
-
Conectar repositório GitHub
-
Configurar Web Service:
- Environment:
Docker - Dockerfile Path:
back-end/Dockerfile - Port:
3000(automático)
- Environment:
-
Variáveis de Ambiente:
NODE_ENV=production ESP32_CAM_IP=<não necessário em produção> -
Deploy automático a cada push no GitHub
URLs após deploy:
- API:
https://seu-app.onrender.com - Swagger:
https://seu-app.onrender.com/api/docs - WebSocket:
wss://seu-app.onrender.com/esp32 - SSE:
https://seu-app.onrender.com/api/stream/events
📖 Ver RENDER_DEPLOY.md para guia completo.
Contribuições são muito bem-vindas! Este projeto foi desenvolvido para ajudar pessoas com deficiência visual.
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
- 🐛 Correção de bugs
- ✨ Novas features
- 📝 Melhorias na documentação
- 🎨 Interface do app mobile
- 🧪 Testes automatizados
- 🌍 Traduções (i18n)
- ♿ Melhorias de acessibilidade
Encontrou um bug ou tem uma sugestão? Abra uma issue
Template de issue:
## Descrição
[Descreva o problema ou sugestão]
## Passos para Reproduzir (se bug)
1. ...
2. ...
## Comportamento Esperado
[O que deveria acontecer]
## Comportamento Atual
[O que está acontecendo]
## Ambiente
- OS: [Linux/Windows/MacOS]
- Node.js: [versão]
- ESP32: [modelo]Este projeto está sob a licença MIT. Veja LICENSE para mais detalhes.
Resumo da licença:
- ✅ Uso comercial
- ✅ Modificação
- ✅ Distribuição
- ✅ Uso privado
⚠️ Sem garantia- ℹ️ Mantenha o aviso de copyright
Fábio Brasileiro
- 💼 GitHub: @fabiobrasileiroo
- 📧 Email: contato@fabiobrasileiro.dev
- 🌐 Portfolio: fabiobrasileiro.dev
- 💼 LinkedIn: linkedin.com/in/fabiobrasileiroo
- 🏢 InovaTech 2025 - Suporte ao projeto
- 🤝 Comunidade PlatformIO
- 🔧 Espressif Systems pelo ESP32
- 🧠 TensorFlow.js pela IA em JavaScript
- 🌐 Comunidade Node.js
- 📱 Expo pelo framework mobile
- ♿ Comunidade de acessibilidade e inclusão
- Sistema básico funcionando
- ESP-NOW entre módulos
- Detecção de objetos com TensorFlow
- Backend Node.js com SSE
- WebSocket ESP32-PAI → Servidor
- Docker e deploy no Render
- Documentação completa
- App mobile React Native completo
- Narração TTS em português
- Configuração via app (sem recompilar firmware)
- Histórico de detecções
- Modo economia de energia
- Múltiplos sensores simultâneos
- Calibração automática
- Machine Learning personalizado
- Dashboard web administrativo
- Integração com assistentes (Alexa, Google)
- Modo outdoor com GPS
- Notificações push
- Suporte multi-idioma (i18n)
- Reconhecimento facial de pessoas conhecidas
- Detecção de texto (OCR) para placas/documentos
- Modo indoor com mapeamento 3D
- Integração com smart home
- API pública para desenvolvedores
Se este projeto foi útil para você, considere dar uma ⭐!
🎬 Vídeo de demonstração no YouTube (em breve)
Status: 🟢 Ativo e em desenvolvimento
Versão: 2.0.0
Última atualização: 1 de novembro de 2025
Feito com ❤️ e ☕ por Fábio Brasileiro
Ajude a tornar o mundo mais acessível! ⭐