import { paginaMeta, jsonLd } from "@/lib/seo"; import Link from "next/link"; import Image from "next/image"; import Header from "@/components/Header"; import Footer from "@/components/Footer"; import PageHero from "@/components/PageHero"; 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 { AlertTriangle, ArrowLeft, ArrowRight, ArrowUpRight, Battery, BookOpen, Code, Cpu, Database, ExternalLink, FileText, Lightbulb, Package, Scale, ShieldCheck, Sliders, Thermometer, Wifi, } 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 }, { label: "Núcleos", value: serie.nucleos }, { label: "Frequência", value: serie.frequencia }, { label: "Coprocessador ULP", value: serie.coprocessador_ulp || "Não" }, { label: "Aceleradores IA", value: serie.aceleradores_ia || "Não" }, ]; const seg = serie.seguranca || {}; const segurancaSpecs = [ { label: "AES", value: seg.aes || "Não" }, { label: "SHA", value: seg.sha || "Não" }, { label: "RSA / MPI", value: seg.rsa || "Não" }, { label: "ECC (curvas elípticas)", value: seg.ecc || "Não" }, { label: "ECDSA em hardware", value: seg.ecdsa || "Não" }, { label: "HMAC", value: seg.hmac || "Não" }, { label: "Assinatura Digital (DS)", value: seg.assinatura_digital || "Não" }, { label: "Key Manager", value: seg.key_manager || "Não" }, { label: "Gerador aleatório (RNG)", value: seg.rng || "Não" }, { label: "Criptografia de flash", value: seg.criptografia_flash || "Não" }, { label: "Secure Boot", value: seg.secure_boot || "Não" }, { label: "Proteção contra DPA", value: seg.protecao_dpa || "Não" }, ]; const ferramentasSpecs = [ { label: "ESP-IDF mínimo", value: serie.esp_idf_minimo || "Não informado" }, { label: "Core Arduino", value: serie.arduino_core || "Não informado" }, { label: "Depuração", value: serie.depuracao || "Não informado" }, { label: "Encapsulamento", value: serie.encapsulamento || "Não informado" }, { label: "Módulos disponíveis", value: serie.modulos || "Não informado" }, ]; const conectividadeSpecs = [ { label: "Wi-Fi", value: serie.wifi || "Não" }, { label: "Bluetooth", value: serie.bluetooth || "Não" }, { label: "Zigbee/Thread", value: serie.zigbee_thread || "Não" }, { label: "Matter", value: serie.matter || "Não" }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || "Não" }, { label: "CAN", value: serie.can || "Não" }, ]; const memoriaSpecs = [ { label: "SRAM", value: serie.memoria_sram }, { label: "SRAM RTC", value: serie.memoria_sram_rtc }, { label: "ROM", value: serie.memoria_rom }, { label: "Flash Externa", value: serie.flash_externa }, { label: "PSRAM Externa", value: serie.psram_externa || "Não" }, ]; const perifericos = [ { label: "GPIO", value: serie.gpio }, { label: "ADC", value: serie.adc }, { label: "DAC", value: serie.dac || "Não" }, { label: "Touch", value: serie.touch || "Não" }, { label: "UART", value: serie.uart }, { label: "SPI", value: serie.spi }, { label: "I2C", value: serie.i2c }, { label: "I2S", value: serie.i2s }, { label: "PWM", value: serie.pwm }, { label: "USB", value: serie.usb || "Não" }, ]; const interfacesEspeciais = []; if (serie.lcd) interfacesEspeciais.push({ label: "LCD", value: serie.lcd }); if (serie.camera) interfacesEspeciais.push({ label: "Câmera", value: serie.camera }); if (serie.mipi_csi) interfacesEspeciais.push({ label: "MIPI CSI", value: serie.mipi_csi }); if (serie.mipi_dsi) interfacesEspeciais.push({ label: "MIPI DSI", value: serie.mipi_dsi }); if (serie.sdio) interfacesEspeciais.push({ label: "SDIO", value: serie.sdio }); if (serie.sensor_hall) interfacesEspeciais.push({ label: "Sensor Hall", value: serie.sensor_hall }); if (serie.sensor_temperatura) interfacesEspeciais.push({ label: "Sensor Temperatura", value: serie.sensor_temperatura }); // 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 }); }); } const tabs = [ { id: "devboard", label: "Placa de desenvolvimento", available: serie.placa, content: (

Kit de desenvolvimento oficial

{`Placa

Placa padrão da Espressif para a série {key}.

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

A matriz de IO do {key} permite mover SPI, I2C, UART, PWM e barramentos de câmera ou display para a maioria dos pinos digitais. Para as restrições de strapping e dos pinos analógicos, consulte o{" "} guia oficial de GPIO .

), }, ]; const secoes = [ { id: "processador", titulo: "Processador", icon: Cpu, specs: processadorSpecs }, { id: "conectividade", titulo: "Conectividade", icon: Wifi, specs: conectividadeSpecs }, { id: "ferramentas", titulo: "Ferramentas e disponibilidade", icon: Package, specs: ferramentasSpecs }, { id: "seguranca", titulo: "Segurança", icon: ShieldCheck, specs: segurancaSpecs }, { id: "memoria", titulo: "Memória", icon: Database, specs: memoriaSpecs }, ...(consumoEnergia.length > 0 ? [{ id: "energia", titulo: "Consumo de energia", icon: Battery, specs: consumoEnergia, nota: "Valores típicos a 3,3 V e 25 °C. O consumo real depende do ciclo de trabalho do rádio e da frequência de clock configurada.", }] : []), { id: "perifericos", titulo: "Periféricos", icon: Sliders, specs: perifericos }, ...(interfacesEspeciais.length > 0 ? [{ id: "interfaces", titulo: "Interfaces especiais", icon: Sliders, specs: interfacesEspeciais }] : []), { id: "temperatura", titulo: "Limites de temperatura", icon: Thermometer, specs: [ { label: "Operação", value: serie.temperatura_operacao }, { label: "Armazenamento", value: serie.temperatura_armazenamento }, ], }, ]; const fatos = [ { label: "Processador", value: String(serie.nucleos).includes("2") ? "Dual-core" : "Single-core", detail: serie.frequencia }, { label: "SRAM", value: serie.memoria_sram, detail: `+ ${serie.memoria_sram_rtc} de SRAM RTC` }, { label: "GPIO", value: serie.gpio, detail: "pinos programáveis" }, { label: "Arquitetura", value: String(serie.arquitetura).includes("RISC-V") ? "RISC-V" : "Xtensa", detail: serie.arquitetura }, ]; return (