Um sistema completo e moderno para monitorar a umidade do solo e temperatura, com sistema de irrigação controlável e dashboards em tempo real (Web e Mobile) com design minimalista.
O Garden Bot é um assistente inteligente que cuida das suas plantas. Ele mede a umidade do solo e a temperatura ambiente, permitindo que você controle uma bomba d'água remotamente através de uma interface web elegante ou aplicativo móvel.
- Sensores: Medem a umidade do solo e a temperatura do ambiente
- Arduino: Lê os sensores e controla o relé da bomba d'água via comandos
- API (Node.js): Recebe dados do Arduino e transmite em tempo real via WebSocket
- Visualização: Dashboards modernos e minimalistas em Web e Mobile
- Controle Total: Controle manual da bomba através dos dashboards
- Docker Ready: Deploy simplificado com Docker em qualquer máquina
- Microcontrolador: Arduino com comunicação serial
- Backend: Node.js + Express + Socket.IO + SerialPort
- Frontend Web: HTML5 + TailwindCSS + Socket.IO Client
- Mobile: React Native + Expo + Socket.IO Client
- Containerização: Docker + Docker Compose
Arduino → Serial → API (Node.js) → Socket.IO → Web/Mobile Dashboards
↓
Controle do Relé
- Node.js 20+
- Arduino conectado via USB
- Docker (opcional, mas recomendado)
# 1. Clone o repositório
git clone https://github.com/marcos-macedo-dev/garden_bot.git
cd garden_bot
# 2. Configure a porta do Arduino (opcional)
cp .env.example .env
# Edite .env se necessário
# 3. Inicie os containers
docker-compose up -d
# 4. Acesse
# Web: http://localhost:3000
# API: http://localhost:4000cd api
npm install
npm start
# API rodando em http://localhost:4000Abra o arquivo index.html no navegador ou sirva com um servidor HTTP:
# Na raiz do projeto
python -m http.server 3000
# Acesse: http://localhost:3000cd app
npm install
npm start
# Escaneie o QR code com Expo GoImportante: Configure o API_URL no app apontando para o IP da sua máquina:
// app/app/(tabs)/index.tsx
const API_URL = 'http://<SEU_IP>:4000';O projeto possui um design minimalista moderno em preto e branco:
- ✨ Tipografia extralight e clean
- 🎯 Cards translúcidos com backdrop blur
- 📱 Layout responsivo e grid moderno
- 🔄 Dados em tempo real via WebSocket
- ⚡ Animações suaves e micro-interações
- 🌓 Otimizado para telas OLED
Cliente escuta:
dados-atualizados: Recebe dados atualizados do Arduino{ "solo": 45, "temp": 25.5, "bomba": "Bomba DESLIGADA (Manual)" }
POST /controlar-bomba
Controla o relé da bomba d'água.
{
"acao": "ligar" // ou "desligar"
}Resposta:
{
"status": "Comando ligar enviado"
}O sistema detecta automaticamente várias portas:
Linux:
/dev/ttyUSB0-2(Adaptadores USB-Serial)/dev/ttyACM0-1(Arduino Uno, Mega)
Windows (via WSL2):
/dev/ttyS3-5(COM3, COM4, COM5)
Linux:
ls -l /dev/tty{USB,ACM}*Windows:
Get-WmiObject Win32_SerialPort | Select-Object Name,DeviceIDO Arduino deve enviar dados no formato:
Umidade do solo: 45%
Temperatura: 25.5°C
Bomba LIGADA (Manual)
E aceitar comandos:
RELAY_ON\n- Liga a bombaRELAY_OFF\n- Desliga a bomba
api/Dockerfile- Imagem da APIdocker-compose.yml- Orquestração completa.env.example- Template de configuração
# Ver logs
docker-compose logs -f api
# Reiniciar
docker-compose restart
# Rebuild
docker-compose up -d --build
# Parar
docker-compose downArduino não conecta:
# Ver portas disponíveis
ls -l /dev/tty{USB,ACM}*
# Dar permissão
sudo chmod 666 /dev/ttyUSB0
# Adicionar usuário ao grupo dialout
sudo usermod -a -G dialout $USERVeja mais detalhes em README-DOCKER.md
- ✅ Dashboard em tempo real
- ✅ Design minimalista idêntico ao web
- ✅ Controle da bomba
- ✅ Indicador de conexão
- ✅ Sem bottom bar (tela única focada)
- ✅ Animações suaves
O app replica o mesmo design minimalista do web:
- Header com título "Garden Bot" em extralight
- Cards de sensores em grid
- Controle com botões primário e outline
- Status de conexão com badge animado
garden_bot/
├── api/ # Backend Node.js
│ ├── index.js # Servidor principal
│ ├── package.json # Dependências
│ ├── Dockerfile # Container da API
│ └── .dockerignore
├── app/ # App React Native
│ ├── app/ # Screens e layouts
│ │ └── (tabs)/
│ │ └── index.tsx # Tela principal
│ ├── package.json
│ └── ...
├── arduino/ # Código do Arduino
│ └── Arduino.ino
├── index.html # Dashboard Web
├── docker-compose.yml # Orquestração Docker
├── .env.example # Template de configuração
├── README.md # Este arquivo
└── README-DOCKER.md # Guia Docker detalhado
Backend:
- Express.js - Framework web
- Socket.IO - WebSocket em tempo real
- SerialPort - Comunicação com Arduino
- CORS - Requisições cross-origin
Frontend Web:
- TailwindCSS - Framework CSS
- Socket.IO Client - WebSocket cliente
- Vanilla JavaScript
Mobile:
- React Native - Framework mobile
- Expo - Toolchain e SDK
- Socket.IO Client
- TypeScript
DevOps:
- Docker - Containerização
- Docker Compose - Orquestração
- Nginx - Servidor web estático
- CORS configurado para aceitar todas as origens (
*) - Sem autenticação implementada
- Recomendado apenas para redes locais confiáveis
Para produção, implemente:
- Autenticação (JWT, OAuth)
- HTTPS/WSS
- Limite de origem no CORS
- Rate limiting
- Variáveis de ambiente seguras
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fork o projeto
- Crie uma branch (
git checkout -b feature/NovaFeature) - Commit suas mudanças (
git commit -m 'Adiciona NovaFeature') - Push para a branch (
git push origin feature/NovaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Marcos Macedo
- GitHub: @marcos-macedo-dev
- Implementar modo automático no Arduino
- Adicionar mais sensores (luminosidade, pH)
- Sistema de alertas (notificações push)
- Histórico de dados com banco de dados
- Gráficos de tendências
- PWA (Progressive Web App)
- Suporte a múltiplas plantas
- API REST completa
- Dashboard de administração
Feito com ❤️ para plantas felizes 🌱