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 PinRestrictions from "@/components/PinRestrictions";
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,
Lock,
Hash,
Spline,
FileSignature,
Dices,
Waves,
Bug,
Box,
Package,
Terminal
} 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 seg = serie.seguranca || {};
const segurancaSpecs = [
{ label: "AES", value: seg.aes || "Não", icon: },
{ label: "SHA", value: seg.sha || "Não", icon: },
{ label: "RSA / MPI", value: seg.rsa || "Não", icon: },
{ label: "ECC (curvas elípticas)", value: seg.ecc || "Não", icon: },
{ label: "ECDSA em hardware", value: seg.ecdsa || "Não", icon: },
{ label: "HMAC", value: seg.hmac || "Não", icon: },
{ label: "Assinatura Digital (DS)", value: seg.assinatura_digital || "Não", icon: },
{ label: "Key Manager", value: seg.key_manager || "Não", icon: },
{ label: "Gerador aleatório (RNG)", value: seg.rng || "Não", icon: },
{ label: "Criptografia de flash", value: seg.criptografia_flash || "Não", icon: },
{ label: "Secure Boot", value: seg.secure_boot || "Não", icon: },
{ label: "Proteção contra DPA", value: seg.protecao_dpa || "Não", icon: },
];
const ferramentasSpecs = [
{ label: "ESP-IDF mínimo", value: serie.esp_idf_minimo || "—", icon: },
{ label: "Core Arduino", value: serie.arduino_core || "—", icon: },
{ label: "Depuração", value: serie.depuracao || "—", icon: },
{ label: "Encapsulamento", value: serie.encapsulamento || "—", icon: },
{ label: "Módulos disponíveis", value: serie.modulos || "—", 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
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.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 ? (
) : (
)}
Comparar Séries
{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,
}));
}