"use client"; import { useState } from "react"; import Header from "@/components/Header"; import Footer from "@/components/Footer"; import Link from "next/link"; import seriesData from "@/public/series.json"; import { Wifi, Bluetooth, Network, Cpu, Bot, Monitor, Camera, Home as HomeIcon, Sliders, Cable, Battery, Zap, Ban, ChevronLeft, ChevronRight, RotateCcw, Sparkles, Edit2, CheckCircle, HelpCircle, Award, SlidersHorizontal, ExternalLink, ShoppingBag, BookOpen, Compass, Smartphone, ShieldCheck, KeyRound, Lock } from "lucide-react"; // Dynamic icon mapper to convert choices to sleek Lucide vectors const iconMap = { // Categoria "category_wearable": , "category_smarthome": , "category_multimedia": , "category_industrial": , // Conectividade "connectivity_wifi-ble": , "connectivity_mesh": , "connectivity_ethernet": , "connectivity_none": , // Alimentacao "power_battery": , "power_always-on": , // Hardware "hardware_display-camera": (
), "hardware_usb-native": , "hardware_many-gpios": , "hardware_basic": , // IA "ai_ai-ml": , "ai_standard": , // Segurança "security_critical": , "security_standard": , }; const getOptionIcon = (questionId, value) => { const key = `${questionId}_${value}`; return iconMap[key] || ; }; export default function Seletor() { const [currentStep, setCurrentStep] = useState(0); const [currentAnswer, setCurrentAnswer] = useState(null); const [answers, setAnswers] = useState({ category: null, connectivity: null, power: null, hardware: null, ai: null, security: null, }); const [showResults, setShowResults] = useState(false); const [showSummary, setShowSummary] = useState(false); const questions = [ { id: "category", question: "Qual é o foco principal ou aplicação do seu projeto?", description: "Categorizar seu projeto nos ajuda a equilibrar fatores de tamanho físico, consumo de energia e poder computacional do chip.", options: [ { value: "wearable", label: "Dispositivo Portátil ou Vestível (Wearable)", icon: "category_wearable" }, { value: "smarthome", label: "Automação / Smart Home / IoT Conectado", icon: "category_smarthome" }, { value: "multimedia", label: "Interface Multimídia (Telas / Câmeras / HMI)", icon: "category_multimedia" }, { value: "industrial", label: "Industrial / Robótica / Alto Desempenho", icon: "category_industrial" }, ] }, { id: "connectivity", question: "Qual tecnologia de rede sem fio (RF) você precisa?", description: "O ecossistema ESP32 oferece desde rádios Wi-Fi tradicionais até controladores industriais cabeados ou rádio Mesh 802.15.4.", options: [ { value: "wifi-ble", label: "Wi-Fi + Bluetooth BLE (IoT Tradicional)", icon: "connectivity_wifi-ble" }, { value: "mesh", label: "Matter / Zigbee / Thread (Redes Mesh)", icon: "connectivity_mesh" }, { value: "ethernet", label: "Rede Cabeada Industrial (Ethernet)", icon: "connectivity_ethernet" }, { value: "none", label: "Apenas Local / Sem Conexão Sem Fio", icon: "connectivity_none" }, ] }, { id: "power", question: "Como o dispositivo será alimentado eletricamente?", description: "A escolha da fonte de energia determina a importância de blocos internos de silício de consumo ultra-baixo (Deep Sleep).", options: [ { value: "battery", label: "Bateria ou Painel Solar (Consumo Ultra-Baixo)", icon: "power_battery" }, { value: "always-on", label: "Tomada, Fonte Externa ou USB (Sempre Ativo)", icon: "power_always-on" }, ] }, { id: "hardware", question: "Quais periféricos físicos ou barramentos serão conectados?", description: "Determinados módulos requerem interfaces dedicadas no silício, como barramento LCD, USB nativo ou alta quantidade de GPIOs.", options: [ { value: "display-camera", label: "Displays Gráficos LCD ou Câmeras", icon: "hardware_display-camera" }, { value: "usb-native", label: "Conexão USB Nativa (Emular Teclado/Disco)", icon: "hardware_usb-native" }, { value: "many-gpios", label: "Muitos Atuadores / Pinos (Mais de 30 GPIOs)", icon: "hardware_many-gpios" }, { value: "basic", label: "Básico (Poucos sensores com I2C, SPI ou UART)", icon: "hardware_basic" }, ] }, { id: "ai", question: "Seu projeto usará Inteligência Artificial local (Edge AI)?", description: "Aceleração por hardware permite rodar redes neurais, reconhecimento de voz ou visão computacional na borda em milissegundos.", options: [ { value: "ai-ml", label: "Sim, preciso rodar modelos de IA localmente", icon: "ai_ai-ml" }, { value: "standard", label: "Não, processamento lógico comum é suficiente", icon: "ai_standard" }, ] }, { id: "security", question: "Qual requisito de segurança o produto precisa atender?", description: "As séries diferem bastante aqui: nem todas têm curvas elípticas (ECC), ECDSA em hardware ou Key Manager, e duas delas sequer têm acelerador AES. Escolha o requisito mais forte do seu projeto.", options: [ { value: "matter", label: "Atestado de dispositivo para Matter ou assinatura digital (ECDSA)", icon: "security_matter" }, { value: "chaves", label: "Chave privada que nunca pode ser lida pelo firmware (Key Manager)", icon: "security_chaves" }, { value: "boot", label: "Boot seguro e flash criptografada contra cópia do firmware", icon: "security_boot" }, { value: "tls", label: "Só TLS/HTTPS comum, sem requisito regulatório", icon: "security_tls" }, ] } ]; const handleAnswer = (questionId, value) => { setCurrentAnswer(value); setAnswers({ ...answers, [questionId]: value }); }; const handleNext = () => { if (currentAnswer !== null) { if (currentStep < questions.length - 1) { setCurrentStep(currentStep + 1); setCurrentAnswer(answers[questions[currentStep + 1].id] || null); } else { setShowSummary(true); } } }; const resetQuiz = () => { setCurrentStep(0); setCurrentAnswer(null); setShowResults(false); setShowSummary(false); setAnswers({ category: null, connectivity: null, power: null, hardware: null, ai: null, security: null, }); }; const goBack = () => { if (currentStep > 0) { setCurrentStep(currentStep - 1); setCurrentAnswer(answers[questions[currentStep - 1].id] || null); } }; const calculateRecommendations = () => { const scores = {}; const reasons = {}; Object.keys(seriesData).forEach(key => { scores[key] = 0; reasons[key] = []; const serie = seriesData[key]; // 1. CATEGORIA DO PROJETO (category) if (answers.category === "wearable") { if (serie.bluetooth !== "Não") { scores[key] += 10; reasons[key].push("Suporte de rádio Bluetooth de alta eficiência para pareamento"); } const sleep = serie.consumo_energia?.deep_sleep; if (sleep) { const uaMatch = sleep.match(/(\d+)\s*µA/); if (uaMatch && parseInt(uaMatch[1]) <= 10) { scores[key] += 15; reasons[key].push(`Modo standby ultra-eficiente (${sleep}) conserva baterias comerciais`); } } if (key === "ESP32-C2" || key === "ESP32-C3") { scores[key] += 6; reasons[key].push("Footprint de tamanho reduzido ideal para dispositivos ultra-compactos"); } } else if (answers.category === "smarthome") { if (serie.wifi && !String(serie.wifi).includes("Não")) { scores[key] += 10; reasons[key].push("Cadeia RF Wi-Fi robusta integrada para integração residencial"); } if (serie.matter === "Sim") { scores[key] += 15; reasons[key].push("Suporte oficial a Matter para alta interoperabilidade inteligente"); } } else if (answers.category === "multimedia") { if (serie.lcd || serie.mipi_dsi) { scores[key] += 15; reasons[key].push("Barramentos dedicados no silício para controle de telas coloridas"); } if (serie.camera || serie.mipi_csi) { scores[key] += 15; reasons[key].push("Linhas dedicadas para conexão de câmeras de vídeo"); } if (serie.psram_externa && serie.psram_externa !== "Não") { scores[key] += 10; reasons[key].push("Suporte a PSRAM externa de alta densidade para buffers e quadros"); } } else if (answers.category === "industrial") { if (serie.nucleos.includes("2")) { scores[key] += 12; reasons[key].push("Arquitetura Dual-Core ideal para loops síncronos e processamento paralelo"); } if (parseInt(serie.gpio) >= 30) { scores[key] += 10; reasons[key].push(`Grande número de portas digitais (${serie.gpio} GPIOs)`); } if (serie.aceleradores_ia) { scores[key] += 10; reasons[key].push("Acelerador neural de silício ideal para controle de feedback preditivo"); } } // 2. CONECTIVIDADE SEM FIO (connectivity) if (answers.connectivity === "wifi-ble") { if (serie.wifi && !String(serie.wifi).includes("Não") && serie.bluetooth !== "Não") { scores[key] += 20; reasons[key].push(`Conexão de rádio integrada Wi-Fi (${serie.wifi}) e Bluetooth (${serie.bluetooth})`); } else if (serie.wifi && !String(serie.wifi).includes("Não")) { scores[key] += 8; reasons[key].push("Possui conexão Wi-Fi ativa, mas carece de Bluetooth"); } else { scores[key] -= 80; reasons[key].push("Incompatível: Necessita de rádio Wi-Fi ou Bluetooth"); } } else if (answers.connectivity === "mesh") { if (serie.matter === "Sim") { scores[key] += 25; reasons[key].push("Rádio 802.15.4 integrado de alto alcance para barramentos Mesh (Zigbee/Thread)"); } else { scores[key] -= 15; reasons[key].push("Sem rádio mesh 802.15.4 integrado no chip"); } } else if (answers.connectivity === "ethernet") { if (serie.ethernet === "Sim" || serie.ethernet_mac === "Sim") { scores[key] += 25; reasons[key].push("Controlador MAC Ethernet cabeado para conexões imunes a ruídos RF"); } else { scores[key] -= 10; reasons[key].push("Requer shield ou controlador externo para conexão de rede cabeada"); } } else if (answers.connectivity === "none") { if (serie.wifi === "Não" || serie.bluetooth === "Não" || key === "ESP32-H2" || key === "ESP32-C2") { scores[key] += 15; reasons[key].push("Microcontrolador focado em baixo custo e alta eficiência para circuitos locais"); } else { scores[key] += 5; } } // 3. FONTE DE ALIMENTAÇÃO & CONSUMO (power) if (answers.power === "battery") { const sleep = serie.consumo_energia?.deep_sleep; if (sleep) { const uaMatch = sleep.match(/(\d+)\s*µA/); if (uaMatch && parseInt(uaMatch[1]) <= 10) { scores[key] += 20; reasons[key].push(`Standby em Deep Sleep de apenas ${sleep} maximiza fontes recarregáveis`); } else { scores[key] += 10; reasons[key].push(`Gerenciamento térmico e modo de suspensão em ${sleep}`); } } else { scores[key] -= 10; reasons[key].push("Standby de energia menos otimizado para longos ciclos de bateria"); } } else if (answers.power === "always-on") { if (serie.nucleos.includes("2")) { scores[key] += 10; reasons[key].push("Desempenho multitarefa constante garantido por núcleos redundantes"); } if (parseInt(serie.frequencia) >= 240) { scores[key] += 10; reasons[key].push(`Velocidade de cálculo mantida em clock máximo de ${serie.frequencia}`); } } // 4. INTERFACE E PERIFÉRICOS (hardware) if (answers.hardware === "display-camera") { if ((serie.lcd || serie.mipi_dsi) && (serie.camera || serie.mipi_csi)) { scores[key] += 25; reasons[key].push("Possui barramento flexível LCD e câmera digital rodando simultaneamente"); } else if (serie.lcd || serie.mipi_dsi || serie.camera || serie.mipi_csi) { scores[key] += 15; reasons[key].push("Suporte para telas gráficas ou interfaces de captura de imagem"); } else { scores[key] -= 50; reasons[key].push("Incompatível: Sem barramentos físicos dedicados para telas e câmeras"); } } else if (answers.hardware === "usb-native") { if (serie.usb && serie.usb !== "Não") { scores[key] += 25; reasons[key].push(`Interface física USB OTG integrada (${serie.usb}) para depuração direta`); } else { scores[key] -= 35; reasons[key].push("Incompatível: Requer depurador USB-Serial de placa externa"); } } else if (answers.hardware === "many-gpios") { const gpios = parseInt(serie.gpio); if (gpios >= 35) { scores[key] += 20; reasons[key].push(`Grade extensiva de portas de expansão com ${gpios} pinos GPIO livres`); } else if (gpios >= 22) { scores[key] += 10; reasons[key].push(`Portas GPIO moderadas (${gpios} pinos)`); } else { scores[key] -= 20; reasons[key].push(`Grade de pinagem física restrita (${gpios} GPIOs)`); } } else if (answers.hardware === "basic") { scores[key] += 10; } // 5. INTELIGÊNCIA ARTIFICIAL (ai) if (answers.ai === "ai-ml") { if (serie.aceleradores_ia) { scores[key] += 30; reasons[key].push("Acelerador vetorial neural de silício dedicado (inferências Edge AI ultra-rápidas)"); } else { scores[key] -= 25; reasons[key].push("Desempenho de IA limitado por falta de aceleração nativa em hardware"); } } else if (answers.ai === "standard") { scores[key] += 5; } // 6. SEGURANÇA CRIPTOGRÁFICA (security) // Agora lê os campos destrinchados, então cada requisito pontua o // bloco de hardware que realmente o atende. const seg = serie.seguranca || {}; const temECDSA = String(seg.ecdsa).startsWith("Sim"); const temECC = String(seg.ecc).startsWith("Sim"); const temAES = String(seg.aes).startsWith("AES"); if (answers.security === "matter") { if (temECDSA) { scores[key] += 30; reasons[key].push(`ECDSA em hardware (${seg.ecc}) — atestado de dispositivo Matter assinado sem custo de CPU`); } else if (temECC) { scores[key] += 10; reasons[key].push(`Tem ECC (${seg.ecc}) mas não o periférico ECDSA: a assinatura roda parcialmente em software`); } else { scores[key] -= 25; reasons[key].push("Sem curvas elípticas em hardware: assinatura ECDSA inteiramente por software, lenta no provisionamento"); } } else if (answers.security === "chaves") { if (seg.key_manager === "Sim") { scores[key] += 30; reasons[key].push("Key Manager: a chave é provisionada e usada sem nunca ficar legível para o firmware"); } else if (seg.assinatura_digital === "Sim") { scores[key] += 15; reasons[key].push("Periférico Digital Signature protege a chave RSA via eFuse, mas sem Key Manager para as demais"); } else { scores[key] -= 20; reasons[key].push("Sem Key Manager nem Digital Signature: a chave privada fica exposta na memória do firmware"); } } else if (answers.security === "boot") { if (String(seg.secure_boot).includes("V2")) { scores[key] += 20; reasons[key].push(`Secure Boot ${seg.secure_boot} com criptografia de flash ${seg.criptografia_flash}`); } else if (String(seg.secure_boot).includes("V1")) { scores[key] += 5; reasons[key].push("Secure Boot apenas na versão V1 (legada), sem as proteções do esquema V2"); } else { scores[key] -= 20; reasons[key].push(`Secure Boot indisponível: ${seg.secure_boot}`); } } else if (answers.security === "tls") { if (temAES) { scores[key] += 10; reasons[key].push(`Handshake e tráfego TLS acelerados por hardware (${seg.aes}, ${seg.sha})`); } else { scores[key] -= 10; reasons[key].push(`Sem acelerador AES (só ${seg.sha}): o tráfego TLS é cifrado pela CPU e pesa no desempenho`); } } }); return { scores, reasons }; }; const { scores: allScores, reasons: allReasons } = (showResults && Object.values(answers).every(a => a !== null)) ? calculateRecommendations() : { scores: {}, reasons: {} }; const recommendations = Object.entries(allScores) .filter(([_, score]) => score > 0) .sort(([, a], [, b]) => b - a); // Rearrange podium for premium visual styling: 2nd Place | 1st Place | 3rd Place const getPodiumOrder = (topThree) => { if (topThree.length < 2) return topThree; if (topThree.length === 2) return [topThree[1], topThree[0]]; return [topThree[1], topThree[0], topThree[2]]; }; const topThree = recommendations.slice(0, 3); const desktopPodium = getPodiumOrder(topThree); const otherRecommendations = recommendations.slice(3); const progress = ((currentStep + 1) / questions.length) * 100; return (
{/* Top Header Section */}
🎯 Seletor IoT Inteligente

