import Link from "next/link"; import Image from "next/image"; import Header from "@/components/Header"; import Footer from "@/components/Footer"; import { notFound } from "next/navigation"; import seriesData from "@/public/series.json"; import ConnectionsDiagram from "@/components/ConnectionsDiagram"; import SeriesTabMenu from "@/components/SeriesTabMenu"; import { Cpu, Activity, Database, Wifi, Bluetooth, Battery, Sparkles, Home, ArrowRight, ArrowLeft, ExternalLink, Scale, FileText, Code, BookOpen, AlertTriangle, Moon, Plug, Compass, Sliders, MapPin, Volume2, Fingerprint, MessageSquare, Repeat, Share2, Music, Clock, HardDrive, Folder, Thermometer, ChevronRight, Lightbulb, ShieldCheck, KeyRound } from "lucide-react"; export default async function SerieDetail({ params }) { const { key } = await params; const serie = seriesData[key]; if (!serie) { notFound(); } let conexoes = []; try { conexoes = require(`@/public/conexoes/${key}.json`); } catch (error) { console.log(`Arquivo de conexões não encontrado para ${key}`); } const seriesKeys = Object.keys(seriesData); const currentIndex = seriesKeys.indexOf(key); const previousKey = currentIndex > 0 ? seriesKeys[currentIndex - 1] : null; const nextKey = currentIndex < seriesKeys.length - 1 ? seriesKeys[currentIndex + 1] : null; const processadorSpecs = [ { label: "Arquitetura", value: serie.arquitetura, icon: }, { label: "Núcleos", value: serie.nucleos, icon: }, { label: "Frequência", value: serie.frequencia, icon: }, { label: "Coprocessador ULP", value: serie.coprocessador_ulp || "Não", icon: }, { label: "Aceleradores IA", value: serie.aceleradores_ia || "Não", icon: }, ]; const segurancaSpecs = [ { label: "Aceleradores Criptográficos", value: serie.aceleradores_cripto || "Não", icon: }, { label: "Gerador de Números Aleatórios", value: serie.aceleradores_cripto ? "Sim (RNG por hardware)" : "Não", icon: }, ]; const conectividadeSpecs = [ { label: "Wi-Fi", value: serie.wifi || "Não", icon: }, { label: "Bluetooth", value: serie.bluetooth || "Não", icon: }, { label: "Zigbee/Thread", value: serie.zigbee_thread || "Não", icon: }, { label: "Matter", value: serie.matter || "Não", icon: }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || "Não", icon: }, { label: "CAN", value: serie.can || "Não", icon: }, ]; const memoriaSpecs = [ { label: "SRAM", value: serie.memoria_sram, icon: }, { label: "SRAM RTC", value: serie.memoria_sram_rtc, icon: }, { label: "ROM", value: serie.memoria_rom, icon: }, { label: "Flash Externa", value: serie.flash_externa, icon: }, { label: "PSRAM Externa", value: serie.psram_externa || "Não", icon: }, ]; const perifericos = [ { label: "GPIO", value: serie.gpio, icon: }, { label: "ADC", value: serie.adc, icon: }, { label: "DAC", value: serie.dac || "Não", icon: }, { label: "Touch", value: serie.touch || "Não", icon: }, { label: "UART", value: serie.uart, icon: }, { label: "SPI", value: serie.spi, icon: }, { label: "I2C", value: serie.i2c, icon: }, { label: "I2S", value: serie.i2s, icon: }, { label: "PWM", value: serie.pwm, icon: }, { label: "USB", value: serie.usb || "Não", icon: }, ]; const interfacesEspeciais = []; if (serie.lcd) interfacesEspeciais.push({ label: "LCD", value: serie.lcd, icon: }); if (serie.camera) interfacesEspeciais.push({ label: "Câmera", value: serie.camera, icon: }); if (serie.mipi_csi) interfacesEspeciais.push({ label: "MIPI CSI", value: serie.mipi_csi, icon: }); if (serie.mipi_dsi) interfacesEspeciais.push({ label: "MIPI DSI", value: serie.mipi_dsi, icon: }); if (serie.sdio) interfacesEspeciais.push({ label: "SDIO", value: serie.sdio, icon: }); if (serie.sensor_hall) interfacesEspeciais.push({ label: "Sensor Hall", value: serie.sensor_hall, icon: }); if (serie.sensor_temperatura) interfacesEspeciais.push({ label: "Sensor Temperatura", value: serie.sensor_temperatura, icon: }); // Consumo de Energia const consumoEnergia = []; if (serie.consumo_energia) { Object.entries(serie.consumo_energia).forEach(([modo, consumo]) => { const modoLabels = { 'active': 'Modo Ativo', 'active_cpu_240mhz': 'Ativo (CPU 240MHz)', 'active_cpu_160mhz': 'Ativo (CPU 160MHz)', 'active_wifi_tx': 'Ativo (Wi-Fi TX)', 'active_wifi_tx_peak': 'Ativo (Wi-Fi TX Pico)', 'active_wifi': 'Ativo (Wi-Fi)', 'active_wifi6': 'Ativo (Wi-Fi 6)', 'modem_sleep': 'Modem Sleep', 'modem_sleep_cpu_160mhz': 'Modem Sleep (CPU 160MHz)', 'light_sleep': 'Light Sleep', 'deep_sleep': 'Deep Sleep', 'hibernation': 'Hibernação' }; consumoEnergia.push({ label: modoLabels[modo] || modo.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()), value: consumo, icon: }); }); } const tabs = [ { id: 'devboard', label: 'Placa de Desenvolvimento', available: serie.placa, content: (

Kit de Desenvolvimento Oficial

{`${key}

Placa de desenvolvimento padrão da Espressif Systems para a série {key}

) }, { id: 'connections', label: 'Diagrama de Conexões', available: conexoes.length > 0, content: (

Diagrama do SoC (System on Chip)

Este mapa refere-se exclusivamente às portas e conexões do silício bruto do microcontrolador {key}. As placas de desenvolvimento podem expor apenas uma parcela destas conexões, ou roteá-las de formas diferentes dependendo do circuito impresso.

Flexibilidade das Portas GPIO

O {key} integra uma matriz IO multiplexada e de baixa latência (IO MUX) que permite reconfigurar a grande maioria dos pinos digitais para assumir funções de SPI, I2C, UART, LEDC PWM ou barramentos de câmera e display. Para mais detalhes sobre as restrições físicas de GPIOs strapping ou analógicas, consulte o  Guia Oficial de GPIO .

) } ]; return (
{/* Breadcrumb Navigation */}
Voltar para Séries {/* Top Info Banner Card */}
{serie.icone}

{key}

{serie.nome_completo}

{serie.arquitetura}
{/* Links Block */}
{serie.datasheet ? ( Datasheet Oficial ) : ( Datasheet ainda não publicado )} Guia de Programação {serie.manual_tecnico && ( Manual Técnico )}

{serie.descricao}

{serie.status_documentacao && (

Documentação preliminar

{serie.status_documentacao}

)}
{/* Primary Features Highlight Grid */}

PROCESSADOR

{serie.nucleos.includes("2") ? "Dual-Core" : "Single-Core"}

{serie.frequencia}

MEMÓRIA SRAM

{serie.memoria_sram}

+ {serie.memoria_sram_rtc} RTC SRAM

GPIO DISPONÍVEIS

{serie.gpio}

Pinos I/O programáveis

{/* DevBoard and Connections Tabs */} {/* Specs List Cards */}
} /> } /> } /> } /> {/* Power Consumption section */} {consumoEnergia.length > 0 && (

Consumo de Energia

Especificações típicas medidas sob 3.3V com 25°C de temperatura ambiente. O consumo absoluto depende ativamente do ciclo de trabalho (duty cycle) das interfaces Wi-Fi/Bluetooth e da frequência de clock configurada via software.

{consumoEnergia.map((spec, index) => (
{spec.icon}

{spec.label}

{spec.value}

))}
)} } /> {interfacesEspeciais.length > 0 && ( } /> )} } specs={[ { label: "Operação", value: serie.temperatura_operacao, icon: }, { label: "Armazenamento", value: serie.temperatura_armazenamento, icon: }, ]} cor={serie.cor} />
{/* DevBoard CTA Panel */}
Hardware Fisico

Pronto para começar a prototipar?

Explore toda a nossa grade de placas de desenvolvimento de parceiros oficiais para a série {key}. Compare dimensões, conversores USB-serial e pinagens prontas para protoboards.

Ver Placas Disponíveis
{/* Previous / Next Nav bars */}
{previousKey ? (

Anterior

{previousKey}

) : (
)} Comparar Séries {nextKey ? (

Próximo

{nextKey}

) : (
)}
); } function SpecSection({ title, specs, cor, icon }) { return (

{icon} {title}

{specs.map((spec, index) => (
{spec.icon}

{spec.label}

{spec.value}

))}
); } export async function generateMetadata({ params }) { const { key } = await params; const serie = seriesData[key]; if (!serie) { return { title: "Série não encontrada", }; } return { title: `ESPDocs - ${serie.nome_completo}`, description: serie.descricao, }; } export async function generateStaticParams() { return Object.keys(seriesData).map((key) => ({ key: key, })); }