Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Garden Bot - Sistema de Monitoramento e Irrigação Inteligente

Badge Badge Badge

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.

🌟 Visão Geral

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.

Como Funciona?

  1. Sensores: Medem a umidade do solo e a temperatura do ambiente
  2. Arduino: Lê os sensores e controla o relé da bomba d'água via comandos
  3. API (Node.js): Recebe dados do Arduino e transmite em tempo real via WebSocket
  4. Visualização: Dashboards modernos e minimalistas em Web e Mobile
  5. Controle Total: Controle manual da bomba através dos dashboards
  6. Docker Ready: Deploy simplificado com Docker em qualquer máquina

🏗️ Arquitetura

Stack Tecnológico

  • 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

Fluxo de Dados

Arduino → Serial → API (Node.js) → Socket.IO → Web/Mobile Dashboards
                     ↓
                  Controle do Relé

🚀 Instalação e Execução

Pré-requisitos

  • Node.js 20+
  • Arduino conectado via USB
  • Docker (opcional, mas recomendado)

Opção 1: Com Docker (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:4000

Opção 2: Manual

Backend (API)

cd api
npm install
npm start
# API rodando em http://localhost:4000

Frontend Web

Abra o arquivo index.html no navegador ou sirva com um servidor HTTP:

# Na raiz do projeto
python -m http.server 3000
# Acesse: http://localhost:3000

App Mobile

cd app
npm install
npm start
# Escaneie o QR code com Expo Go

Importante: 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';

🎨 Design

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

📡 API Endpoints

WebSocket Events

Cliente escuta:

  • dados-atualizados: Recebe dados atualizados do Arduino
    {
      "solo": 45,
      "temp": 25.5,
      "bomba": "Bomba DESLIGADA (Manual)"
    }

HTTP Endpoints

POST /controlar-bomba

Controla o relé da bomba d'água.

{
  "acao": "ligar" // ou "desligar"
}

Resposta:

{
  "status": "Comando ligar enviado"
}

🔧 Configuração do Arduino

Porta Serial

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)

Descobrir a Porta

Linux:

ls -l /dev/tty{USB,ACM}*

Windows:

Get-WmiObject Win32_SerialPort | Select-Object Name,DeviceID

Formato de Comunicação

O 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 bomba
  • RELAY_OFF\n - Desliga a bomba

🐳 Docker

Arquivos Docker

  • api/Dockerfile - Imagem da API
  • docker-compose.yml - Orquestração completa
  • .env.example - Template de configuração

Comandos Úteis

# Ver logs
docker-compose logs -f api

# Reiniciar
docker-compose restart

# Rebuild
docker-compose up -d --build

# Parar
docker-compose down

Troubleshooting

Arduino 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 $USER

Veja mais detalhes em README-DOCKER.md


📱 App Mobile

Features

  • ✅ 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

Screenshots

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

📂 Estrutura do Projeto

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

🛠️ Desenvolvimento

Tecnologias Utilizadas

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

🔐 Segurança

⚠️ Atenção: Este projeto está configurado para desenvolvimento/uso local:

  • 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

🤝 Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para:

  1. Fork o projeto
  2. Crie uma branch (git checkout -b feature/NovaFeature)
  3. Commit suas mudanças (git commit -m 'Adiciona NovaFeature')
  4. Push para a branch (git push origin feature/NovaFeature)
  5. Abra um Pull Request

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


📞 Contato

Marcos Macedo


🎯 Roadmap

  • 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 🌱

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages