{
  "schema_version": "2.0",
  "generated": "2026-09-26",
  "title": "Artes do Sul · Oficina de Hardware & Projetos Embarcados",
  "context": "Catálogo unificado de projetos de bancada, diagramas de pinagem, esquemas elétricos, código-fonte e guias passo a passo para SBCs e microcontroladores (Raspberry Pi Zero W / Pi 5, ESP32 CYD, M5Stack Cardputer, Sonoff MINIR4 / POWR316D).",
  "mcu_platforms": {
    "all": "Todos os Controladores",
    "pi_zero_w": "Raspberry Pi Zero W (40-Pin GPIO)",
    "esp32_cyd": "ESP32 CYD 2432S028 (2.8\" Touch)",
    "cardputer_adv": "M5Stack Cardputer ADV (ESP32-S3)",
    "sonoff_esp32": "Sonoff MINIR4 / POWR316D (ESP32)",
    "esp32_generic": "ESP32 DevKit / NodeMCU",
    "pi5_host": "Raspberry Pi 3B+ / Pi 5 (Lab Host)"
  },
  "categories": {
    "all": "Todas as Categorias",
    "cisterna": "💧 Cisterna & Gestão de Água",
    "sensores": "🌡️ Sensores & Telemetria",
    "audio": "🔊 Áudio, Voz & Notificações",
    "hmi": "🖥️ HMI, Displays & Painéis",
    "rede": "🌐 Rede, Gateway & Servidor",
    "radio": "📡 Rádio, LoRa & Meshtastic",
    "cameras": "📷 Câmeras & Visão",
    "usb_gadget": "🔌 USB Gadget & Dispositivos HID",
    "energia": "⚡ Energia & Relés de Potência",
    "campo": "🔋 Campo & Datalogger Solar"
  },
  "protocols": {
    "i2c": "I²C (SDA/SCL)",
    "uart": "UART Serial (TX/RX)",
    "onewire": "1-Wire (Dallas DS18B20)",
    "gpio": "GPIO Digital / Relé",
    "adc": "ADC Analógico",
    "spi": "SPI Bus",
    "mqtt": "MQTT / WiFi",
    "esphome": "ESPHome / Native HA"
  },
  "projects": [
    {
      "id": "portao-espnow-solar",
      "title": "Sensor de Presença & Abertura no Portão (ESP-NOW Solar IP66)",
      "category": "campo",
      "mcu": "esp32_generic",
      "mcu_name": "Seeed XIAO ESP32-C3 + ESP32 Gateway",
      "difficulty": "Médio",
      "status": "in_lab",
      "featured": true,
      "guide_url": "https://artesdosul.com/espnow/",
      "summary": "Nó perimetral de alarme com deep-sleep de 60µA, recarga solar CN3065, detecção PIR AM312, sensor reed magnético e transmissão ESP-NOW sub-50ms para gateway MQTT e Telegram.",
      "hardware_bom": [
        "Seeed Studio XIAO ESP32-C3 (com antena IPEX/FPC)",
        "ESP32 DevKit WROOM-32U (Gateway com antena externa)",
        "Sensor de movimento PIR AM312 Mini 3.3V (15µA)",
        "Sensor magnético Reed Switch blindado de portão",
        "Módulo carregador solar CN3065 (4.4V-6V)",
        "Mini painel solar 6V 1.5W-2W monocristalino",
        "Bateria 18650 Li-ion protegida 3000mAh",
        "Caixa hermética IP66 ABS + Válvula de respiro ePTFE M12",
        "Buzzer ativo 5V + Transistor BC547 + Resistor 1kΩ"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "BAT+ / BAT-", "role": "Entrada Bateria Li-ion", "dest": "CN3065 BAT+ / 18650", "color": "red" },
          { "pin": "3V3 / GND", "role": "Alimentação Periféricos 3.3V", "dest": "AM312 VCC/GND + Pull-up Reed", "color": "orange" },
          { "pin": "GPIO 3 (D1)", "role": "Wakeup EXT0 PIR", "dest": "AM312 OUT (Presença)", "color": "cyan" },
          { "pin": "GPIO 4 (D2)", "role": "Wakeup EXT1 Reed Switch", "dest": "Reed Switch Portão (-> GND)", "color": "green" },
          { "pin": "GPIO 2 (D0)", "role": "ADC Tensão da Bateria", "dest": "Divisor 1MΩ/1MΩ + 100nF", "color": "gold" }
        ],
        "notes": "Circuito de ultra-baixo consumo com deep sleep de 60µA e autonomia superior a 1 ano mesmo sem luz solar direta."
      },
      "step_by_step": [
        "1. Fixação Mecânica: Monte os componentes na caixa hermética IP66 com todos os furos (prensa-cabos PG7, respiro M12 e PIR) na face inferior.",
        "2. Divisor de Tensão: Solde o divisor 1MΩ + 1MΩ entre o positivo da bateria 18650 e o GND, ligando o ponto central com capacitor de 100nF ao pino D0 (GPIO2).",
        "3. Firmware Sensor: Grave sensor_portao.ino no XIAO ESP32-C3 inserindo o endereço MAC do gateway capturado na porta serial.",
        "4. Gateway Residencial: Conecte o ESP32 ao Wi-Fi residencial, configure broker MQTT e bot do Telegram em gateway_casa.ino.",
        "5. Teste de Campo: Avalie o RSSI de recepção e fixe a caixa no pilar de alvenaria voltando a antena para a casa."
      ],
      "buy_links": {
        "shopee": "https://shopee.com.br/search?keyword=seeed%20xiao%20esp32c3",
        "mercadolivre": "https://lista.mercadolivre.com.br/xiao-esp32-c3",
        "amazon": "https://www.amazon.com.br/s?k=xiao+esp32c3",
        "aliexpress": "https://pt.aliexpress.com/w/wholesale-seeed-xiao-esp32c3.html"
      }
    },
    {
      "id": "cisterna-monitor-ultrasonico",
      "title": "Monitor de Cisterna com Sensor Ultrassônico JSN-SR04T",
      "category": "cisterna",
      "mcu": "esp32_generic",
      "mcu_name": "ESP32 DevKit / NodeMCU",
      "difficulty": "Médio",
      "status": "in_lab",
      "featured": true,
      "guide_url": "projeto-cisterna-monitor.html",
      "summary": "Medição de nível em tempo real para cisterna com sensor ultrassônico à prova d'água JSN-SR04T, boia magnética de segurança e relé para bomba d'água.",
      "hardware_bom": [
        "ESP32 DevKit v1 (30 pinos)",
        "Sensor ultrassônico à prova d'água JSN-SR04T 5V",
        "Sensor de nível boia magnética reed switch",
        "Módulo Relé 5V com optoacoplador",
        "Resistor 1kΩ e 2kΩ (divisor de tensão 5V -> 3.3V para Echo)",
        "Fonte 5V 2A industrial ou trilho DIN"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "GPIO 5", "role": "Trigger (Saída Pulso)", "dest": "JSN-SR04T TRIG", "color": "cyan" },
          { "pin": "GPIO 18", "role": "Echo (Entrada Pulso via Divisor 3.3V)", "dest": "JSN-SR04T ECHO (Divisor 1k/2k)", "color": "orange" },
          { "pin": "GPIO 19", "role": "Boia Nível Mínimo (Pull-up)", "dest": "Boia Reed Switch -> GND", "color": "green" },
          { "pin": "GPIO 23", "role": "Acionamento Relé Bomba", "dest": "Relé IN (Ativo LOW/HIGH)", "color": "purple" },
          { "pin": "VIN / 5V", "role": "Alimentação 5V", "dest": "JSN-SR04T VCC + Relé VCC", "color": "red" },
          { "pin": "GND", "role": "Terra Comum", "dest": "GND de todos os periféricos", "color": "gray" }
        ],
        "notes": "IMPORTANTE: O pino ECHO do JSN-SR04T opera em 5V. Utilize divisor resistivo (1kΩ em série + 2kΩ para GND) antes de conectar ao GPIO18 do ESP32 para proteger a entrada."
      },
      "step_by_step": [
        "1. Montagem Física: Fixe a cápsula do JSN-SR04T na tampa superior da cisterna perpendicular ao espelho d'água (mínimo 25cm da borda d'água mais alta).",
        "2. Divisor de Tensão: Conecte o pino ECHO do JSN-SR04T ao resistor de 1kΩ. O ponto central vai para o GPIO18 do ESP32 e o resistor de 2kΩ vai para GND.",
        "3. Boia de Emergência: Instale a boia no fundo da cisterna (nível 15%) e ligue um polo no GPIO19 com pull-up interno e outro polo ao GND.",
        "4. Firmware ESPHome: Configure o componente `sensor: ultrasonic` com filtro `median` e `calibrate_linear` para converter metros em Litros.",
        "5. Automação HA: Crie automação de bloqueio de bomba se nível < 20% ou se boia de segurança abrir."
      ],
      "code_snippet": "sensor:\n  - platform: ultrasonic\n    trigger_pin: GPIO5\n    echo_pin: GPIO18\n    name: \"Nível da Cisterna\"\n    update_interval: 5s\n    pulse_time: 10us\n    timeout: 4.5m\n    filters:\n      - filter_out: nan\n      - median:\n          window_size: 7\n          send_every: 3\n      - lambda: |-\n          // Converte distância em % de volume\n          float dist_m = x;\n          float prof_total = 2.20; // 2.20m altura total\n          float nivel = prof_total - dist_m;\n          return (nivel / prof_total) * 100.0;\n    unit_of_measurement: \"%\"",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/sensor-jsn-sr04t",
        "shopee": "https://shopee.com.br/search?keyword=jsn-sr04t",
        "amazon": "https://www.amazon.com.br/s?k=jsn-sr04t"
      }
    },
    {
      "id": "cyd-touch-hmi-dashboard",
      "title": "Terminal HMI Touchscreen ESP32 CYD 2.8\" (ESP-Screen & LVGL)",
      "category": "hmi",
      "mcu": "esp32_cyd",
      "mcu_name": "ESP32 CYD 2432S028 (Cheap Yellow Display)",
      "difficulty": "Fácil",
      "status": "in_lab",
      "featured": true,
      "guide_url": "projeto-cyd-touch-display.html",
      "summary": "Painel de controle touch para mesa ou parede integrado via MQTT e ESP-Screen ao Home Assistant, exibindo telemetria da cisterna, relés e status do homelab.",
      "hardware_bom": [
        "Placa ESP32-2432S028 (CYD 2.8\" 240x320 com Touch Resistivo XPT2046)",
        "Cabo Micro-USB de alimentação e dados",
        "Conector JST-1.25 4 pinos (Porta CN1 / P3 para sensores Grove)",
        "Gabinete 3D desk stand ou suporte magnético"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "GPIO 2", "role": "TFT RS / DC", "dest": "Display ST7789/ILI9341 interno", "color": "cyan" },
          { "pin": "GPIO 15", "role": "TFT CS", "dest": "Display ST7789/ILI9341 interno", "color": "cyan" },
          { "pin": "GPIO 14", "role": "TFT SCK", "dest": "Display SPI Clock interno", "color": "cyan" },
          { "pin": "GPIO 13", "role": "TFT MOSI", "dest": "Display SPI Data interno", "color": "cyan" },
          { "pin": "GPIO 21", "role": "TFT Backlight (PWM)", "dest": "LED Controle de Brilho", "color": "orange" },
          { "pin": "GPIO 33", "role": "Touch IRQ (XPT2046)", "dest": "Interrupção de Toque", "color": "green" },
          { "pin": "GPIO 22 / 27", "role": "Conector CN1 (I²C / UART)", "dest": "SDA / SCL ou RX/TX para Unit externa", "color": "purple" },
          { "pin": "GPIO 35", "role": "Conector P3 (LDR Analógico / ADC)", "dest": "Sensor de Luz Ambiente embutido", "color": "orange" },
          { "pin": "GPIO 4 / 16 / 17", "role": "LED RGB Traseiro (Ativo LOW)", "dest": "R (GPIO4), G (GPIO16), B (GPIO17)", "color": "red" }
        ],
        "notes": "O conector CN1 (JST 1.25mm 4-pin) permite conectar periféricos I2C (GPIO22 SDA, GPIO27 SCL) ou UART externa diretamente."
      },
      "step_by_step": [
        "1. Conexão USB: Conecte o CYD à porta USB da workstation e verifique a porta serial (CH340).",
        "2. Flash ESP-Screen ou LVGL: Grave o firmware compilado via PlatformIO ou ESPHome Dashboard.",
        "3. Configuração MQTT: Insira credenciais Wi-Fi e endereço do broker MQTT `192.168.1.10:1883`.",
        "4. Layout de Telas: Crie tiles interativos para o nível da cisterna (%), status da bomba (ON/OFF) e temperatura do homelab.",
        "5. Conector CN1 opcional: Ligue sensor SHT30/SHT40 para medição de temperatura local da bancada."
      ],
      "code_snippet": "display:\n  - platform: ili9xxx\n    model: ILI9341\n    cs_pin: GPIO15\n    dc_pin: GPIO2\n    reset_pin: GPIO4\n    rotation: 90\n    dimensions:\n      height: 240\n      width: 320\ntouchscreen:\n  - platform: xpt2046\n    cs_pin: GPIO33\n    interrupt_pin: GPIO36\n    calibration:\n      x_min: 300\n      x_max: 3800\n      y_min: 250\n      y_max: 3850",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/esp32-2432s028",
        "shopee": "https://shopee.com.br/search?keyword=esp32-2432s028",
        "amazon": "https://www.amazon.com.br/s?k=esp32+cyd"
      }
    },
    {
      "id": "cardputer-field-terminal",
      "title": "Terminal de Campo Portátil M5Stack Cardputer ADV",
      "category": "radio",
      "mcu": "cardputer_adv",
      "mcu_name": "M5Stack Cardputer ADV (ESP32-S3)",
      "difficulty": "Fácil",
      "status": "in_lab",
      "featured": true,
      "guide_url": "projeto-cardputer-field-terminal.html",
      "summary": "Microcomputador de bolso com teclado físico de 56 teclas, tela 1.14\", rádio LoRa/ESP-NOW e bateria integrada para auditoria, diagnóstico de rede e comando da cisterna.",
      "hardware_bom": [
        "M5Stack Cardputer (ESP32-S3FN8, 8MB Flash, 512KB SRAM)",
        "Porta Grove Port A (G1/G2/5V/GND)",
        "Cartão MicroSD 16GB com M5Launcher ou firmware custom",
        "Módulo Unit LoRa868/915 ou Unit ENV IV opcional"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "GPIO 1", "role": "Port A (Grove) - D1 / SDA / TX", "dest": "Barramento I²C / Serial Externo", "color": "cyan" },
          { "pin": "GPIO 2", "role": "Port A (Grove) - D2 / SCL / RX", "dest": "Barramento I²C / Serial Externo", "color": "orange" },
          { "pin": "GPIO 43", "role": "Teclado Matricial Linhas", "dest": "Matriz 56 teclas interna", "color": "green" },
          { "pin": "GPIO 44", "role": "Teclado Matricial Colunas", "dest": "Matriz 56 teclas interna", "color": "green" },
          { "pin": "GPIO 42", "role": "Microfone PDM / Áudio", "dest": "Entrada de microfone", "color": "purple" },
          { "pin": "GPIO 41", "role": "Speaker NS4148 I2S", "dest": "Amplificador de áudio interno", "color": "purple" },
          { "pin": "GPIO 44", "role": "Transmissor IR", "dest": "LED Emissor Infravermelho", "color": "red" }
        ],
        "notes": "A porta Grove Port A fornece 5V da bateria/USB e comunica com qualquer Unit M5Stack (ENV, AudioPlayer N9301, KMeter, GPS)."
      },
      "step_by_step": [
        "1. Preparação do SD: Formate o MicroSD em FAT32 e grave o `M5Launcher` ou firmware `Cardputer-ADV-Cisterna`.",
        "2. Conexão de Sensores: Plugue a Unit ENV IV na porta Grove para telemetria portátil imediata.",
        "3. Comunicação ESP-NOW: Habilite a rotina de envio peer-to-peer sem precisar de roteador Wi-Fi para disparar o relé da bomba.",
        "4. Modo Terminal Serial: Conecte o Cardputer ao Pi Zero W ou roteador via cabo USB para atuar como console VT100.",
        "5. Atalhos Rápidos: Programe as teclas 'A' (Ligar Bomba), 'S' (Status Cisterna) e 'D' (Desligar) com confirmação sonora no speaker."
      ],
      "code_snippet": "#include <M5Cardputer.h>\n\nvoid setup() {\n  auto cfg = M5.config();\n  M5Cardputer.begin(cfg, true);\n  M5Cardputer.Display.setRotation(1);\n  M5Cardputer.Display.setTextColor(TFT_GREEN, TFT_BLACK);\n  M5Cardputer.Display.drawString(\"CISTERNA ADV v2.4\", 10, 10);\n}\n\nvoid loop() {\n  M5Cardputer.update();\n  if (M5Cardputer.Keyboard.isKeyPressed('a')) {\n    M5Cardputer.Speaker.tone(1200, 100);\n    // Envia comando MQTT / ESP-NOW\n  }\n}",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/m5stack-cardputer",
        "shopee": "https://shopee.com.br/search?keyword=m5stack-cardputer",
        "amazon": "https://www.amazon.com.br/s?k=m5stack+cardputer"
      }
    },
    {
      "id": "pizero-mqtt-telemetria-movel",
      "title": "Nó MQTT Móvel Plug-and-Play com Armazenamento Offline",
      "category": "sensores",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W",
      "difficulty": "Médio",
      "status": "in_lab",
      "featured": true,
      "guide_url": "oficina-PiZeroW.html#mqtt",
      "summary": "Estação móvel que detecta sensores I2C/1-Wire, conecta automaticamente ao Wi-Fi ou abre hotspot de contingência, grava leituras em fila SQLite offline e sincroniza com o Home Assistant.",
      "hardware_bom": [
        "Raspberry Pi Zero W (com barra de pinos 40-pin soldada)",
        "Sensor de Temperatura/Umidade/Pressão BME280 (I²C)",
        "Sonda Térmica Submersível DS18B20 (1-Wire) + Resistor 4.7kΩ",
        "Módulo GPS NEO-6M (UART Serial)",
        "Cartão MicroSD 16GB / 32GB Class 10",
        "Powerbank 5V ou módulo carregador TP4056 com bateria Li-ion 18650"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Pino 1 (3V3)", "role": "Alimentação 3.3V", "dest": "VCC do BME280 e DS18B20", "color": "red" },
          { "pin": "Pino 2 (5V)", "role": "Alimentação 5.0V", "dest": "VCC do Módulo GPS NEO-6M", "color": "red" },
          { "pin": "Pino 3 (GPIO 2)", "role": "I²C SDA (Dados)", "dest": "SDA do BME280 (pull-up 1.8k embutido)", "color": "cyan" },
          { "pin": "Pino 5 (GPIO 3)", "role": "I²C SCL (Clock)", "dest": "SCL do BME280 (pull-up 1.8k embutido)", "color": "cyan" },
          { "pin": "Pino 6 (GND)", "role": "Terra Digital", "dest": "GND de todos os sensores", "color": "gray" },
          { "pin": "Pino 7 (GPIO 4)", "role": "1-Wire Data", "dest": "Fio amarelo/branco do DS18B20 (com 4.7k para 3V3)", "color": "green" },
          { "pin": "Pino 8 (GPIO 14)", "role": "UART TXD", "dest": "RX do Módulo GPS NEO-6M", "color": "purple" },
          { "pin": "Pino 10 (GPIO 15)", "role": "UART RXD", "dest": "TX do Módulo GPS NEO-6M", "color": "purple" }
        ],
        "notes": "Para o DS18B20 funcionar no Raspberry Pi, habilite `dtoverlay=w1-gpio` no `/boot/firmware/config.txt` e use resistor pull-up de 4.7kΩ entre 3V3 e GPIO4."
      },
      "step_by_step": [
        "1. Preparar Sistema: Grave o Raspberry Pi OS Lite 32-bit no cartão MicroSD usando o Raspberry Pi Imager.",
        "2. Habilitar Interfaces: Adicione `dtparam=i2c_arm=on`, `dtoverlay=w1-gpio` e `enable_uart=1` no arquivo de configuração do boot.",
        "3. Instalar Dependências: Execute `sudo apt update && sudo apt install -y python3-paho-mqtt python3-smbus python3-sqlite3`.",
        "4. Script de Contingência: Configure o script `agent.py` como serviço systemd para ler I2C, salvar em SQLite local se sem rede, e enviar via MQTT assim que conectar.",
        "5. Home Assistant MQTT Discovery: O script envia automaticamente a mensagem de autodescoberta para `homeassistant/sensor/zero-XXXX/config`."
      ],
      "code_snippet": "import time, sqlite3, paho.mqtt.client as mqtt\n\ndef publish_telemetry(client, temp, hum, pres):\n    topic = \"nodes/zero-lab/ambiente\"\n    payload = f'{{\"temperatura\": {temp:.2f}, \"umidade\": {hum:.2f}, \"pressao\": {pres:.1f}}}'\n    client.publish(topic, payload, qos=1, retain=True)",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/raspberry-pi-zero-w",
        "shopee": "https://shopee.com.br/search?keyword=raspberry-pi-zero-w",
        "amazon": "https://www.amazon.com.br/s?k=raspberry+pi+zero+w"
      }
    },
    {
      "id": "audioplayer-n9301-voice",
      "title": "Módulo de Áudio e Voz Unit AudioPlayer N9301 (UART Hex)",
      "category": "audio",
      "mcu": "cardputer_adv",
      "mcu_name": "M5Stack Cardputer / ESP32 CYD / Pi Zero W",
      "difficulty": "Fácil",
      "status": "in_lab",
      "featured": true,
      "guide_url": "unit-audioplayer-N9301.html",
      "summary": "Player de áudio MP3/WAV com slot MicroSD e amplificador embutido de 3W, controlado via comandos seriais UART hexadecimais a 9600 baud para alertas de voz.",
      "hardware_bom": [
        "M5Stack Unit AudioPlayer N9301 (com chip N9301 e slot TF Card)",
        "Cartão MicroSD formatado em FAT16/FAT32 com arquivos 0001.mp3, 0002.mp3",
        "Cabo Grove 4 vias (Amarelo, Branco, Vermelho, Preto)",
        "Alto-falante 8Ω 2W ou fone de ouvido P2 3.5mm"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Pino 1 (Amarelo)", "role": "UART TX (N9301)", "dest": "RX do Microcontrolador (GPIO 2 no Cardputer)", "color": "cyan" },
          { "pin": "Pino 2 (Branco)", "role": "UART RX (N9301)", "dest": "TX do Microcontrolador (GPIO 1 no Cardputer)", "color": "orange" },
          { "pin": "Pino 3 (Vermelho)", "role": "VCC (5V)", "dest": "5V da alimentação (USB ou pino 5V)", "color": "red" },
          { "pin": "Pino 4 (Preto)", "role": "GND", "dest": "Terra Comum GND", "color": "gray" }
        ],
        "notes": "Protocolo UART: 9600 bps, 8 bits de dados, 1 stop bit, sem paridade. Comandos iniciam com `0x7E` e encerram com `0xEF`."
      },
      "step_by_step": [
        "1. Preparação do Áudio: Copie os arquivos de voz (ex: `0001_alerta_cisterna.mp3`, `0002_bomba_ligada.mp3`) para a raiz do cartão MicroSD.",
        "2. Conexão Grove: Conecte o cabo Grove na porta do N9301 e nos pinos TX/RX do microcontrolador.",
        "3. Envio de Comando de Volume: Envie o array de bytes `7E 03 31 1E EF` para definir o volume máximo (30/30).",
        "4. Envio de Play por Índice: Envie `7E 04 41 00 01 EF` para reproduzir a primeira faixa do cartão.",
        "5. Integração com Automações: Dispare alertas sonoros automáticos quando o nível da cisterna cair abaixo do limite seguro."
      ],
      "code_snippet": "// Comando para tocar a faixa 1 no N9301 a 9600 baud\nuint8_t play_track1[] = {0x7E, 0x04, 0x41, 0x00, 0x01, 0xEF};\nSerial2.write(play_track1, sizeof(play_track1));",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/m5stack-audioplayer-n9301",
        "shopee": "https://shopee.com.br/search?keyword=m5stack-n9301",
        "amazon": "https://www.amazon.com.br/s?k=m5stack+audioplayer"
      }
    },
    {
      "id": "sonoff-minir4-rele-inteligente",
      "title": "Sonoff MINIR4 Extreme com ESPHome e Detach Relay",
      "category": "energia",
      "mcu": "sonoff_esp32",
      "mcu_name": "Sonoff MINIR4 (ESP32-C3)",
      "difficulty": "Médio",
      "status": "in_lab",
      "featured": false,
      "guide_url": "projeto-cisterna-monitor.html#reles",
      "summary": "Módulo relé de embutir ultra compacto 10A com ESP32, operando em modo desacoplado (Detach Relay) para automação de bombas, iluminação e interruptores físicos sem cortar energia inteligente.",
      "hardware_bom": [
        "Sonoff MINIR4 Extreme (ESP32)",
        "Conversor USB-Serial USB-TTL 3.3V (CP2102 ou CH340)",
        "Pinos pogo-pin ou fios para pads de flash (3V3, GND, TX, RX, GPIO0)",
        "Caixa de passagem 4x2 padrão brasileira"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Borne L_IN", "role": "Fase Entrada (127V / 220V)", "dest": "Rede Elétrica da Casa", "color": "red" },
          { "pin": "Borne L_OUT", "role": "Fase Saída Comutada", "dest": "Carga / Lâmpada / Bomba", "color": "orange" },
          { "pin": "Borne N_IN", "role": "Neutro", "dest": "Neutro da Rede Elétrica", "color": "cyan" },
          { "pin": "Borne S1", "role": "Interruptor Físico Contato 1", "dest": "Interruptor de Parede", "color": "purple" },
          { "pin": "Borne S2", "role": "Interruptor Físico Contato 2", "dest": "Interruptor de Parede (Contato Seco)", "color": "purple" }
        ],
        "notes": "AVISO DE SEGURANÇA: NUNCA conecte o conversor USB-Serial enquanto o aparelho estiver conectado na rede elétrica de 127V/220V. O flash deve ser feito exclusivamente em bancada com alimentação 3.3V do conversor USB."
      },
      "step_by_step": [
        "1. Desmontagem da carcaça: Abra a tampa plástica do MINIR4 para acessar os pontos de teste (pads) na placa de circuito.",
        "2. Pinos de Gravação: Conecte 3V3, GND, TX e RX do adaptador serial. Aterre o pad GPIO0 durante o boot para entrar em modo bootloader.",
        "3. Flash ESPHome: Grave o firmware compilado com suporte a OTA.",
        "4. Modo Detach Relay: Configure o switch S1/S2 para enviar eventos MQTT para o Home Assistant sem comutar o relé físico caso deseje automação via software.",
        "5. Instalação: Monte o dispositivo na caixa 4x2 com a rede elétrica desligada."
      ],
      "code_snippet": "switch:\n  - platform: gpio\n    name: \"Relé MINIR4\"\n    pin: GPIO26\n    id: relay_1\nbinary_sensor:\n  - platform: gpio\n    pin:\n      number: GPIO27\n      mode: INPUT_PULLUP\n      inverted: true\n    name: \"Interruptor S1/S2\"\n    on_state:\n      - switch.toggle: relay_1",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/sonoff-minir4",
        "shopee": "https://shopee.com.br/search?keyword=sonoff-minir4",
        "amazon": "https://www.amazon.com.br/s?k=sonoff+minir4"
      }
    },
    {
      "id": "pizero-pihole-dns-shield",
      "title": "Escudo de Rede Pi-hole & DNS AdBlocker Local",
      "category": "rede",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W",
      "difficulty": "Fácil",
      "status": "ready",
      "featured": false,
      "guide_url": "oficina-PiZeroW.html#catalogo",
      "summary": "Servidor DNS com bloqueio de propagandas, rastreadores e telemetria em nível de rede para todos os dispositivos e celulares conectados ao Wi-Fi.",
      "hardware_bom": [
        "Raspberry Pi Zero W ou Zero 2 W",
        "Cartão MicroSD 16GB com Raspberry Pi OS Lite",
        "Fonte 5V 1A com cabo Micro-USB estável"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Porta Micro-USB PWR", "role": "Alimentação 5V", "dest": "Fonte 5V 1.5A contínua", "color": "red" },
          { "pin": "Wi-Fi Integrado 2.4GHz", "role": "Interface de Rede", "dest": "Conexão com o roteador local", "color": "cyan" }
        ],
        "notes": "Fixe o endereço IP do Pi Zero W via reserva DHCP no roteador (ex: `192.168.1.5`)."
      },
      "step_by_step": [
        "1. Instalação do Pi-hole: Execute `curl -sSL https://install.pi-hole.net | bash`.",
        "2. Configuração de IP Estático: Defina a interface wlan0 com IP fixo.",
        "3. Listas de Bloqueio: Adicione as blocklists brasileiras e de telemetria de Smart TVs.",
        "4. Configuração no Roteador: Altere o servidor DNS primário do roteador para o IP do Pi-hole.",
        "5. Painel Web: Acesse `http://pi.hole/admin` para acompanhar estatísticas em tempo real."
      ],
      "code_snippet": "# Instalação silenciosa e rápida no Debian/Raspberry Pi OS Lite\ncurl -sSL https://install.pi-hole.net | bash",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/raspberry-pi-zero-w",
        "shopee": "https://shopee.com.br/search?keyword=raspberry-pi-zero-w",
        "amazon": "https://www.amazon.com.br/s?k=raspberry+pi+zero"
      }
    },
    {
      "id": "sonoff-powr316d-medidor-energia",
      "title": "Medidor de Consumo Elétrico Sonoff POWR316D Elite (16A)",
      "category": "energia",
      "mcu": "sonoff_esp32",
      "mcu_name": "Sonoff POWR316D (ESP32)",
      "difficulty": "Médio",
      "status": "in_lab",
      "featured": false,
      "guide_url": "projeto-cisterna-monitor.html#reles",
      "summary": "Medição de alta precisão em tempo real de Tensão (V), Corrente (A), Potência Ativa (W) e Consumo acumulado (kWh) com display LCD e corte automático de sobrecarga.",
      "hardware_bom": [
        "Sonoff POWR316D Elite 16A com display LCD",
        "Trilho DIN para fixação no quadro de distribuição",
        "Fios flexíveis 2.5mm² para entrada e saída de fase"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Borne LIN", "role": "Entrada Fase (127V/220V)", "dest": "Disjuntor de Proteção do Quadro", "color": "red" },
          { "pin": "Borne LOUT", "role": "Saída Fase Comutada", "dest": "Motor da Bomba d'Água / Carga", "color": "orange" },
          { "pin": "Borne N (Duplo)", "role": "Neutro", "dest": "Barramento de Neutro", "color": "cyan" }
        ],
        "notes": "O chip de medição CSE7766 comunica internamente com o ESP32 via UART serial isolada a 4800 baud."
      },
      "step_by_step": [
        "1. Integração eWeLink Stock: Conecte via add-on oficial eWeLink no Home Assistant ou faça o flash ESPHome em bancada.",
        "2. Monitoramento de Bomba: Acompanhe a potência de partida da bomba (ex: 850W) e detecte funcionamento a seco (potência cai para < 300W).",
        "3. Automação de Proteção: Configure desarme imediato se a corrente ultrapassar 10A por mais de 5 segundos.",
        "4. Cálculo de Custo: Envie dados de kWh para o painel Energy do Home Assistant para cálculo tarifário diário."
      ],
      "code_snippet": "sensor:\n  - platform: cse7766\n    voltage:\n      name: \"Tensão Elétrica\"\n    current:\n      name: \"Corrente Bomba\"\n    power:\n      name: \"Potência Ativa\"\n    energy:\n      name: \"Energia Total\"",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/sonoff-powr316d",
        "shopee": "https://shopee.com.br/search?keyword=sonoff-powr316d",
        "amazon": "https://www.amazon.com.br/s?k=sonoff+pow+elite"
      }
    },
    {
      "id": "lora-meshtastic-repeater",
      "title": "Repetidor e Nó de Emergência Meshtastic LoRa (SX1262)",
      "category": "radio",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W / ESP32 LoRa",
      "difficulty": "Avançado",
      "status": "expansion",
      "featured": false,
      "guide_url": "oficina-PiZeroW.html#catalogo",
      "summary": "Rede de mensagens mesh criptografadas de longo alcance (10km+) operando sem internet ou infraestrutura celular para comunicações de emergência e sensores remotos.",
      "hardware_bom": [
        "HAT LoRa Waveshare SX1262 (915 MHz Brasil)",
        "Antena Omnidirecional 915 MHz com conector SMA",
        "Raspberry Pi Zero W ou placa ESP32 LoRa V3"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "SPI MOSI (Pino 19)", "role": "SPI Data In", "dest": "SX1262 MOSI", "color": "cyan" },
          { "pin": "SPI MISO (Pino 21)", "role": "SPI Data Out", "dest": "SX1262 MISO", "color": "cyan" },
          { "pin": "SPI SCLK (Pino 23)", "role": "SPI Clock", "dest": "SX1262 SCK", "color": "cyan" },
          { "pin": "GPIO 25 (Pino 22)", "role": "LoRa Reset", "dest": "SX1262 RST", "color": "orange" },
          { "pin": "GPIO 8 (Pino 24)", "role": "SPI CS0", "dest": "SX1262 NSS", "color": "green" }
        ],
        "notes": "No Brasil, utilize a frequência de 915 MHz (banda ISM recomendada pela Anatel para Meshtastic)."
      },
      "step_by_step": [
        "1. Acoplamento de Antena: NUNCA ligue o rádio sem a antena conectada sob risco de queimar o amplificador de potência (PA).",
        "2. Habilitar barramento SPI: Adicione `dtparam=spi=on` no arquivo `config.txt`.",
        "3. Instalar Meshtastic Native: Compile o daemon `meshtasticd` para Linux ARMv6.",
        "4. Emparelhamento Bluetooth: Conecte pelo aplicativo Meshtastic no smartphone e configure o canal primário.",
        "5. Integração MQTT: Habilite o uplink MQTT no broker do lab para repassar mensagens de sensores LoRa distantes ao Home Assistant."
      ],
      "code_snippet": "# Configurar canal Meshtastic via CLI\nmeshtastic --set-owner \"Nó Cisterna Lab\" --set lora.region US",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/sx1262-lora-915",
        "shopee": "https://shopee.com.br/search?keyword=sx1262-lora-915",
        "amazon": "https://www.amazon.com.br/s?k=meshtastic+lora+915"
      }
    },
    {
      "id": "camera-seguranca-motioneye",
      "title": "Câmera de Monitoramento e Visão Noturna motionEye",
      "category": "cameras",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W",
      "difficulty": "Fácil",
      "status": "ready",
      "featured": false,
      "guide_url": "oficina-PiZeroW.html#catalogo",
      "summary": "Sistema de gravação de imagens e vídeo por detecção de movimento em tempo real com streaming RTSP e envio de fotos para o Telegram.",
      "hardware_bom": [
        "Raspberry Pi Zero W com cabo flat de câmera específico para Zero",
        "Câmera Oficial Raspberry Pi v2 8MP ou Câmera NoIR (infravermelho)",
        "Case impresso em 3D com suporte de fixação ajustável"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Conector CSI-2", "role": "Interface Serial de Câmera", "dest": "Cabo flat da câmera Pi", "color": "cyan" }
        ],
        "notes": "O Pi Zero W utiliza um conector CSI menor que o Pi 4/5; certifique-se de usar o cabo flat de largura reduzida."
      },
      "step_by_step": [
        "1. Conexão do Flat: Levante a trava do conector CSI, insira o flat com os contatos metálicos voltados para o lado correto e trave firmemente.",
        "2. Habilitar Câmera: Execute `sudo raspi-config` e ative a interface de câmera legacy ou configure libcamera.",
        "3. Instalar motionEye: Execute a instalação do motionEye e inicie o serviço.",
        "4. Configurar Máscaras de Movimento: No painel web (`:8765`), crie máscaras para evitar falsos positivos com árvores ou reflexos.",
        "5. Notificação Telegram: Configure o webhook para enviar instantâneos fotográficos no bot de alarme."
      ],
      "code_snippet": "# Iniciar motionEye daemon\nsudo systemctl enable motioneye\nsudo systemctl start motioneye",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/camera-raspberry-pi-zero",
        "shopee": "https://shopee.com.br/search?keyword=camera-raspberry-pi-zero",
        "amazon": "https://www.amazon.com.br/s?k=camera+raspberry+pi+zero"
      }
    },
    {
      "id": "usb-gadget-ethernet-serial",
      "title": "Adaptador USB Gadget Multi-Função (Ethernet + Serial + HID)",
      "category": "usb_gadget",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W",
      "difficulty": "Médio",
      "status": "ready",
      "featured": false,
      "guide_url": "oficina-PiZeroW.html#catalogo",
      "summary": "Transforma o Pi Zero W em uma placa de rede virtual, console serial e teclado automatizado quando plugado na porta USB de qualquer computador com um único cabo.",
      "hardware_bom": [
        "Raspberry Pi Zero W ou Zero 2 W",
        "Cabo Micro-USB com linhas de dados completas (D+ / D-)"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Porta Micro-USB USB (Central)", "role": "USB OTG Device", "dest": "Porta USB Tipo-A ou Tipo-C do PC Host", "color": "cyan" }
        ],
        "notes": "Use sempre a porta micro-USB interna (marcada como 'USB'), não a porta 'PWR IN', para tráfego de dados OTG."
      },
      "step_by_step": [
        "1. Ativar Driver OTG: Adicione `dtoverlay=dwc2` no arquivo `/boot/firmware/config.txt`.",
        "2. Carregar Módulos: Adicione `modules-load=dwc2,g_ether` após `rootwait` na linha de comando do kernel `/boot/firmware/cmdline.txt`.",
        "3. Configurar mDNS: Instale `avahi-daemon` para acessar via `ssh pi@raspberrypi.local` sem necessidade de Wi-Fi ou roteador.",
        "4. Compartilhamento de Internet: Habilite o compartilhamento de conexão de rede no Windows ou Linux para o Pi navegar.",
        "5. Modo HID: Configure o driver `libcomposite` para transformar em dispositivo de automação e injeção de teclas."
      ],
      "code_snippet": "# Linha a adicionar no config.txt do cartão SD\ndtoverlay=dwc2",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/cabo-micro-usb-dados",
        "shopee": "https://shopee.com.br/search?keyword=cabo-micro-usb-dados",
        "amazon": "https://www.amazon.com.br/s?k=cabo+micro+usb+dados"
      }
    },
    {
      "id": "estacao-meteorologica-completa",
      "title": "Estação Meteorológica Solar Autônoma com Anemômetro e BME280",
      "category": "campo",
      "mcu": "pi_zero_w",
      "mcu_name": "Raspberry Pi Zero W / ESP32 DevKit",
      "difficulty": "Avançado",
      "status": "expansion",
      "featured": false,
      "guide_url": "oficina-PiZeroW.html#catalogo",
      "summary": "Monitoramento climático externo de alta precisão alimentado por pequeno painel solar de 10W e baterias 18650, calculando velocidade do vento, volume de chuva e ponto de orvalho.",
      "hardware_bom": [
        "Sensor BME280 ou SHT40 em abrigo meteorológico tipo Stevenson",
        "Anemômetro de conchas com saída de pulsos (reed switch)",
        "Pluviômetro de báscula basculante",
        "Painel Solar 10W 12V + Controlador de Carga Solar MPPT / TP5100",
        "Duas baterias Li-Ion 18650 com BMS de proteção 2S"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "GPIO 2 (SDA)", "role": "I²C Dados", "dest": "BME280 SDA", "color": "cyan" },
          { "pin": "GPIO 3 (SCL)", "role": "I²C Clock", "dest": "BME280 SCL", "color": "cyan" },
          { "pin": "GPIO 17", "role": "Interrupção Anemômetro", "dest": "Reed Switch do Anemômetro (pull-up 10k)", "color": "orange" },
          { "pin": "GPIO 27", "role": "Interrupção Pluviômetro", "dest": "Báscula do Pluviômetro (pull-up 10k)", "color": "green" }
        ],
        "notes": "Use capacitores de 100nF em paralelo com os reed switches para debounce por hardware das leituras de vento e chuva."
      },
      "step_by_step": [
        "1. Montagem do Abrigo: Instale o sensor de temperatura em abrigo ventilado com proteção contra radiação solar direta.",
        "2. Calibração do Anemômetro: Calcule o fator de conversão de pulsos por segundo para km/h (ex: 1 pulso/s = 2.4 km/h).",
        "3. Calibração da Báscula: Meça o volume em ml por báscula para calcular mm de chuva por m² (ex: 0.2794 mm/pulso).",
        "4. Gestão de Energia: Habilite deep-sleep no ESP32 ou suspensão programada para estender a autonomia para semanas em dias nublados.",
        "5. Publicação: Envie métricas a cada 60s via MQTT para integração com Grafana e Home Assistant."
      ],
      "code_snippet": "# Cálculo de velocidade do vento no ESPHome\nsensor:\n  - platform: pulse_counter\n    pin: GPIO17\n    name: \"Velocidade do Vento\"\n    unit_of_measurement: \"km/h\"\n    filters:\n      - multiply: 2.4",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/kit-estacao-meteorologica-anemometro",
        "shopee": "https://shopee.com.br/search?keyword=anemometro-pluviometro",
        "amazon": "https://www.amazon.com.br/s?k=bme280+sensor"
      }
    },
    {
      "id": "sensor-am2301-si7021",
      "title": "Sensor de Temperatura e Umidade AM2301 / Si7021 (Sonoff TH & ESP32)",
      "category": "sensores",
      "mcu": "sonoff_esp32",
      "mcu_name": "Sonoff TH16 / THR316D / ESP32 DevKit / Pi Zero W",
      "difficulty": "Fácil",
      "status": "in_lab",
      "featured": true,
      "guide_url": "projeto-sensor-am2301-si7021.html",
      "summary": "Sonda industrial de temperatura e umidade relativa de alta precisão (-40°C a +80°C / 0-99.9% RH) com protocolo digital de barramento único (1-Wire DHT/Si7021), cabo extensor e conector Jack 2.5mm / RJ9.",
      "hardware_bom": [
        "Sonda de Temperatura e Umidade AM2301 / Sonoff Si7021 / THS01",
        "Controlador Sonoff TH16 / THR316D Elite ou ESP32 DevKit / Raspberry Pi Zero W",
        "Conector Jack 2.5mm fêmea ou cabo adaptador RJ9 (para bancada)",
        "Resistor de pull-up 4.7kΩ ou 10kΩ (entre VDD e DATA, dispensável no Sonoff TH de fábrica)",
        "Cabo blindado de 4 vias (para extensões de até 20 metros sem ruído)"
      ],
      "pinout": {
        "mcu_pins": [
          { "pin": "Pino 1 (Vermelho / VDD)", "role": "Alimentação 3.3V a 5.2V DC", "dest": "3V3 (ESP32) ou 5V (Sonoff TH)", "color": "red" },
          { "pin": "Pino 2 (Amarelo ou Branco / DATA)", "role": "Dados Serial 1-Wire (Pull-up 4.7k)", "dest": "GPIO 4 (ESP32) / GPIO 14 (Sonoff TH) / GPIO 4 (RPi)", "color": "cyan" },
          { "pin": "Pino 3 (Preto / GND)", "role": "Terra Digital Comum", "dest": "GND de alimentação", "color": "gray" },
          { "pin": "Jack 2.5mm (Ponta / Tip)", "role": "Linha VDD (3.3V/5V)", "dest": "Alimentação do conector Sonoff", "color": "red" },
          { "pin": "Jack 2.5mm (Anel / Ring)", "role": "Linha DATA", "dest": "Barramento de dados Sonoff", "color": "cyan" },
          { "pin": "Jack 2.5mm (Corpo / Sleeve)", "role": "Linha GND", "dest": "GND do conector Sonoff", "color": "gray" }
        ],
        "notes": "Ao ligar o AM2301/Si7021 diretamente em placas ESP32 ou Raspberry Pi sem o módulo Sonoff original, coloque um resistor pull-up de 4.7kΩ entre o pino DATA e o pino VDD (3.3V) para manter a linha em nível alto durante o repouso."
      },
      "step_by_step": [
        "1. Identificação do Conector: Se estiver usando a sonda original com plug Jack 2.5mm ou RJ9, use um conector fêmea correspondente ou corte a ponta identificando Vermelho (VDD), Amarelo/Branco (DATA) e Preto (GND).",
        "2. Ligação do Resistor Pull-up: Conecte o resistor de 4.7kΩ entre VDD (3.3V) e DATA (GPIO).",
        "3. Conexão ao Microcontrolador: Ligue DATA ao GPIO 4 no ESP32, VDD no 3.3V e GND no pino GND.",
        "4. Configuração ESPHome: Use o componente `sensor: dht` com `model: AM2301` ou `model: SI7021` e defina o intervalo de leitura para 5 a 10 segundos.",
        "5. Home Assistant & Climatização: Integre as entidades de Temperatura (°C), Umidade (%) e crie sensor de Ponto de Orvalho (Dew Point) com automação para controle de desumidificador ou ventilação."
      ],
      "code_snippet": "sensor:\n  - platform: dht\n    pin: GPIO4\n    model: AM2301\n    temperature:\n      name: \"Temperatura Ambiente AM2301\"\n      filters:\n        - filter_out: nan\n        - median:\n            window_size: 5\n            send_every: 2\n    humidity:\n      name: \"Umidade Relativa AM2301\"\n      filters:\n        - filter_out: nan\n    update_interval: 10s",
      "buy_links": {
        "mercadolivre": "https://lista.mercadolivre.com.br/sensor-am2301-sonoff-si7021",
        "shopee": "https://shopee.com.br/search?keyword=am2301-si7021-sonoff",
        "amazon": "https://www.amazon.com.br/s?k=am2301+si7021+sensor"
      }
    }
  ],
  "pinout_models": {
    "pi_zero_w_40pin": {
      "name": "Raspberry Pi 40-Pin Header",
      "rows": [
        { "pin_odd": 1, "name_odd": "3V3 Power", "type_odd": "pwr", "pin_even": 2, "name_even": "5V Power", "type_even": "pwr" },
        { "pin_odd": 3, "name_odd": "GPIO 2 (I2C SDA)", "type_odd": "i2c", "pin_even": 4, "name_even": "5V Power", "type_even": "pwr" },
        { "pin_odd": 5, "name_odd": "GPIO 3 (I2C SCL)", "type_odd": "i2c", "pin_even": 6, "name_even": "GND (Terra)", "type_even": "gnd" },
        { "pin_odd": 7, "name_odd": "GPIO 4 (1-Wire)", "type_odd": "w1", "pin_even": 8, "name_even": "GPIO 14 (UART TX)", "type_even": "uart" },
        { "pin_odd": 9, "name_odd": "GND (Terra)", "type_odd": "gnd", "pin_even": 10, "name_even": "GPIO 15 (UART RX)", "type_even": "uart" },
        { "pin_odd": 11, "name_odd": "GPIO 17", "type_odd": "gpio", "pin_even": 12, "name_even": "GPIO 18 (PWM0)", "type_even": "gpio" },
        { "pin_odd": 13, "name_odd": "GPIO 27", "type_odd": "gpio", "pin_even": 14, "name_even": "GND (Terra)", "type_even": "gnd" },
        { "pin_odd": 15, "name_odd": "GPIO 22", "type_odd": "gpio", "pin_even": 16, "name_even": "GPIO 23", "type_even": "gpio" },
        { "pin_odd": 17, "name_odd": "3V3 Power", "type_odd": "pwr", "pin_even": 18, "name_even": "GPIO 24", "type_even": "gpio" },
        { "pin_odd": 19, "name_odd": "GPIO 10 (SPI MOSI)", "type_odd": "spi", "pin_even": 20, "name_even": "GND (Terra)", "type_even": "gnd" },
        { "pin_odd": 21, "name_odd": "GPIO 9 (SPI MISO)", "type_odd": "spi", "pin_even": 22, "name_even": "GPIO 25", "type_even": "gpio" },
        { "pin_odd": 23, "name_odd": "GPIO 11 (SPI SCLK)", "type_odd": "spi", "pin_even": 24, "name_even": "GPIO 8 (SPI CE0)", "type_even": "spi" },
        { "pin_odd": 25, "name_odd": "GND (Terra)", "type_odd": "gnd", "pin_even": 26, "name_even": "GPIO 7 (SPI CE1)", "type_even": "spi" },
        { "pin_odd": 27, "name_odd": "ID_SD (EEPROM)", "type_odd": "sys", "pin_even": 28, "name_even": "ID_SC (EEPROM)", "type_even": "sys" },
        { "pin_odd": 29, "name_odd": "GPIO 5", "type_odd": "gpio", "pin_even": 30, "name_even": "GND (Terra)", "type_even": "gnd" },
        { "pin_odd": 31, "name_odd": "GPIO 6", "type_odd": "gpio", "pin_even": 32, "name_even": "GPIO 12 (PWM0)", "type_even": "gpio" },
        { "pin_odd": 33, "name_odd": "GPIO 13 (PWM1)", "type_odd": "gpio", "pin_even": 34, "name_even": "GND (Terra)", "type_even": "gnd" },
        { "pin_odd": 35, "name_odd": "GPIO 19 (SPI MISO)", "type_odd": "spi", "pin_even": 36, "name_even": "GPIO 16", "type_even": "gpio" },
        { "pin_odd": 37, "name_odd": "GPIO 26", "type_odd": "gpio", "pin_even": 38, "name_even": "GPIO 20", "type_even": "gpio" },
        { "pin_odd": 39, "name_odd": "GND (Terra)", "type_odd": "gnd", "pin_even": 40, "name_even": "GPIO 21", "type_even": "gpio" }
      ]
    },
    "esp32_cyd_ports": {
      "name": "ESP32 CYD (2432S028) Conectores de Expansão",
      "connectors": [
        {
          "name": "Conector CN1 (JST-1.25 4P)",
          "pins": [
            { "pin": 1, "label": "GND", "role": "Terra" },
            { "pin": 2, "label": "GPIO 22", "role": "I²C SDA / Serial TX" },
            { "pin": 3, "label": "GPIO 27", "role": "I²C SCL / Serial RX" },
            { "pin": 4, "label": "VCC 3.3V", "role": "Alimentação 3.3V" }
          ]
        },
        {
          "name": "Conector P3 (JST-1.25 4P)",
          "pins": [
            { "pin": 1, "label": "GND", "role": "Terra" },
            { "pin": 2, "label": "GPIO 35", "role": "ADC Entrada Analógica" },
            { "pin": 3, "label": "GPIO 21", "role": "TFT Backlight PWM" },
            { "pin": 4, "label": "VCC 3.3V", "role": "Alimentação 3.3V" }
          ]
        },
        {
          "name": "Conector P1 (JST-1.25 4P - Alto-Falante)",
          "pins": [
            { "pin": 1, "label": "SPK+", "role": "Saída Positiva Amplificador" },
            { "pin": 2, "label": "SPK-", "role": "Saída Negativa Amplificador" }
          ]
        }
      ]
    },
    "cardputer_grove": {
      "name": "M5Stack Cardputer Port A (Grove)",
      "pins": [
        { "pin": 1, "color": "yellow", "label": "G1 (GPIO 1)", "role": "SDA / UART TX / ADC / Digital" },
        { "pin": 2, "color": "white", "label": "G2 (GPIO 2)", "role": "SCL / UART RX / ADC / Digital" },
        { "pin": 3, "color": "red", "label": "5V OUT", "role": "Alimentação 5V direta da Bateria/USB" },
        { "pin": 4, "color": "black", "label": "GND", "role": "Terra Comum GND" }
      ]
    }
  }
}
