CAP 1 - Um mapa do tesouro Sistema de irrigação inteligente com ESP32 e Python
Grupo 73
O presente projeto propõe uma solução de irrigação inteligente desenvolvida em duas camadas: uma camada física embarcada com ESP32 simulada no Wokwi e uma camada lógica em Python, responsável por decisões com base em dados meteorológicos e armazenamentos em banco de dados SQL.
A iniciativa parte de uma problemática real: o desperdício de água e a ineficiência na irrigação agrícola, especialmente em pequenas propriedades. Como solução, construímos um sistema que lê variáveis ambientais (umidade do solo, pH, nutrientes) e as combina com dados climáticos reais (via OpenWeather API), para decidir automaticamente se a bomba de irrigação deve ser ativada ou não.
No ambiente simulado, a parte física foi modelada com o simulador Wokwi, utilizando sensores como:
- Botões para simular presença de Fósforo (P) e Potássio (K)
- Sensor LDR simulando pH do solo
- Sensor DHT22 para umidade
- Relé e LED controlando a bomba de irrigação
Já o código Python consome uma API pública de clima, grava os dados em banco de dados relacional, permite análises via dashboard Streamlit, e simula o envio de comandos ao ESP32 via serial (ou via JSON em contexto de simulação).
Além disso, exploramos os conceitos de IoT, automação agrícola, integração com APIs REST, banco de dados, POO, testes e dashboards interativos, reforçando a aplicação prática de conteúdos aprendidos.
Diagrama DAP - Funcionamento da Solução
Dentre os arquivos e pastas presentes na raiz do projeto, definem-se:
src/
├── esp32/ # Projeto do microcontrolador ESP32 (PlatformIO + C++)
├── python/ # Scripts Python (API, banco, dashboard, integração)
├── assets/ # Imagens, gráficos e materiais estáticos
├── document/ # Documentos acadêmicos e relatórios
Para mais detalhes sobre cada parte, consulte os READMEs específicos:
🐍 README do projeto Python + Dashboard
Implementação do sistema físico simulado no Wokwi com lógica em C++. Inclui sensores de umidade (DHT22), pH (LDR), fósforo e potássio (botões), e controle do relé para ativar a bomba de irrigação.
-
Pasta de desenvolvimento: src/esp32
-
Documentação Específica: 📘 README do projeto ESP32
-
Metas:
- Construir o circuito no Wokwi
- Desenvolver código em C++
- Documentar toda a lógica de controle
-
Entregáveis:
- Código C++ funcional
- Imagem do circuito no Wokwi
- Documentação detalhada
Sistema completo de armazenamento, processamento e visualização de dados dos sensores. Inclui integração com a API OpenWeather, banco de dados relacional e dashboard para análise dos dados, escopos do ir além 1 e 2, a serem descritos abaixo.
-
Pasta de desenvolvimento: src/python
-
Documentação Específica: 🐍 README do projeto Python + Dashboard
-
Metas:
- Criar scripts para armazenamento em SQL
- Implementar CRUD completo
- Justificar estrutura de dados e relacionar com o MER da fase anterio
-
Entregáveis:
- Script Python funcional
- Tabelas de exemplo com dados populados
Painel visual com gráficos interativos para análise dos dados dos sensores. Inclui gráficos de tendência, dispersão, barras e linha, além de exportação para CSV.
-
Pasta de desenvolvimento: src/python
-
Documentação Específica: 🐍 README do projeto Python + Dashboard
-
Metas:
-Criar visualizações claras e intuitivas para dados coletados
- Permitir filtros e exportações
-
Entregáveis:
- Dashboard completo com gráficos interativos
Integração com a API da OpenWeather para dados climáticos em tempo real, permitindo decisões de irrigação mais inteligentes. Inclui lógica para desativação da bomba em caso de previsão de chuva.
-
Pasta de desenvolvimento: src/python
-
Documentação Específica: 🐍 README do projeto Python + Dashboard
-
Metas:
-Criar integração robusta com API
- Implementar lógica condicional para irrigação
- Armazenar dados meteorológicos no banco
-
Entregáveis:
- Scripts Python para integração com API
- Tabelas populadas com dados climáticos
- Documentação detalhada
Como este projeto foi desenvolvido em um ambiente 100% simulado, não é possível estabelecer comunicação direta entre ESP32 e Python por porta serial. Para isso, utilizamos um arquivo climate.json como ponte de simulação dos dados meteorológicos.
Em um cenário real, essa comunicação seria feita com um ESP32 físico e uma conexão serial real utilizando pyserial.
- 0.4.0 - 18/05/2025
- Ajustes na documentação, incluindo imagens e vídeos.
- Padronização dos nomes das tabelas e colunas para inglês.
- Correção do tipo de dado para fósforo e potássio.
- Atualização dos models, services e repositories para refletir essas mudanças.
- 0.3.1 - 09/05/2025
- Justificativa para mudança no banco de dados.
- Criação dos repositories para todos os modelos com métodos CRUD completos e buscas específicas.
- Incremento nos services para aproveitar ao máximo os relacionamentos entre tabelas.
- Ajustes na documentação para refletir a nova estrutura do banco de dados.
- 0.3.0 - 04/05/2025
- ESP32 (src/esp32)
- Suporte à integração com climate.json (simulação da API OpenWeather).
- Delay ajustado para 10 minutos por ciclo.
- Código C++ comentado e otimizado.
- README atualizado com lógica, simulações sugeridas e limitações do Wokwi.
- Python (src/python)
- Integração com API OpenWeather para coleta e envio de dados climáticos simulados.
- CRUD completo com SQLAlchemy para climate_data, sensor_records e components.
- Dashboard interativo com Streamlit:
- Gráficos (linha, dispersão, histograma)
- Exportação para CSV/PDF
- Edição e exclusão de registros
- Logger colorido e estruturado por arquivo.
- Geral:
- README principal reestruturado com base em PBL.
- Inclusão de imagem DAP explicando o fluxo da aplicação local.
- Links diretos para os projetos específicos (/src/esp32 e /src/python).
- ESP32 (src/esp32)
- 0.2.0 - 02/05/2025
- Python (src/python)
- Implementação da dashboard interativa com Streamlit.
- Visualização completa dos dados climáticos, sensores e componentes.
- Funcionalidades:
- Cadastro, edição e exclusão de registros (CRUD)
- Gráficos dinâmicos (temperatura, umidade, correlação)
- Exportação de dados para CSV e PDF
- Integração com serviços existentes do projeto python (sem necessidade de duplicação de lógica).
- Python (src/python)
- 0.1.0 - 30/04/2025
- Implementação inicial do sistema de irrigação inteligente utilizando ESP32
- Adicionada leitura de sensores: umidade do solo (DHT22), presença de fósforo e potássio (botões físicos) e simulação de pH (sensor LDR)
- Desenvolvimento da lógica de ativação e desativação da bomba de irrigação com base nas condições do solo
- Integração do controle do relé e indicador LED
- Construção do circuito completo no Wokwi para simulação do hardware
- Criação de documentação detalhada no README, incluindo descrição do projeto, lógica de decisão baseada em fontes acadêmicas e imagem do circuito
MODELO GIT FIAP por Fiap está licenciado sobre Attribution 4.0 International.
O FarmTech Solutions é um sistema completo de irrigação inteligente que combina sensores IoT, machine learning e análise de dados para otimizar o uso de água na agricultura. Na Fase 4, o sistema foi aprimorado com funcionalidades avançadas de IA, interface interativa e otimizações de hardware.
- Modelo Preditivo: Sistema de IA que prevê a necessidade de irrigação baseado em dados históricos
- Random Forest Classifier: Algoritmo robusto para classificação de decisões de irrigação
- Feature Importance: Análise da importância de cada variável no modelo
- Simulador Interativo: Interface para testar diferentes cenários de irrigação
- Interface Moderna: Design responsivo com emojis e cores intuitivas
- Gráficos Interativos: Visualizações com Plotly para melhor experiência do usuário
- Análises Avançadas: Correlações entre variáveis e padrões temporais
- Exportação de Dados: Funcionalidade para exportar relatórios em CSV
- Monitoramento em Tempo Real: Display LCD 16x2 via I2C mostrando métricas principais
- Informações Críticas: Umidade, temperatura, pH e status de irrigação
- Indicadores Visuais: Presença de nutrientes (P e K) no display
- Monitoramento Visual: Gráficos em tempo real das variáveis do sistema
- Múltiplas Variáveis: Umidade do solo, temperatura, umidade do ar, pH e status de irrigação
- Análise de Tendências: Visualização de padrões ao longo do tempo
- Tipos de Dados Otimizados: Uso de
uint8_t
,bool
econst char*
para economizar RAM - Constantes em Flash: Strings constantes armazenadas em memória flash
- Comentários Detalhados: Documentação das otimizações implementadas
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ESP32 (IoT) │ │ Python App │ │ Dashboard │
│ │ │ │ │ Streamlit │
│ • Sensores │◄──►│ • ML Service │◄──►│ • Interface │
│ • Display LCD │ │ • Database │ │ • Gráficos │
│ • Serial Plot │ │ • API Services │ │ • Análises │
│ • Otimizações │ │ • Data Gen │ │ • Exportação │
└─────────────────┘ └─────────────────┘ └─────────────────┘
FIAP-F3-C1/
├── src/
│ ├── esp32/ # Código do ESP32
│ │ ├── src/main.cpp # Código principal com otimizações
│ │ ├── platformio.ini # Configuração PlatformIO
│ │ ├── diagram.json # Diagrama Wokwi com LCD
│ │ └── wokwi.toml # Configuração Wokwi
│ └── python/ # Aplicação Python
│ ├── app_dashboard.py # Dashboard Streamlit Fase 4
│ ├── services/
│ │ └── ml_service.py # Serviço de Machine Learning
│ ├── generate_sample_data.py # Gerador de dados de exemplo
│ └── requirements.txt # Dependências atualizadas
└── README.md # Este arquivo
- Sensores: DHT22 (umidade/temperatura), LDR (pH simulado)
- Atuadores: Relé (bomba de irrigação), LED de status
- Display: LCD 16x2 via I2C (SDA: D21, SCL: D22)
- Entradas: Botões para simular presença de nutrientes
- Streamlit: Interface web interativa
- Scikit-learn: Machine learning e predições
- Plotly: Gráficos interativos
- Pandas: Manipulação de dados
- SQLAlchemy: ORM para banco de dados
- Algoritmo: Random Forest Classifier
- Features: 9 variáveis (umidade, pH, nutrientes, clima, tempo)
- Target: Decisão de irrigação (binária)
- Métricas: Acurácia, confiança, importância das features
# Abra o projeto no Wokwi
# O circuito já inclui o display LCD I2C
# Compile e execute o código
cd src/python
pip install -r requirements.txt
python generate_sample_data.py
streamlit run app_dashboard.py
- Status do modelo ML
- Métricas em tempo real
- Gauge chart para umidade
- Predições de irrigação
- Treinamento do modelo
- Análise de importância das features
- Simulador de predições
- Relatórios de classificação
- Matriz de correlação
- Análise temporal
- Padrões de irrigação
- Estatísticas descritivas
- Visualização de tendências
- Gráficos interativos
- CRUD completo
- Exportação CSV
- Monitoramento de sensores
- Gráficos de nutrientes
- Status de irrigação
- Análise temporal
// Antes (Fase 3)
int PHOSPHORUS_PIN = 14;
String message = "Sistema iniciado";
// Depois (Fase 4) - Otimizado
const uint8_t PHOSPHORUS_PIN = 14; // uint8_t em vez de int
const char* MSG_INIT = "Sistema iniciado"; // const char* em vez de String
- RAM: Economia de ~2KB de RAM
- Flash: Strings constantes movidas para flash
- Performance: Tipos menores = operações mais rápidas
- Estabilidade: Menos fragmentação de memória
O sistema envia dados formatados para o Serial Plotter:
Umidade_Solo,Temperatura,Umidade_Ar,pH,Irrigacao
45.2,25.3,65.1,6.5,0
43.8,26.1,62.3,6.4,1
O display mostra informações em tempo real:
Linha 1: U:45.2% T:25.3C
Linha 2: pH:6.5 ON P K
- Acurácia: >85% em predições de irrigação
- Features Importantes: Umidade do solo, temperatura, pH
- Tempo de Treinamento: <30 segundos com dados de exemplo
- ESP32: Uso de memória otimizado
- Dashboard: Interface responsiva e intuitiva
- Dados: Visualização em tempo real
- Integração com APIs Climáticas: Dados reais de previsão do tempo
- Aprendizado Contínuo: Modelo que se adapta com novos dados
- Alertas Inteligentes: Notificações baseadas em IA
- Mobile App: Aplicativo móvel para monitoramento
- IoT Gateway: Conectividade com múltiplos sensores
FarmTech Solutions Team - Fase 4
- Desenvolvimento ESP32 e otimizações
- Implementação de Machine Learning
- Interface Streamlit avançada
- Documentação e testes
Este projeto foi desenvolvido para fins educacionais como parte do curso FIAP.
🌾 FarmTech Solutions - Revolucionando a Agricultura com Tecnologia Inteligente