/** * /esp32-c3-simulator — SEO landing page * Target keywords: "esp32-c3 simulator", "risc-v simulator", "esp32 c3 emulator" */ import React from 'react'; import { Link } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { AppHeader } from '../components/layout/AppHeader'; import { useLocalizedHref } from '../i18n/useLocalizedNavigate'; import { useSEO } from '../utils/useSEO'; import { getSeoMeta } from '../seoRoutes'; import { trackClickCTA } from '../utils/analytics'; const esp32C3SvgUrl = '/boards/esp32-c3.svg'; import './SEOPage.css'; const META = getSeoMeta('/esp32-c3-simulator')!; const FAQ_ITEMS = [ { q: 'What is the ESP32-C3?', a: 'The ESP32-C3 is a RISC-V single-core microcontroller by Espressif running at 160 MHz (RV32IMC instruction set). It has WiFi + Bluetooth 5.0, 22 GPIO pins, and is one of the first RISC-V MCUs with a mature Arduino ecosystem.', }, { q: 'Does the ESP32-C3 simulator run in the browser?', a: 'Yes. Unlike the Xtensa-based ESP32, the ESP32-C3 RISC-V emulation runs entirely in the browser — no QEMU backend needed. This makes it the fastest ESP32 variant to simulate.', }, { q: 'Is this also a RISC-V simulator?', a: 'Yes. The ESP32-C3 uses the RISC-V RV32IMC instruction set. Velxio also supports the CH32V003 (RV32EC at 48 MHz) — another popular RISC-V microcontroller.', }, { q: 'Which ESP32-C3 boards are supported?', a: 'Velxio supports ESP32-C3 DevKitM-1, Seeed XIAO ESP32-C3, and ESP32-C3 SuperMini (Aitewinrobot). All three use the same RISC-V core.', }, { q: 'Can I use Arduino code with ESP32-C3?', a: 'Yes. Velxio compiles your .ino sketch using the official ESP32 Arduino core with the ESP32-C3 board target. All standard Arduino functions work — Serial, GPIO, analogRead, etc.', }, ]; const JSON_LD: object[] = [ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: 'Velxio — Free ESP32-C3 & RISC-V Simulator', applicationCategory: 'DeveloperApplication', operatingSystem: 'Any (browser-based)', description: 'Free online ESP32-C3 RISC-V simulator. RV32IMC emulation at 160 MHz via the QEMU lcgamboa backend (libqemu-riscv32). Simulate ESP32-C3 DevKit, XIAO ESP32-C3, SuperMini, and CH32V003.', url: 'https://velxio.dev/esp32-c3-simulator', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' }, author: { '@type': 'Person', name: 'David Montero Crespo' }, }, { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: FAQ_ITEMS.map(({ q, a }) => ({ '@type': 'Question', name: q, acceptedAnswer: { '@type': 'Answer', text: a }, })), }, { '@context': 'https://schema.org', '@type': 'BreadcrumbList', itemListElement: [ { '@type': 'ListItem', position: 1, name: 'Velxio', item: 'https://velxio.dev/' }, { '@type': 'ListItem', position: 2, name: 'ESP32-C3 Simulator', item: 'https://velxio.dev/esp32-c3-simulator', }, ], }, ]; export const Esp32C3SimulatorPage: React.FC = () => { const { t } = useTranslation(); const localize = useLocalizedHref(); useSEO({ ...META, jsonLd: JSON_LD }); const faqKeys = ['1', '2', '3', '4', '5'] as const; return (
{t('seo.esp32c3.hero.imageAlt')}

{t('seo.esp32c3.hero.title')}
{t('seo.esp32c3.hero.accent')}

{t('seo.esp32c3.hero.subtitle')}

trackClickCTA('esp32-c3-simulator', '/editor')} > {t('seo.esp32c3.hero.ctaPrimary')} → {t('seo.esp32c3.hero.ctaSecondary')}

{t('seo.esp32c3.hero.trust')}

{t('seo.esp32c3.boards.heading')}

{t('seo.esp32c3.boards.lead')}

{t('seo.esp32c3.boards.devkitTitle')}

{t('seo.esp32c3.boards.devkitBody')}

{t('seo.esp32c3.boards.xiaoTitle')}

{t('seo.esp32c3.boards.xiaoBody')}

{t('seo.esp32c3.boards.superTitle')}

{t('seo.esp32c3.boards.superBody')}

{t('seo.esp32c3.boards.chTitle')}

{t('seo.esp32c3.boards.chBody')}

{t('seo.esp32c3.examples.heading')}

{t('seo.esp32c3.examples.lead')}

{t('seo.esp32c3.examples.blinkTitle')}

{t('seo.esp32c3.examples.blinkBody')}

{t('seo.esp32c3.examples.rgbTitle')}

{t('seo.esp32c3.examples.rgbBody')}

{t('seo.esp32c3.examples.buttonTitle')}

{t('seo.esp32c3.examples.buttonBody')}

{t('seo.esp32c3.examples.dhtTitle')}

{t('seo.esp32c3.examples.dhtBody')}

{t('seo.esp32c3.examples.sonarTitle')}

{t('seo.esp32c3.examples.sonarBody')}

{t('seo.esp32c3.examples.servoTitle')}

{t('seo.esp32c3.examples.servoBody')}

{t('seo.esp32c3.examples.viewAll')} →

{t('seo.esp32c3.faq.heading')}

{faqKeys.map((k) => (
{t(`seo.esp32c3.faq.q${k}`)}
{t(`seo.esp32c3.faq.a${k}`)}
))}

{t('seo.esp32c3.bottom.title')}

{t('seo.esp32c3.bottom.body')}

trackClickCTA('esp32-c3-simulator', '/editor')} > {t('seo.esp32c3.bottom.cta')} →
{t('seo.links.esp32')} {t('seo.links.esp32s3')} {t('seo.links.rpiPico')} {t('seo.links.arduino')} {t('seo.links.riscvDocs')}
); };