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";
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 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: (
Sobre a Matriz de Conexões Flexível
O ESP32 possui uma matriz de conexões flexível que permite mapear diversas funções para múltiplos pinos.
Isso significa que muitas conexões podem ser configuradas para desempenhar diferentes papéis, dependendo das necessidades do seu projeto.
Consulte a documentação oficial para entender como aproveitar ao máximo as GPIOs
nesse link.
)
},
{
id: 'devboard',
label: 'Placa de Desenvolvimento',
available: serie.placa,
content: (
🔧
Placa de Desenvolvimento Oficial
{key} - Placa de desenvolvimento oficial da Espressif
)
},
{
id: 'specs',
label: 'Especificações',
available: true,
content: (
{interfacesEspeciais.length > 0 && (
)}
)
}
];
return (
← Voltar para Séries
{serie.icone}
{key}
{serie.nome_completo}
{serie.arquitetura}
{serie.descricao}
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
{/* Call-to-Action para Catálogo de Placas */}
🛒 Pronto para começar?
Encontre placas de desenvolvimento {key} verificadas no nosso catálogo.
Links diretos para lojas oficiais e confiáveis com os melhores preços!
Ver Placas Disponíveis →
{previousKey ? (
←
) : null}
📊 Comparar Séries
{nextKey ? (
→
) : null}
);
}
function SpecSection({ title, specs, cor }) {
return (
{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,
}));
}