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 seriesDataPt from "@/public/series.json"; import seriesDataEn from "@/data/en/series.json"; import seriesDataEs from "@/data/es/series.json"; import seriesDataFr from "@/data/fr/series.json"; import seriesDataDe from "@/data/de/series.json"; import ConnectionsDiagram from "@/components/ConnectionsDiagram"; import SeriesTabMenu from "@/components/SeriesTabMenu"; import PinRestrictions from "@/components/PinRestrictions"; import { getLocalizedHref } from "@/i18n/links"; 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 { locale, key } = await params; const isEn = locale === "en"; const isEs = locale === "es"; const isFr = locale === "fr"; const isDe = locale === "de"; const currentLocale = isDe ? "de" : isFr ? "fr" : isEs ? "es" : isEn ? "en" : "pt"; const seriesData = isDe ? seriesDataDe : isFr ? seriesDataFr : isEs ? seriesDataEs : isEn ? seriesDataEn : seriesDataPt; const serie = seriesData[key]; if (!serie) { notFound(); } let conexoes = []; try { conexoes = isDe ? require(`@/data/de/conexoes/${key}.json`) : isFr ? require(`@/data/fr/conexoes/${key}.json`) : isEs ? require(`@/data/es/conexoes/${key}.json`) : isEn ? require(`@/data/en/conexoes/${key}.json`) : 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 nao = isDe ? "Nein" : isFr ? "Non" : isEs || isEn ? "No" : "Não"; const naoInformado = isDe ? "Nicht angegeben" : isFr ? "Non communiqué" : isEs ? "No informado" : isEn ? "Not informed" : "Não informado"; const processadorSpecs = isDe ? [ { label: "Architektur", value: serie.arquitetura }, { label: "Kerne", value: serie.nucleos }, { label: "Taktfrequenz", value: serie.frequencia }, { label: "ULP-Coprozessor", value: serie.coprocessador_ulp || nao }, { label: "KI-Beschleuniger", value: serie.aceleradores_ia || nao }, ] : isFr ? [ { label: "Architecture", value: serie.arquitetura }, { label: "Cœurs", value: serie.nucleos }, { label: "Fréquence", value: serie.frequencia }, { label: "Coprocesseur ULP", value: serie.coprocessador_ulp || nao }, { label: "Accélérateurs IA", value: serie.aceleradores_ia || nao }, ] : isEs ? [ { label: "Arquitectura", value: serie.arquitetura }, { label: "Núcleos", value: serie.nucleos }, { label: "Frecuencia", value: serie.frequencia }, { label: "Coprocesador ULP", value: serie.coprocessador_ulp || nao }, { label: "Aceleradores de IA", value: serie.aceleradores_ia || nao }, ] : isEn ? [ { label: "Architecture", value: serie.arquitetura }, { label: "Cores", value: serie.nucleos }, { label: "Frequency", value: serie.frequencia }, { label: "ULP Coprocessor", value: serie.coprocessador_ulp || nao }, { label: "AI Accelerators", value: serie.aceleradores_ia || nao }, ] : [ { 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 = isDe ? [ { label: "AES", value: seg.aes || nao }, { label: "SHA", value: seg.sha || nao }, { label: "RSA / MPI", value: seg.rsa || nao }, { label: "ECC (elliptische Kurven)", value: seg.ecc || nao }, { label: "Hardware-ECDSA", value: seg.ecdsa || nao }, { label: "HMAC", value: seg.hmac || nao }, { label: "Digitale Signatur (DS)", value: seg.assinatura_digital || nao }, { label: "Key Manager", value: seg.key_manager || nao }, { label: "Zufallszahlengenerator (TRNG)", value: seg.rng || nao }, { label: "Flash-Verschlüsselung", value: seg.criptografia_flash || nao }, { label: "Secure Boot", value: seg.secure_boot || nao }, { label: "DPA-Schutz", value: seg.protecao_dpa || nao }, ] : isFr ? [ { label: "AES", value: seg.aes || nao }, { label: "SHA", value: seg.sha || nao }, { label: "RSA / MPI", value: seg.rsa || nao }, { label: "ECC (courbes elliptiques)", value: seg.ecc || nao }, { label: "ECDSA matériel", value: seg.ecdsa || nao }, { label: "HMAC", value: seg.hmac || nao }, { label: "Signature numérique (DS)", value: seg.assinatura_digital || nao }, { label: "Key Manager", value: seg.key_manager || nao }, { label: "Générateur aléatoire (TRNG)", value: seg.rng || nao }, { label: "Chiffrement Flash", value: seg.criptografia_flash || nao }, { label: "Secure Boot", value: seg.secure_boot || nao }, { label: "Protection DPA", value: seg.protecao_dpa || nao }, ] : isEs ? [ { label: "AES", value: seg.aes || nao }, { label: "SHA", value: seg.sha || nao }, { label: "RSA / MPI", value: seg.rsa || nao }, { label: "ECC (curvas elípticas)", value: seg.ecc || nao }, { label: "ECDSA en hardware", value: seg.ecdsa || nao }, { label: "HMAC", value: seg.hmac || nao }, { label: "Firma digital (DS)", value: seg.assinatura_digital || nao }, { label: "Key Manager", value: seg.key_manager || nao }, { label: "Generador aleatorio (TRNG)", value: seg.rng || nao }, { label: "Cifrado de flash", value: seg.criptografia_flash || nao }, { label: "Secure Boot", value: seg.secure_boot || nao }, { label: "Protección contra DPA", value: seg.protecao_dpa || nao }, ] : isEn ? [ { label: "AES", value: seg.aes || nao }, { label: "SHA", value: seg.sha || nao }, { label: "RSA / MPI", value: seg.rsa || nao }, { label: "ECC (elliptic curves)", value: seg.ecc || nao }, { label: "Hardware ECDSA", value: seg.ecdsa || nao }, { label: "HMAC", value: seg.hmac || nao }, { label: "Digital Signature (DS)", value: seg.assinatura_digital || nao }, { label: "Key Manager", value: seg.key_manager || nao }, { label: "Random Generator (TRNG)", value: seg.rng || nao }, { label: "Flash Encryption", value: seg.criptografia_flash || nao }, { label: "Secure Boot", value: seg.secure_boot || nao }, { label: "DPA Protection", value: seg.protecao_dpa || nao }, ] : [ { 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 = isDe ? [ { label: "Minimales ESP-IDF", value: serie.esp_idf_minimo || naoInformado }, { label: "Arduino-Core", value: serie.arduino_core || naoInformado }, { label: "Debugging", value: serie.depuracao || naoInformado }, { label: "Gehäuse", value: serie.encapsulamento || naoInformado }, { label: "Verfügbare Module", value: serie.modulos || naoInformado }, ] : isFr ? [ { label: "ESP-IDF minimal", value: serie.esp_idf_minimo || naoInformado }, { label: "Core Arduino", value: serie.arduino_core || naoInformado }, { label: "Débogage", value: serie.depuracao || naoInformado }, { label: "Boîtier", value: serie.encapsulamento || naoInformado }, { label: "Modules disponibles", value: serie.modulos || naoInformado }, ] : isEs ? [ { label: "ESP-IDF mínimo", value: serie.esp_idf_minimo || naoInformado }, { label: "Core Arduino", value: serie.arduino_core || naoInformado }, { label: "Depuración", value: serie.depuracao || naoInformado }, { label: "Encapsulado", value: serie.encapsulamento || naoInformado }, { label: "Módulos disponibles", value: serie.modulos || naoInformado }, ] : isEn ? [ { label: "Minimum ESP-IDF", value: serie.esp_idf_minimo || naoInformado }, { label: "Arduino Core", value: serie.arduino_core || naoInformado }, { label: "Debugging", value: serie.depuracao || naoInformado }, { label: "Package", value: serie.encapsulamento || naoInformado }, { label: "Available Modules", value: serie.modulos || naoInformado }, ] : [ { 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 = isDe ? [ { label: "Wi-Fi", value: serie.wifi || nao }, { label: "Bluetooth", value: serie.bluetooth || nao }, { label: "Zigbee/Thread", value: serie.zigbee_thread || nao }, { label: "Matter", value: serie.matter || nao }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || nao }, { label: "CAN", value: serie.can || nao }, ] : isFr ? [ { label: "Wi-Fi", value: serie.wifi || nao }, { label: "Bluetooth", value: serie.bluetooth || nao }, { label: "Zigbee/Thread", value: serie.zigbee_thread || nao }, { label: "Matter", value: serie.matter || nao }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || nao }, { label: "CAN", value: serie.can || nao }, ] : isEs ? [ { label: "Wi-Fi", value: serie.wifi || nao }, { label: "Bluetooth", value: serie.bluetooth || nao }, { label: "Zigbee/Thread", value: serie.zigbee_thread || nao }, { label: "Matter", value: serie.matter || nao }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || nao }, { label: "CAN", value: serie.can || nao }, ] : isEn ? [ { label: "Wi-Fi", value: serie.wifi || nao }, { label: "Bluetooth", value: serie.bluetooth || nao }, { label: "Zigbee/Thread", value: serie.zigbee_thread || nao }, { label: "Matter", value: serie.matter || nao }, { label: "Ethernet", value: serie.ethernet || serie.ethernet_mac || nao }, { label: "CAN", value: serie.can || nao }, ] : [ { 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 = isDe ? [ { label: "SRAM", value: serie.memoria_sram }, { label: "RTC-SRAM", value: serie.memoria_sram_rtc }, { label: "ROM", value: serie.memoria_rom }, { label: "Externer Flash", value: serie.flash_externa }, { label: "Externer PSRAM", value: serie.psram_externa || nao }, ] : isFr ? [ { label: "SRAM", value: serie.memoria_sram }, { label: "SRAM RTC", value: serie.memoria_sram_rtc }, { label: "ROM", value: serie.memoria_rom }, { label: "Flash externe", value: serie.flash_externa }, { label: "PSRAM externe", value: serie.psram_externa || nao }, ] : isEs ? [ { 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 || nao }, ] : isEn ? [ { label: "SRAM", value: serie.memoria_sram }, { label: "RTC SRAM", value: serie.memoria_sram_rtc }, { label: "ROM", value: serie.memoria_rom }, { label: "External Flash", value: serie.flash_externa }, { label: "External PSRAM", value: serie.psram_externa || nao }, ] : [ { 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 = isDe ? [ { label: "GPIO", value: serie.gpio }, { label: "ADC", value: serie.adc }, { label: "DAC", value: serie.dac || nao }, { label: "Touch", value: serie.touch || nao }, { 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 || nao }, ] : isFr ? [ { label: "GPIO", value: serie.gpio }, { label: "ADC", value: serie.adc }, { label: "DAC", value: serie.dac || nao }, { label: "Touch", value: serie.touch || nao }, { 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 || nao }, ] : isEs ? [ { label: "GPIO", value: serie.gpio }, { label: "ADC", value: serie.adc }, { label: "DAC", value: serie.dac || nao }, { label: "Touch", value: serie.touch || nao }, { 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 || nao }, ] : isEn ? [ { label: "GPIO", value: serie.gpio }, { label: "ADC", value: serie.adc }, { label: "DAC", value: serie.dac || nao }, { label: "Touch", value: serie.touch || nao }, { 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 || nao }, ] : [ { 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: isDe ? "Kamera" : isFr ? "Caméra" : isEs ? "Cámara" : isEn ? "Camera" : "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: isDe ? "Hall-Sensor" : isFr ? "Capteur Hall" : isEs ? "Sensor Hall" : isEn ? "Hall Sensor" : "Sensor Hall", value: serie.sensor_hall }); if (serie.sensor_temperatura) interfacesEspeciais.push({ label: isDe ? "Temperatursensor" : isFr ? "Capteur de température" : isEs ? "Sensor de temperatura" : isEn ? "Temperature Sensor" : "Sensor Temperatura", value: serie.sensor_temperatura }); // Consumo de Energia const consumoEnergia = []; if (serie.consumo_energia) { const modoLabelsPt = { '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' }; const modoLabelsEn = { 'active': 'Active Mode', 'active_cpu_240mhz': 'Active (CPU 240MHz)', 'active_cpu_160mhz': 'Active (CPU 160MHz)', 'active_wifi_tx': 'Active (Wi-Fi TX)', 'active_wifi_tx_peak': 'Active (Wi-Fi TX Peak)', 'active_wifi': 'Active (Wi-Fi)', 'active_wifi6': 'Active (Wi-Fi 6)', 'modem_sleep': 'Modem Sleep', 'modem_sleep_cpu_160mhz': 'Modem Sleep (CPU 160MHz)', 'light_sleep': 'Light Sleep', 'deep_sleep': 'Deep Sleep', 'hibernation': 'Hibernation' }; const modoLabelsEs = { 'active': 'Modo activo', 'active_cpu_240mhz': 'Activo (CPU 240MHz)', 'active_cpu_160mhz': 'Activo (CPU 160MHz)', 'active_wifi_tx': 'Activo (Wi-Fi TX)', 'active_wifi_tx_peak': 'Activo (Wi-Fi TX Pico)', 'active_wifi': 'Activo (Wi-Fi)', 'active_wifi6': 'Activo (Wi-Fi 6)', 'modem_sleep': 'Modem Sleep', 'modem_sleep_cpu_160mhz': 'Modem Sleep (CPU 160MHz)', 'light_sleep': 'Light Sleep', 'deep_sleep': 'Deep Sleep', 'hibernation': 'Hibernación' }; const modoLabelsFr = { 'active': 'Mode actif', 'active_cpu_240mhz': 'Actif (CPU 240MHz)', 'active_cpu_160mhz': 'Actif (CPU 160MHz)', 'active_wifi_tx': 'Actif (Wi-Fi TX)', 'active_wifi_tx_peak': 'Actif (Wi-Fi TX Pic)', 'active_wifi': 'Actif (Wi-Fi)', 'active_wifi6': 'Actif (Wi-Fi 6)', 'modem_sleep': 'Modem Sleep', 'modem_sleep_cpu_160mhz': 'Modem Sleep (CPU 160MHz)', 'light_sleep': 'Light Sleep', 'deep_sleep': 'Deep Sleep', 'hibernation': 'Hibernation' }; const modoLabelsDe = { 'active': 'Aktivmodus', 'active_cpu_240mhz': 'Aktiv (CPU 240MHz)', 'active_cpu_160mhz': 'Aktiv (CPU 160MHz)', 'active_wifi_tx': 'Aktiv (Wi-Fi TX)', 'active_wifi_tx_peak': 'Aktiv (Wi-Fi TX Spitze)', 'active_wifi': 'Aktiv (Wi-Fi)', 'active_wifi6': 'Aktiv (Wi-Fi 6)', 'modem_sleep': 'Modem Sleep', 'modem_sleep_cpu_160mhz': 'Modem Sleep (CPU 160MHz)', 'light_sleep': 'Light Sleep', 'deep_sleep': 'Deep Sleep', 'hibernation': 'Ruhezustand' }; const modoLabels = isDe ? modoLabelsDe : isFr ? modoLabelsFr : isEs ? modoLabelsEs : isEn ? modoLabelsEn : modoLabelsPt; Object.entries(serie.consumo_energia).forEach(([modo, consumo]) => { consumoEnergia.push({ label: modoLabels[modo] || modo.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()), value: consumo }); }); } const tabs = [ { id: "devboard", label: isDe ? "Entwicklungsboard" : isFr ? "Carte de développement" : isEs ? "Placa de desarrollo" : isEn ? "Development board" : "Placa de desenvolvimento", available: serie.placa, content: (

{isDe ? "Offizielles Development Kit" : isFr ? "Kit de développement officiel" : isEs ? "Kit de desarrollo oficial" : isEn ? "Official development kit" : "Kit de desenvolvimento oficial"}

{/* As fotos oficiais foram feitas para fundo claro: o quadro fica branco nos dois temas. */}
{isDe

{isDe ? ( <>Offizielles Espressif-Board für die Serie {key}. ) : isFr ? ( <>Carte officielle d'Espressif pour la série {key}. ) : isEs ? ( <>Placa estándar de Espressif para la serie {key}. ) : isEn ? ( <>Official Espressif board for the {key} series. ) : ( <>Placa padrão da Espressif para a série {key}. )}

), }, { id: "connections", label: isDe ? "Pinbelegungsdiagramm" : isFr ? "Diagramme de brochage" : isEs ? "Diagrama de patillaje" : isEn ? "Pinout diagram" : "Diagrama de conexões", available: conexoes.length > 0, content: (

{isDe ? ( <> Die IO-Matrix des {key} ermöglicht das Zuweisen von SPI, I2C, UART, PWM und Kamera-/Displaybussen zu den meisten digitalen Pins. Für Strapping-Einschränkungen und analoge Pins konsultieren Sie den{" "} offiziellen GPIO-Leitfaden . ) : isFr ? ( <> La matrice d'E/S du {key} permet d'assigner SPI, I2C, UART, PWM et bus caméra/écran à la majorité des broches numériques. Pour les restrictions de strapping et broches analogiques, consultez le{" "} guide officiel GPIO . ) : isEs ? ( <> La matriz de E/S del {key} permite mover buses SPI, I2C, UART, PWM y cámara/pantalla a la mayoría de los pines digitales. Para las restricciones de strapping y pines analógicos, consulte la{" "} guía oficial de GPIO . ) : isEn ? ( <> The {key} IO matrix allows moving SPI, I2C, UART, PWM, and camera/display buses to most digital pins. For strapping restrictions and analog pins, consult the{" "} official GPIO guide . ) : ( <> 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: isDe ? "Prozessor" : isFr ? "Processeur" : isEs ? "Procesador" : isEn ? "Processor" : "Processador", icon: Cpu, specs: processadorSpecs }, { id: "conectividade", titulo: isDe ? "Konnektivität" : isFr ? "Connectivité" : isEs ? "Conectividad" : isEn ? "Connectivity" : "Conectividade", icon: Wifi, specs: conectividadeSpecs }, { id: "ferramentas", titulo: isDe ? "Werkzeuge und Verfügbarkeit" : isFr ? "Outils et disponibilité" : isEs ? "Herramientas y disponibilidad" : isEn ? "Tools and availability" : "Ferramentas e disponibilidade", icon: Package, specs: ferramentasSpecs }, { id: "seguranca", titulo: isDe ? "Sicherheit" : isFr ? "Sécurité" : isEs ? "Seguridad" : isEn ? "Security" : "Segurança", icon: ShieldCheck, specs: segurancaSpecs }, { id: "memoria", titulo: isDe ? "Speicher" : isFr ? "Mémoire" : isEs ? "Memoria" : isEn ? "Memory" : "Memória", icon: Database, specs: memoriaSpecs }, ...(consumoEnergia.length > 0 ? [{ id: "energia", titulo: isDe ? "Stromverbrauch" : isFr ? "Consommation d'énergie" : isEs ? "Consumo de energía" : isEn ? "Power consumption" : "Consumo de energia", icon: Battery, specs: consumoEnergia, nota: isDe ? "Typische Werte bei 3,3 V und 25 °C. Der tatsächliche Stromverbrauch hängt vom Funk-Tastgrad und der konfigurierten Taktfrequenz ab." : isFr ? "Valeurs typiques à 3,3 V et 25 °C. La consommation réelle dépend du cycle de travail de la radio et de la fréquence d'horloge configurée." : isEs ? "Valores típicos a 3,3 V y 25 °C. El consumo real depende del ciclo de trabajo de la radio y de la frecuencia de reloj configurada." : isEn ? "Typical values at 3.3 V and 25 °C. Actual power consumption depends on radio duty cycle and configured clock frequency." : "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: isDe ? "Peripherie" : isFr ? "Périphériques" : isEs ? "Periféricos" : isEn ? "Peripherals" : "Periféricos", icon: Sliders, specs: perifericos }, ...(interfacesEspeciais.length > 0 ? [{ id: "interfaces", titulo: isDe ? "Spezielle Schnittstellen" : isFr ? "Interfaces spéciales" : isEs ? "Interfaces especiales" : isEn ? "Special interfaces" : "Interfaces especiais", icon: Sliders, specs: interfacesEspeciais }] : []), { id: "temperatura", titulo: isDe ? "Temperaturgrenzwerte" : isFr ? "Limites de température" : isEs ? "Límites de temperatura" : isEn ? "Temperature limits" : "Limites de temperatura", icon: Thermometer, specs: [ { label: isDe ? "Betrieb" : isFr ? "Fonctionnement" : isEs ? "Operación" : isEn ? "Operating" : "Operação", value: serie.temperatura_operacao }, { label: isDe ? "Lagerung" : isFr ? "Stockage" : isEs ? "Almacenamiento" : isEn ? "Storage" : "Armazenamento", value: serie.temperatura_armazenamento }, ], }, ]; const fatos = [ { label: isDe ? "Prozessor" : isFr ? "Processeur" : isEs ? "Procesador" : isEn ? "Processor" : "Processador", value: String(serie.nucleos).includes("2") ? "Dual-core" : "Single-core", detail: serie.frequencia }, { label: "SRAM", value: serie.memoria_sram, detail: isDe ? `+ ${serie.memoria_sram_rtc} RTC-SRAM` : isFr ? `+ ${serie.memoria_sram_rtc} de SRAM RTC` : isEs ? `+ ${serie.memoria_sram_rtc} de SRAM RTC` : isEn ? `+ ${serie.memoria_sram_rtc} RTC SRAM` : `+ ${serie.memoria_sram_rtc} de SRAM RTC` }, { label: "GPIO", value: serie.gpio, detail: isDe ? "programmierbare Pins" : isFr ? "broches programmables" : isEs ? "pines programables" : isEn ? "programmable pins" : "pinos programáveis" }, { label: isDe ? "Architektur" : isFr ? "Architecture" : isEs ? "Arquitectura" : isEn ? "Architecture" : "Arquitetura", value: String(serie.arquitetura).includes("RISC-V") ? "RISC-V" : "Xtensa", detail: serie.arquitetura }, ]; return (