Seletor Inteligente ESP32

Responda a **6 perguntas simples** sobre o propósito, conexões de hardware, alimentação e segurança do seu projeto e encontre instantaneamente o silício Espressif perfeito para sua bancada.

{/* Wizard Progress Bar */} {!showResults && !showSummary && (
Etapa {currentStep + 1} de {questions.length} {Math.round(progress)}% Concluído
)} {/* STEP 1: Quiz Card Interface */} {currentStep < questions.length && !showResults && !showSummary && (

{questions[currentStep].question}

{questions[currentStep].description}

{questions[currentStep].options.map((option) => { const isSelected = currentAnswer === option.value; return ( ); })}
{/* Bottom Navigation Buttons */}
)} {/* STEP 2: Choice Summary */} {showSummary && !showResults && (

Resumo das suas Configurações

Revise suas escolhas de arquitetura abaixo. Você pode ajustar qualquer especificação individual antes de processar as recomendações.

{/* Double Column summary cards */}
{questions.map((question) => { const answer = answers[question.id]; const selectedOption = question.options.find(opt => opt.value === answer); return (

{question.id.replace('connectivity', 'conectividade').replace('hardware', 'periféricos').replace('power', 'alimentação').toUpperCase()}

{selectedOption && (
{getOptionIcon(question.id, answer)}
{selectedOption.label}
)}
); })}
)} {/* STEP 3: Premium Podium & Results */} {showResults && recommendations.length > 0 && (
{/* Desktop Podium Layout */}
{desktopPodium.map((recommendation) => { const [seriesKey, score] = recommendation; const serie = seriesData[seriesKey]; const matchReasons = allReasons[seriesKey] || []; const rankIdx = topThree.findIndex(([key]) => key === seriesKey); const rankConfig = [ { badge: "🥇 1º Recomendado", cardClass: "border-amber-500/80 dark:border-amber-400 bg-linear-to-b from-amber-500/5 to-transparent shadow-[0_0_40px_rgba(245,158,11,0.25)] min-h-[580px] z-10 scale-[1.03]", badgeClass: "text-amber-700 bg-amber-500/10 border-amber-500/20 dark:text-amber-400 dark:bg-amber-500/10", scoreClass: "text-amber-600 dark:text-amber-400" }, { badge: "🥈 2º Recomendado", cardClass: "border-slate-300 dark:border-slate-800 bg-linear-to-b from-slate-500/5 to-transparent min-h-[540px] opacity-95 hover:opacity-100", badgeClass: "text-slate-650 bg-slate-500/10 border-slate-500/20 dark:text-slate-350 dark:bg-slate-850", scoreClass: "text-slate-500 dark:text-slate-300" }, { badge: "🥉 3º Recomendado", cardClass: "border-amber-800/40 dark:border-slate-850/80 bg-linear-to-b from-amber-800/5 to-transparent min-h-[540px] opacity-95 hover:opacity-100", badgeClass: "text-amber-800 bg-amber-800/10 border-amber-800/20 dark:text-amber-450 dark:bg-slate-850", scoreClass: "text-amber-700 dark:text-amber-500" } ][rankIdx]; return (
{/* Top Color Band */}
{rankConfig.badge}
{serie.icone}

{seriesKey}

{serie.nome_completo}

Afinidade: {score} pts
{/* Specifications Checklist */}

Principais Vantagens

    {matchReasons.slice(0, 3).map((reason, idx) => (
  • {reason}
  • ))} {matchReasons.length > 3 && (
  • +{matchReasons.length - 3} outros requisitos atendidos
  • )}
{/* Spec Mini Badges */}
Frequência {serie.frequencia}
GPIOs Físicas {serie.gpio} pinos
{/* Ver Documentação CTA Button */}
Ver Documentação
); })}
{/* Stacked Layout for mobile */}

Grade de Resultados

{topThree.map(([seriesKey, score], index) => { const serie = seriesData[seriesKey]; const matchReasons = allReasons[seriesKey] || []; const mobileBadges = ["🥇 1ª Recomendação", "🥈 2ª Recomendação", "🥉 3ª Recomendação"]; const isFirst = index === 0; return (
{mobileBadges[index]} Score: {score} pts
{serie.icone}

{seriesKey}

{serie.descricao}

{matchReasons.slice(0, 3).map((reason, idx) => (
{reason}
))}
Ver Detalhes do Chip
); })}
{/* Other options */} {otherRecommendations.length > 0 && (

Outras Opções Compatíveis

{otherRecommendations.map(([seriesKey, score]) => { const serie = seriesData[seriesKey]; return (
{serie.icone}

{seriesKey}

Afinidade: {score} pts
Ver Detalhes
); })}
)} {/* Bottom navigation buttons */}
Comparar Lado a Lado
{/* Secondary showcase tools */}

Próximos Passos de Desenvolvimento

Catálogo de Placas

Explore placas de desenvolvimento oficiais e módulos contendo o silício recomendado com links seguros de compra.

Explorar SDKs & Frameworks

Descubra qual SDK oficial da Espressif (ESP-IDF, Arduino Core, MicroPython) oferece a melhor pilha de drivers.

Glossário de Parâmetros

Ficou em dúvida sobre termos de hardware como ULP, SRAM RTC, JTAG ou Matter? Consulte definições rápidas de engenharia.

)} {/* STEP 3B: No Results Found */} {showResults && recommendations.length === 0 && (

Sem Correspondência Exata

Não foi possível encontrar um único microcontrolador ESP32 que atenda simultaneamente a todos os critérios. Isso ocorre quando requisitamos combinações extremas (ex: Ethernet industrial cabeada + BLE portátil com economia de bateria ultra-baixa).

💡 Dicas Rápidas de Seleção:

  • • Reconsidere os barramentos mais pesados (USB Nativo ou Display/Câmera) e veja se podem ser depurados via Serial UART comum.
  • • Se o foco principal for Inteligência Artificial e capturar imagens pesadas, a série recomendada primária é a **ESP32-S3**.
Ver Grade Completa
)}
); }