Skip to main content
Glama
README.md
# ๐Ÿ’ก LUZMCP โ€” Sistema IoT com MCP Server & PWA

[![Firebase Hosting](https://img.shields.io/badge/Firebase_Hosting-Live-FFCA28?logo=firebase&logoColor=black)](https://projetosapp-f1f85.web.app)
[![Wokwi Simulator](https://img.shields.io/badge/Wokwi-Simulator-007ACC?logo=espressif&logoColor=white)](https://wokwi.com/projects/474785026691994625)
[![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python&logoColor=white)](https://python.org)
[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)](https://react.dev)
[![Vite](https://img.shields.io/badge/Vite-5-646CFF?logo=vite&logoColor=white)](https://vitejs.dev)
[![Model Context Protocol](https://img.shields.io/badge/MCP-Protocol-purple)](https://modelcontextprotocol.io/)

Sistema distribuรญdo para monitoramento e controle remoto de lรขmpadas/dispositivos IoT em tempo real. A arquitetura conecta um **Progressive Web App (PWA)** moderno, um servidor **MCP (Model Context Protocol)** para integraรงรฃo com Agentes e LLMs, uma **API REST Flask** e um **microcontrolador simulado no Wokwi** executando MicroPython.

---

## ๐ŸŽฎ Demonstraรงรฃo Online (Teste Agora Mesmo)

Vocรช pode testar todo o sistema funcionando ao vivo sem precisar instalar nada:

1. **Abra o Simulador de Hardware**:  
   ๐Ÿ‘‰ [Acessar Simulador Wokwi](https://wokwi.com/projects/474785026691994625)  
   *(Clique no botรฃo verde de **Play โ–ถ๏ธ** para iniciar a placa e ligar a conexรฃo Wi-Fi).*

2. **Abra o Painel de Controle (PWA)**:  
   ๐Ÿ‘‰ [Acessar Painel IoT Control (PWA)](https://projetosapp-f1f85.web.app)  
   *(Funciona no computador e no celular. No celular, vocรช pode selecionar "Adicionar ร  tela inicial" para instalar como app).*

3. **Interaja com as Lรขmpadas**:  
   - Clique no botรฃo de **L1** โž” O LED Vermelho no pino GP10 acende na simulaรงรฃo.
   - Clique no botรฃo de **L2** โž” O LED Azul no pino GP11 acende na simulaรงรฃo.
   - Desligue os interruptores no app para apagar as luzes correspondentes.

---

## ๐Ÿ—๏ธ Arquitetura do Sistema

```text
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                       Clientes                          โ”‚
โ”‚   โ€ข PWA no Celular / Computador (Firebase Hosting)      โ”‚
โ”‚   โ€ข Agentes de IA / LLMs (Claude, Gemini, Antigravity)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚                                 โ”‚
     (Modo IA / Tools)                (Modo Web Direto)
            โ–ผ                                 โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    MCP Server (Py)    โ”‚          โ”‚  API REST Flask (Py)  โ”‚
โ”‚  Transporte SSE / RPC โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  (PythonAnywhere)     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                               โ”‚
                                      Polling HTTP (1s)
                                               โ”‚
                                               โ–ผ
                                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                   โ”‚  Raspberry Pi Pico W  โ”‚
                                   โ”‚     (MicroPython)     โ”‚
                                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                               โ”‚
                                      Pinos GP10 e GP11
                                               โ”‚
                                               โ–ผ
                                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                   โ”‚   LEDs L1 (Vermelho)  โ”‚
                                   โ”‚   LEDs L2 (Azul)      โ”‚
                                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

---

## ๐Ÿ› ๏ธ Tecnologias Utilizadas

- **Microcontrolador / IoT**: Raspberry Pi Pico W simulado no [Wokwi](https://wokwi.com), programado em **MicroPython** com comunicaรงรฃo HTTP via `urequests`.
- **Backend**: **Python / Flask** hospedado no [PythonAnywhere](https://www.pythonanywhere.com), com suporte a CORS nativo e gerenciamento de estado dos perifรฉricos.
- **Camada MCP**: **Model Context Protocol SDK** (`mcp`), expondo as ferramentas `obter_status_lampadas` e `alterar_status_lampada` via Server-Sent Events (SSE).
- **Frontend / PWA**: **React 19**, **Vite**, **TypeScript**, **Tailwind CSS** e **Lucide Icons**, hospedado no **Firebase Hosting**.

---

## ๐Ÿ“ Estrutura de Diretรณrios

```text
.
โ”œโ”€โ”€ app.py                     # API Flask existente com rotas /micro e /comandos
โ”œโ”€โ”€ mcp_server.py              # MCP Server expondo Tools IoT via protocolo SSE
โ”œโ”€โ”€ wokwi.txt                  # Cรณdigo MicroPython para o simulador Wokwi
โ”œโ”€โ”€ firebase.json              # Configuraรงรตes de deploy no Firebase Hosting
โ”œโ”€โ”€ pwa/                       # Aplicaรงรฃo frontend PWA
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ App.tsx            # Lรณgica hรญbrida (MCP + API Direta) e interface
โ”‚   โ”‚   โ””โ”€โ”€ main.tsx           # Ponto de entrada React
โ”‚   โ”œโ”€โ”€ package.json           # Dependรชncias do frontend
โ”‚   โ””โ”€โ”€ vite.config.ts         # Configuraรงรตes de build e proxy local
โ””โ”€โ”€ README.md                  # Documentaรงรฃo do projeto
```

---

## ๐Ÿ’ป Como Rodar o Projeto Localmente

### 1. Prรฉ-requisitos
- Python 3.10 ou superior instalado.
- Node.js 18 ou superior instalado.

### 2. Rodando o Servidor MCP (Python)
```bash
pip install -r requirements.txt
python mcp_server.py
```
O servidor MCP inicializarรก ouvindo conexรตes SSE na porta `8080`.

### 3. Rodando o PWA em Desenvolvimento
```bash
cd pwa
npm install
npm run dev
```
Abra `http://localhost:5173` no seu navegador. O frontend conectarรก automaticamente ao MCP Server local via proxy `/sse`.

---

## ๐Ÿ‘จโ€๐Ÿ’ป Autor

Desenvolvido por **Marlon Kipson**  
- GitHub: [@marlonkipson95](https://github.com/marlonkipson95)  
- Repositรณrio: [marlonkipson95/LUZMCP](https://github.com/marlonkipson95/LUZMCP)