import Header from "@/components/Header"; import Footer from "@/components/Footer"; import BookCover from "@/components/BookCover"; import Link from "next/link"; import seriesDataPt from "@/public/series.json"; import frameworksDataPt from "@/public/frameworks.json"; import seriesDataEn from "@/data/en/series.json"; import frameworksDataEn from "@/data/en/frameworks.json"; import seriesDataEs from "@/data/es/series.json"; import frameworksDataEs from "@/data/es/frameworks.json"; import seriesDataFr from "@/data/fr/series.json"; import frameworksDataFr from "@/data/fr/frameworks.json"; import seriesDataDe from "@/data/de/series.json"; import seriesDataZh from "@/data/zh-CN/series.json"; import frameworksDataDe from "@/data/de/frameworks.json"; import frameworksDataZh from "@/data/zh-CN/frameworks.json"; import { SITE } from "@/lib/seo"; import { getLocalizedHref } from "@/i18n/links"; import { AlertTriangle, ArrowRight, ArrowUpRight, BookOpen, Box, Cpu, Scale, SlidersHorizontal, Terminal, } from "lucide-react"; const FEATURED = ["ESP32", "ESP32-S3", "ESP32-C6", "ESP32-C3", "ESP32-P4", "ESP32-H2"]; const TOOLS_PT = [ { href: "/seletor", title: "Seletor inteligente", desc: "Responda oito perguntas sobre o projeto e receba os chips mais compatíveis, com justificativa técnica.", icon: SlidersHorizontal, action: "Encontrar meu chip", }, { href: "/comparacao", title: "Comparador de séries", desc: "Coloque até quatro modelos lado a lado e compare núcleos, rádio, memória, periféricos e segurança.", icon: Scale, action: "Comparar agora", }, { href: "/diagnostico", title: "Diagnóstico de falhas", desc: "Causas e correções para brownout, bootloop, Guru Meditation, watchdog e falhas de flash.", icon: AlertTriangle, action: "Abrir diagnóstico", }, { href: "/componentes", title: "Component Registry", desc: "Drivers, bibliotecas e BSPs do registro oficial da Espressif, com manifesto pronto para o projeto.", icon: Box, action: "Explorar componentes", }, { href: "/frameworks", title: "Frameworks e SDKs", desc: "ESP-IDF, Arduino, Rust, Matter, MicroPython e as ferramentas que ficam em volta do chip.", icon: Terminal, action: "Ver frameworks", }, { href: "/catalogo", title: "Catálogo de placas", desc: "DevKits e módulos reais, com interface USB, sensores integrados e link para a loja oficial.", icon: Cpu, action: "Ver placas", }, ]; const TOOLS_EN = [ { href: "/seletor", title: "Smart Selector", desc: "Answer eight questions about your project and find recommended chips, backed by technical rationale.", icon: SlidersHorizontal, action: "Find my chip", }, { href: "/comparacao", title: "Series Comparator", desc: "Place up to four models side by side and compare cores, radio, memory, peripherals, and security.", icon: Scale, action: "Compare now", }, { href: "/diagnostico", title: "Fault Diagnostics", desc: "Root causes and fixes for brownout, bootloop, Guru Meditation, watchdog, and flash errors.", icon: AlertTriangle, action: "Open diagnostics", }, { href: "/componentes", title: "Component Registry", desc: "Drivers, libraries and BSPs from the official Espressif registry, with ready-to-use manifests.", icon: Box, action: "Explore components", }, { href: "/frameworks", title: "Frameworks & SDKs", desc: "ESP-IDF, Arduino, Rust, Matter, MicroPython and the tools built around the silicon.", icon: Terminal, action: "View frameworks", }, { href: "/catalogo", title: "Board Catalog", desc: "Real DevKits and modules, with USB interfaces, integrated sensors and direct store links.", icon: Cpu, action: "View boards", }, ]; const TOOLS_ES = [ { href: "/seletor", title: "Selector inteligente", desc: "Responda a ocho preguntas sobre su proyecto y reciba los chips más compatibles, con justificación técnica.", icon: SlidersHorizontal, action: "Encontrar mi chip", }, { href: "/comparacao", title: "Comparador de series", desc: "Compare hasta cuatro modelos frente a frente: núcleos, radio, memoria, periféricos y seguridad.", icon: Scale, action: "Comparar ahora", }, { href: "/diagnostico", title: "Diagnóstico de fallos", desc: "Causas y soluciones para brownout, bootloop, Guru Meditation, watchdog y fallos de flash.", icon: AlertTriangle, action: "Abrir diagnóstico", }, { href: "/componentes", title: "Component Registry", desc: "Drivers, bibliotecas y BSPs del registro oficial de Espressif, con manifiesto listo para su proyecto.", icon: Box, action: "Explorar componentes", }, { href: "/frameworks", title: "Frameworks y SDKs", desc: "ESP-IDF, Arduino, Rust, Matter, MicroPython y las herramientas que rodean al silicio.", icon: Terminal, action: "Ver frameworks", }, { href: "/catalogo", title: "Catálogo de placas", desc: "DevKits y módulos reales, con interfaz USB, sensores integrados y enlace directo a la tienda oficial.", icon: Cpu, action: "Ver placas", }, ]; const TOOLS_FR = [ { href: "/seletor", title: "Sélecteur intelligent", desc: "Répondez à huit questions sur votre projet et découvrez les puces recommandées, avec justification technique.", icon: SlidersHorizontal, action: "Trouver ma puce", }, { href: "/comparacao", title: "Comparateur de séries", desc: "Comparez jusqu'à quatre modèles côte à côte : cœurs, radio, mémoire, périphériques et sécurité.", icon: Scale, action: "Comparer maintenant", }, { href: "/diagnostico", title: "Diagnostic de pannes", desc: "Causes et solutions pour brownout, bootloop, Guru Meditation, watchdog et erreurs de flash.", icon: AlertTriangle, action: "Ouvrir le diagnostic", }, { href: "/componentes", title: "Component Registry", desc: "Pilotes, bibliothèques et BSP du registre officiel Espressif, avec manifeste prêt pour votre projet.", icon: Box, action: "Explorer les composants", }, { href: "/frameworks", title: "Frameworks et SDKs", desc: "ESP-IDF, Arduino, Rust, Matter, MicroPython et les outils gravitant autour de la puce.", icon: Terminal, action: "Voir les frameworks", }, { href: "/catalogo", title: "Catalogue de cartes", desc: "DevKits et modules réels, avec interface USB, capteurs intégrés et lien vers la boutique officielle.", icon: Cpu, action: "Voir les cartes", }, ]; const TOOLS_DE = [ { href: "/seletor", title: "Intelligente Auswahl", desc: "Beantworten Sie acht Fragen zu Ihrem Projekt und erhalten Sie passende Chip-Empfehlungen mit technischer Begründung.", icon: SlidersHorizontal, action: "Meinen Chip finden", }, { href: "/comparacao", title: "Serienvergleich", desc: "Vergleichen Sie bis zu vier Modelle nebeneinander: Kerne, Funk, Speicher, Peripherie und Sicherheit.", icon: Scale, action: "Jetzt vergleichen", }, { href: "/diagnostico", title: "Fehlerdiagnose", desc: "Ursachen und Lösungen für Brownout, Bootloops, Guru Meditation, Watchdog und Flash-Fehler.", icon: AlertTriangle, action: "Diagnose öffnen", }, { href: "/componentes", title: "Component Registry", desc: "Treiber, Bibliotheken und BSPs aus der offiziellen Espressif-Registry, mit fertigem Manifest für Ihr Projekt.", icon: Box, action: "Komponenten erkunden", }, { href: "/frameworks", title: "Frameworks & SDKs", desc: "ESP-IDF, Arduino, Rust, Matter, MicroPython und die Werkzeuge rund um den Chip.", icon: Terminal, action: "Frameworks ansehen", }, { href: "/catalogo", title: "Board-Katalog", desc: "Reale DevKits und Module, mit USB-Schnittstelle, integrierten Sensoren und Link zum offiziellen Shop.", icon: Cpu, action: "Boards ansehen", }, ]; const TOOLS_ZH = [ { href: "/seletor", title: "智能选型", desc: "回答八个关于项目的问题,获得推荐芯片及其技术依据。", icon: SlidersHorizontal, action: "找到我的芯片", }, { href: "/comparacao", title: "系列对比", desc: "最多把四个型号并排放在一起,对比内核、无线、内存、外设和安全。", icon: Scale, action: "立即对比", }, { href: "/diagnostico", title: "故障诊断", desc: "针对欠压、启动循环、Guru Meditation、看门狗和闪存错误的根因与解决办法。", icon: AlertTriangle, action: "打开诊断", }, { href: "/componentes", title: "Component Registry", desc: "来自乐鑫官方注册中心的驱动、库和 BSP,附带可直接使用的清单。", icon: Box, action: "探索组件", }, { href: "/frameworks", title: "框架与 SDK", desc: "ESP-IDF、Arduino、Rust、Matter、MicroPython,以及围绕芯片构建的工具。", icon: Terminal, action: "查看框架", }, { href: "/catalogo", title: "开发板目录", desc: "真实的 DevKit 与模组,含 USB 接口、板载传感器和直达商店的链接。", icon: Cpu, action: "查看开发板", }, ]; const ERRORS_PT = [ { code: "Brownout detector was triggered", cause: "Queda de tensão na inicialização do rádio.", fix: "Capacitor de 10–100 µF junto ao chip e fonte de 5 V com corrente suficiente.", }, { code: "Guru Meditation Error", cause: "Ponteiro inválido, stack overflow ou uso incorreto de interrupção.", fix: "Leia o backtrace com addr2line e dimensione a stack da task no FreeRTOS.", }, { code: "ADC2 indisponível com Wi-Fi", cause: "O controlador de rádio reserva o ADC2 enquanto está ativo.", fix: "Use os pinos do ADC1 para sensores analógicos que convivem com o Wi-Fi.", }, { code: "Flash Read err / bootloader", cause: "Tensão ou modo de flash incorretos, ou pino de strapping preso no boot.", fix: "Confira 3,3 V, pull-ups de boot e a configuração de flash no esptool.", }, ]; const ERRORS_EN = [ { code: "Brownout detector was triggered", cause: "Voltage sag upon radio startup.", fix: "10–100 µF capacitor close to chip and a 5 V supply with sufficient current.", }, { code: "Guru Meditation Error", cause: "Invalid pointer, stack overflow, or improper ISR usage.", fix: "Inspect backtrace with addr2line and properly size FreeRTOS task stacks.", }, { code: "ADC2 unavailable with Wi-Fi", cause: "Internal radio controller reserves ADC2 while active.", fix: "Use ADC1 pins for analog sensors operating alongside Wi-Fi.", }, { code: "Flash Read err / bootloader", cause: "Incorrect flash voltage/mode or strapping pin pulled during boot.", fix: "Check 3.3 V rail, boot pull-ups, and flash configuration in esptool.", }, ]; const ERRORS_ES = [ { code: "Brownout detector was triggered", cause: "Caída de tensión al inicializar la etapa de radio.", fix: "Condensador de 10–100 µF junto al chip y fuente de 5 V con corriente suficiente.", }, { code: "Guru Meditation Error", cause: "Puntero inválido, desbordamiento de pila o uso incorrecto de interrupciones.", fix: "Analice el backtrace con addr2line y dimensione la pila de la tarea en FreeRTOS.", }, { code: "ADC2 no disponible con Wi-Fi", cause: "El controlador de radio reserva ADC2 mientras permanece activo.", fix: "Utilice los pines de ADC1 para sensores analógicos que funcionen junto con Wi-Fi.", }, { code: "Flash Read err / bootloader", cause: "Tensión o modo de flash incorrectos, o pin de strapping forzado en el arranque.", fix: "Compruebe la línea de 3,3 V, los pull-ups de arranque y la configuración de flash en esptool.", }, ]; const ERRORS_FR = [ { code: "Brownout detector was triggered", cause: "Baisse de tension lors du démarrage de la radio.", fix: "Condensateur de 10 à 100 µF au plus près de la puce et alimentation 5 V avec courant suffisant.", }, { code: "Guru Meditation Error", cause: "Pointeur invalide, dépassement de pile ou mauvaise utilisation des interruptions.", fix: "Analysez le backtrace avec addr2line et dimensionnez la pile de la tâche sous FreeRTOS.", }, { code: "ADC2 indisponible avec le Wi-Fi", cause: "Le contrôleur radio réserve l'ADC2 tant qu'il est actif.", fix: "Utilisez les broches de l'ADC1 pour les capteurs analogiques fonctionnant conjointement avec le Wi-Fi.", }, { code: "Flash Read err / bootloader", cause: "Tension ou mode de flash incorrect, ou broche de strapping forcée au démarrage.", fix: "Vérifiez la ligne 3,3 V, les pull-ups de démarrage et la configuration de flash dans esptool.", }, ]; const ERRORS_DE = [ { code: "Brownout detector was triggered", cause: "Spannungseinbruch beim Starten der Funkeinheit.", fix: "Kondensator mit 10–100 µF nah am Chip und 5-V-Netzteil mit ausreichender Stromstärke.", }, { code: "Guru Meditation Error", cause: "Ungültiger Zeiger, Stack-Überlauf oder fehlerhafte Interrupt-Nutzung.", fix: "Backtrace mit addr2line analysieren und Stack-Größe der FreeRTOS-Task anpassen.", }, { code: "ADC2 nicht verfügbar bei aktivem Wi-Fi", cause: "Der Funk-Controller reserviert ADC2, solange er aktiv ist.", fix: "Nutzen Sie ADC1-Pins für analoge Sensoren, die gleichzeitig mit Wi-Fi betrieben werden.", }, { code: "Flash Read err / bootloader", cause: "Falsche Flash-Spannung/-Modus oder beim Booten falsch beschalteter Strapping-Pin.", fix: "3,3-V-Schiene, Boot-Pull-ups und Flash-Konfiguration in esptool überprüfen.", }, ]; const ERRORS_ZH = [ { code: "Brownout detector was triggered", cause: "射频启动时电压跌落。", fix: "在芯片附近加 10–100 µF 电容,并使用电流足够的 5 V 电源。", }, { code: "Guru Meditation Error", cause: "无效指针、栈溢出,或 ISR 使用不当。", fix: "用 addr2line 查看回溯信息,并合理设置 FreeRTOS 任务的栈大小。", }, { code: "Wi-Fi 开启时 ADC2 不可用", cause: "射频控制器工作时会占用 ADC2。", fix: "与 Wi-Fi 同时使用模拟传感器时,请用 ADC1 引脚。", }, { code: "Flash Read err / bootloader", cause: "闪存电压/模式不正确,或启动时启动配置引脚被拉到错误电平。", fix: "检查 3.3 V 电源轨、启动上拉,以及 esptool 中的闪存配置。", }, ]; export default async function Home({ params }) { const { locale } = await params; const isPt = locale === "pt"; const isEn = locale === "en"; const isEs = locale === "es"; const isFr = locale === "fr"; const isDe = locale === "de"; const isZh = locale === "zh-CN"; const getLinkHref = (href) => getLocalizedHref(`/${locale}${href}`, locale); const seriesData = isPt ? seriesDataPt : isEs ? seriesDataEs : isFr ? seriesDataFr : isZh ? seriesDataZh : isDe ? seriesDataDe : seriesDataEn; const frameworksData = isPt ? frameworksDataPt : isEs ? frameworksDataEs : isFr ? frameworksDataFr : isZh ? frameworksDataZh : isDe ? frameworksDataDe : frameworksDataEn; const tools = isPt ? TOOLS_PT : isEs ? TOOLS_ES : isFr ? TOOLS_FR : isZh ? TOOLS_ZH : isDe ? TOOLS_DE : TOOLS_EN; const errors = isPt ? ERRORS_PT : isEs ? ERRORS_ES : isFr ? ERRORS_FR : isZh ? ERRORS_ZH : isDe ? ERRORS_DE : ERRORS_EN; const seriesCount = Object.keys(seriesData).length; const frameworkCount = Object.keys(frameworksData).length; const featured = FEATURED.map((key) => [key, seriesData[key]]).filter(([, serie]) => Boolean(serie)); return (

{isPt ? ( <> O ESP32,
sem ruído. ) : isEs ? ( <> El ESP32,
sin ruido. ) : isFr ? ( <> L'ESP32,
sans bruit. ) : isZh ? ( <> ESP32,
去繁就简。 ) : isDe ? ( <> Der ESP32,
ohne Umwege. ) : ( <> The ESP32,
without noise. )}

{isPt ? "Especificações, pinagem, comparações e diagnóstico em uma leitura só. Menos tradução de datasheet, mais tempo com o protótipo na bancada." : isEs ? "Especificaciones, patillaje, comparaciones y diagnóstico en una sola lectura. Menos traducción de hojas de datos, más tiempo con el prototipo en el banco de trabajo." : isFr ? "Spécifications, brochage, comparaisons et diagnostics en une seule lecture. Moins de traduction de fiches techniques, plus de temps à l'établi." : isZh ? "规格、引脚、对比与故障诊断,一次读完。少啃数据手册,多花时间在工作台上做原型。" : isDe ? "Spezifikationen, Pinbelegung, Vergleiche und Diagnose auf einen Blick. Weniger Datenblatt-Übersetzung, mehr Zeit am Prüfplatz." : "Specifications, pinouts, comparisons and diagnostics in a single read. Less datasheet translation, more workbench time."}

{seriesCount} {isPt ? "séries" : isEs ? "series" : isFr ? "séries" : isZh ? "个系列" : isDe ? "Serien" : "series"} {frameworkCount} {isZh ? "个框架" : isDe ? "Frameworks" : "frameworks"} {isPt ? ( <> 78 capítulos no livro 100% em português ) : isEs ? ( <> 100% en español ) : isFr ? ( <> 100 % en français ) : isZh ? ( <> 100% 中文 ) : isDe ? ( <> 100 % auf Deutsch ) : ( <> 100% in English )}

{isPt ? "Séries em destaque" : isEs ? "Series destacadas" : isFr ? "Séries en vedette" : isZh ? "精选系列" : isDe ? "Vorgestellte Serien" : "Featured series"}

{isPt ? "O essencial de cada família, antes de abrir o datasheet." : isEs ? "Lo esencial de cada familia, antes de abrir la hoja de datos." : isFr ? "L'essentiel de chaque famille, avant d'ouvrir la fiche technique." : isZh ? "打开数据手册之前,先看每个系列的要点。" : isDe ? "Das Wesentliche jeder Familie, bevor Sie das Datenblatt öffnen." : "The essentials of each family before opening the datasheet."}

{isPt ? "Índice completo" : isEs ? "Índice completo" : isFr ? "Index complet" : isZh ? "完整索引" : isDe ? "Vollständiger Index" : "Full index"}
{featured.map(([key, serie]) => (

{key}

{serie.arquitetura}

{serie.descricao}

{serie.frequencia} {isPt ? "Ficha" : isEs ? "Ficha" : isFr ? "Fiche" : isZh ? "规格表" : isDe ? "Datenblatt" : "Spec sheet"}
))}
{isPt && (
)}

{isPt ? "Ferramentas" : isEs ? "Herramientas" : isFr ? "Outils" : isZh ? "工具" : isDe ? "Werkzeuge" : "Tools"}

{isPt ? "Comece pelo problema." : isEs ? "Empiece por el problema." : isFr ? "Commencez par le problème." : isZh ? "从问题出发。" : isDe ? "Beginnen Sie beim Problem." : "Start with the problem."}

{isPt ? "Cada ferramenta resolve uma etapa concreta do projeto, sem cadastro e sem rodeio." : isEs ? "Cada herramienta resuelve una fase concreta del proyecto, sin registros ni rodeos." : isFr ? "Chaque outil répond à une étape concrète du projet, sans inscription ni détour." : isZh ? "每个工具对应开发中的一个具体阶段,无需注册,没有废话。" : isDe ? "Jedes Werkzeug löst einen konkreten Projektschritt – ohne Registrierung und ohne Umwege." : "Each tool addresses a concrete development phase, with no sign-ups and zero fluff."}

{tools.map((tool) => { const Icon = tool.icon; return (

{tool.title}

{tool.desc}

{tool.action} ); })}

{isPt ? "Diagnóstico" : isEs ? "Diagnóstico" : isFr ? "Diagnostic" : isZh ? "故障诊断" : isDe ? "Diagnose" : "Diagnostics"}

{isPt ? "O primeiro boot não precisa virar noite." : isEs ? "El primer arranque no tiene por qué desvelarlo." : isFr ? "Le premier démarrage n'a pas à vous gâcher la nuit." : isZh ? "第一次启动,不必折腾一整晚。" : isDe ? "Der erste Boot muss nicht die Nacht kosten." : "First boot doesn't have to take all night."}

{isPt ? "Os erros mais comuns têm causa conhecida. O guia parte da mensagem no terminal e chega ao ajuste de hardware ou firmware." : isEs ? "Los errores más comunes tienen una causa conocida. Esta guía parte del mensaje en el terminal y llega al ajuste de hardware o firmware." : isFr ? "Les erreurs les plus courantes ont une cause connue. Ce guide part du message dans le terminal pour arriver au réglage matériel ou logiciel." : isZh ? "常见错误都有已知的原因。本指南从串口终端日志出发,引导你找到硬件或固件上的调整办法。" : isDe ? "Die häufigsten Fehler haben bekannte Ursachen. Dieser Leitfaden geht von der Terminalmeldung aus und führt zur passenden Hardware- oder Firmware-Anpassung." : "Common errors have known causes. This guide starts with the serial terminal log and leads to the hardware or firmware adjustment."}

{isPt ? "4 exemplos de 30+" : isEs ? "4 ejemplos de 30+" : isFr ? "4 exemples sur 30+" : isZh ? "30 多项中的 4 个示例" : isDe ? "4 Beispiele von 30+" : "4 examples of 30+"}
{errors.map((item) => ( {item.code} {item.cause} {item.fix} ))}

{isPt ? "Curadoria independente" : isEs ? "Curaduría independiente" : isFr ? "Sélection indépendante" : isZh ? "独立整理" : isDe ? "Unabhängige Kuration" : "Independent curation"}

{isPt ? "Feito para consultar no meio do projeto." : isEs ? "Diseñado para consultar en mitad del proyecto." : isFr ? "Conçu pour être consulté en plein projet." : isZh ? "为项目途中的快速查阅而做。" : isDe ? "Gemacht für das Nachschlagen mitten im Projekt." : "Built for quick lookup mid-project."}

{isPt ? "O ESPDocs organiza dados públicos da Espressif e aponta sempre para a fonte oficial. Para decisões críticas, o datasheet e o Technical Reference Manual continuam sendo a palavra final." : isEs ? "ESPDocs organiza datos públicos de Espressif y apunta siempre a la fuente oficial. Para decisiones críticas, la hoja de datos y el Technical Reference Manual continúan teniendo la última palabra." : isFr ? "ESPDocs organise les données publiques d'Espressif et renvoie systématiquement vers la source officielle. Pour les décisions critiques, la fiche technique et le Technical Reference Manual restent la référence définitive." : isZh ? "ESPDocs 整理乐鑫的公开数据,并直接指向官方资料来源。对于关键的工程决策,数据手册和技术参考手册仍是最终依据。" : isDe ? "ESPDocs strukturiert öffentliche Espressif-Daten und verweist stets auf die offizielle Quelle. Für kritische Entscheidungen bleiben das Datenblatt und das Technical Reference Manual maßgeblich." : "ESPDocs organizes public Espressif data and points directly to official sources. For critical engineering decisions, the datasheet and Technical Reference Manual remain the definitive authority."}

); }