"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"; export default function Seletor() { const [currentStep, setCurrentStep] = useState(0); const [answers, setAnswers] = useState({ wifi: null, bluetooth: null, cores: null, ai: null, matter: null, gpio: null, usb: null, lowPower: null, }); const questions = [ { id: "wifi", question: "Seu projeto precisa de conectividade Wi-Fi?", description: "Wi-Fi permite conexão com internet e redes locais sem fio", options: [ { value: "required", label: "Sim, é essencial", icon: "📶" }, { value: "nice", label: "Seria útil, mas não é obrigatório", icon: "📡" }, { value: "no", label: "Não preciso", icon: "📵" }, ] }, { id: "bluetooth", question: "Seu projeto precisa de Bluetooth?", description: "Bluetooth permite comunicação com dispositivos móveis e periféricos", options: [ { value: "required", label: "Sim, é essencial", icon: "📱" }, { value: "nice", label: "Seria útil, mas não é obrigatório", icon: "🔵" }, { value: "no", label: "Não preciso", icon: "🚫" }, ] }, { id: "cores", question: "Quantos núcleos de processamento você precisa?", description: "Mais núcleos permitem executar tarefas em paralelo", options: [ { value: "dual", label: "Dual-core (2 núcleos)", icon: "⚡⚡" }, { value: "single", label: "Single-core (1 núcleo)", icon: "⚡" }, { value: "any", label: "Tanto faz", icon: "🤷" }, ] }, { id: "ai", question: "Precisa de recursos de IA/Machine Learning?", description: "Aceleradores de IA ajudam em reconhecimento de voz, imagem e visão computacional", options: [ { value: "yes", label: "Sim, vou usar IA", icon: "🤖" }, { value: "no", label: "Não preciso", icon: "🚫" }, ] }, { id: "matter", question: "Precisa de suporte a Matter, Zigbee ou Thread?", description: "Protocolos para casa inteligente e IoT de baixo consumo", options: [ { value: "yes", label: "Sim, preciso", icon: "🏠" }, { value: "no", label: "Não preciso", icon: "🚫" }, ] }, { id: "gpio", question: "Quantos pinos GPIO você precisa?", description: "GPIO permite conectar sensores, displays e outros componentes", options: [ { value: "many", label: "Muitos (35+)", icon: "🔌🔌🔌" }, { value: "medium", label: "Quantidade média (20-35)", icon: "🔌🔌" }, { value: "few", label: "Poucos (menos de 20)", icon: "🔌" }, ] }, { id: "usb", question: "Precisa de USB nativo?", description: "USB nativo facilita programação e comunicação sem adaptadores", options: [ { value: "yes", label: "Sim, preciso", icon: "🔌" }, { value: "nice", label: "Seria útil", icon: "💡" }, { value: "no", label: "Não preciso", icon: "🚫" }, ] }, { id: "lowPower", question: "Baixo consumo de energia é crítico?", description: "Importante para projetos com bateria ou painéis solares", options: [ { value: "critical", label: "Sim, é crítico", icon: "🔋" }, { value: "nice", label: "Seria bom", icon: "💡" }, { value: "no", label: "Não é prioridade", icon: "⚡" }, ] }, ]; const handleAnswer = (questionId, value) => { setAnswers({ ...answers, [questionId]: value }); if (currentStep < questions.length - 1) { setCurrentStep(currentStep + 1); } }; const resetQuiz = () => { setCurrentStep(0); setAnswers({ wifi: null, bluetooth: null, cores: null, ai: null, matter: null, gpio: null, usb: null, lowPower: null, }); }; const goBack = () => { if (currentStep > 0) { setCurrentStep(currentStep - 1); } }; const calculateRecommendations = () => { const scores = {}; Object.keys(seriesData).forEach(key => { scores[key] = 0; const serie = seriesData[key]; // Wi-Fi if (answers.wifi === "required" && serie.wifi && !String(serie.wifi).includes("Não")) { scores[key] += 10; } else if (answers.wifi === "no" && (!serie.wifi || String(serie.wifi).includes("Não"))) { scores[key] += 5; } else if (answers.wifi === "nice" && serie.wifi && !String(serie.wifi).includes("Não")) { scores[key] += 3; } else if (answers.wifi === "required" && (!serie.wifi || String(serie.wifi).includes("Não"))) { scores[key] -= 100; // Desqualifica } // Bluetooth if (answers.bluetooth === "required" && serie.bluetooth !== "Não") { scores[key] += 10; } else if (answers.bluetooth === "no" && serie.bluetooth === "Não") { scores[key] += 5; } else if (answers.bluetooth === "nice" && serie.bluetooth !== "Não") { scores[key] += 3; } else if (answers.bluetooth === "required" && serie.bluetooth === "Não") { scores[key] -= 100; // Desqualifica } // Núcleos if (answers.cores === "dual" && serie.nucleos.includes("2")) { scores[key] += 8; } else if (answers.cores === "single" && serie.nucleos.includes("1")) { scores[key] += 5; } else if (answers.cores === "dual" && !serie.nucleos.includes("2")) { scores[key] -= 5; } // IA if (answers.ai === "yes" && serie.aceleradores_ia) { scores[key] += 15; } else if (answers.ai === "yes" && !serie.aceleradores_ia) { scores[key] -= 10; } // Matter/Zigbee/Thread if (answers.matter === "yes" && serie.matter === "Sim") { scores[key] += 12; } else if (answers.matter === "yes" && serie.matter !== "Sim") { scores[key] -= 8; } // GPIO const gpioCount = parseInt(serie.gpio); if (answers.gpio === "many" && gpioCount >= 35) { scores[key] += 8; } else if (answers.gpio === "medium" && gpioCount >= 20 && gpioCount < 35) { scores[key] += 8; } else if (answers.gpio === "few" && gpioCount < 20) { scores[key] += 8; } else if (answers.gpio === "many" && gpioCount < 35) { scores[key] -= 5; } // USB if (answers.usb === "yes" && serie.usb && serie.usb !== "Não") { scores[key] += 10; } else if (answers.usb === "nice" && serie.usb && serie.usb !== "Não") { scores[key] += 5; } else if (answers.usb === "yes" && (!serie.usb || serie.usb === "Não")) { scores[key] -= 5; } // Baixo consumo if (answers.lowPower === "critical") { const deepSleep = serie.consumo_energia?.deep_sleep; if (deepSleep && (deepSleep.includes("µA") || deepSleep.includes("5 µA") || deepSleep.includes("7 µA"))) { scores[key] += 12; } } }); // Ordenar por pontuação const sortedSeries = Object.entries(scores) .filter(([_, score]) => score > 0) .sort(([, a], [, b]) => b - a) .slice(0, 3); return sortedSeries.map(([key]) => key); }; const recommendations = currentStep === questions.length - 1 && Object.values(answers).every(a => a !== null) ? calculateRecommendations() : []; const progress = ((currentStep + 1) / questions.length) * 100; return (
🎯 Ferramenta de Seleção Inteligente

Encontre seu ESP32 Ideal

Responda algumas perguntas sobre seu projeto e descubra qual série ESP32 é perfeita para você

{/* Progress Bar */}
Pergunta {currentStep + 1} de {questions.length} {Math.round(progress)}%
{/* Question Card */} {currentStep < questions.length && recommendations.length === 0 && (

{questions[currentStep].question}

{questions[currentStep].description}

{questions[currentStep].options.map((option) => ( ))}
{/* Navigation Buttons */}
)} {/* Results */} {recommendations.length > 0 && (
✨

Recomendações para seu Projeto

Baseado nas suas respostas, estas são as melhores opções de ESP32 para você:

{recommendations.map((seriesKey, index) => { const serie = seriesData[seriesKey]; const badges = ["🥇 Melhor Opção", "🥈 Segunda Opção", "🥉 Terceira Opção"]; return (
{badges[index]}
{serie.icone}

{seriesKey}

{serie.descricao}

Arquitetura: {serie.arquitetura.split(' ')[0]}
Núcleos: {serie.nucleos}
Frequência: {serie.frequencia}
SRAM: {serie.memoria_sram}
GPIO: {serie.gpio}
Ver Detalhes
); })}
📊 Comparar Recomendações
{/* Additional Resources */}

Próximos Passos

🛒

Ver Catálogo de Placas

Encontre placas de desenvolvimento verificadas

⚡

Explorar Frameworks

Conheça ESP-IDF, Arduino, MicroPython e mais

📚

Consultar Glossário

Entenda termos técnicos e especificações

)}
); }