import Header from "@/components/Header";
import Footer from "@/components/Footer";
import Link from "next/link";
import seriesData from "@/public/series.json";
import { notFound } from "next/navigation";
import ConnectionsDiagram from "@/components/ConnectionsDiagram";
import Image from "next/image";
import SeriesTabMenu from "@/components/SeriesTabMenu";
export default function SerieDetail({ params }) {
const { key } = 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}`);
}
// Development board image mapping
const devBoardImages = {
"ESP32": "/placas/esp32.png",
"ESP32-S2": "/placas/esp32-s2.png",
"ESP32-S3": "/placas/esp32-s3.png",
"ESP32-C3": "/placas/esp32-c3.png",
"ESP32-C5": "/placas/esp32-c5.png",
"ESP32-C6": "/placas/esp32-c6.png",
"ESP32-H2": "/placas/esp32-h2.png",
"ESP32-C2": "/placas/esp32-c2.png",
"ESP32-P4": "/placas/esp32-p4.png",
};
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 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: "Camera", 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: "🌡️" });
const tabs = [
{
id: 'connections',
label: 'Diagrama de Conexões',
available: conexoes.length > 0,
content: (
)
},
{
id: 'devboard',
label: 'Placa de Desenvolvimento',
available: devBoardImages[key],
content: (
🔧
Placa de Desenvolvimento Oficial
{key} - Placa de desenvolvimento oficial da Espressif
)
},
{
id: 'specs',
label: 'Especificações',
available: true,
content: (
{interfacesEspeciais.length > 0 && (
)}
)
}
];
return (
PROCESSADOR
{serie.nucleos.includes("2") ? "Dual-Core" : "Single-Core"}
{serie.frequencia}
MEMÓRIA SRAM
{serie.memoria_sram}
+ {serie.memoria_sram_rtc} RTC
GPIO
{serie.gpio}
Pinos disponíveis
{previousKey ? (
←
) : (
)}
📊 Comparar Séries
{nextKey ? (
→
) : (
)}
);
}
function SpecSection({ title, specs, cor }) {
return (
{title}
{specs.map((spec, index) => (
{spec.icon}
{spec.label}
{spec.value}
))}
);
}
export async function generateMetadata({ params }) {
const { key } = params;
const serie = seriesData[key];
if (!serie) {
return {
title: "Série não encontrada",
};
}
return {
title: `${key} - ${serie.nome_completo}`,
description: serie.descricao,
};
}
export async function generateStaticParams() {
return Object.keys(seriesData).map((key) => ({
key: key,
}));
}