"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
} 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 o nível de segurança criptográfica exigido pelo produto?",
description: "Aceleradores criptográficos no silício executam AES, SHA, RSA e curvas elípticas em hardware, viabilizando Secure Boot, criptografia de flash e provisionamento seguro de chaves sem penalizar a CPU.",
options: [
{ value: "critical", label: "Crítico (Matter, pagamentos, provisionamento seguro de chaves)", icon: "security_critical" },
{ value: "standard", label: "Padrão (TLS comum e projetos sem requisitos regulatórios)", icon: "security_standard" },
]
}
];
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)
if (answers.security === "critical") {
const cripto = serie.aceleradores_cripto || "";
if (cripto.includes("Key Manager")) {
scores[key] += 30;
reasons[key].push("Suíte criptográfica completa em hardware com Key Manager (provisionamento e uso de chaves sem exposição ao firmware)");
} else if (cripto.includes("ECDSA")) {
scores[key] += 20;
reasons[key].push("Aceleradores criptográficos com ECC/ECDSA dedicados (assinatura digital e Secure Boot eficientes)");
} else if (cripto) {
scores[key] += 10;
reasons[key].push("Aceleradores criptográficos básicos em hardware (AES, SHA, Secure Boot e criptografia de flash)");
} else {
scores[key] -= 20;
reasons[key].push("Sem aceleração criptográfica dedicada: operações de segurança ficam a cargo da CPU");
}
} else if (answers.security === "standard") {
scores[key] += 5;
}
});
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
+{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**.