/** * /arduino-simulator — SEO landing page * Target keywords: "arduino simulator", "arduino simulator free" */ 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'; import './SEOPage.css'; const META = getSeoMeta('/arduino-simulator')!; const FAQ_ITEMS = [ { q: 'Is this Arduino simulator free?', a: 'Yes. Velxio is completely free and open-source (GNU AGPLv3). No account, no payment, no cloud subscription — run it in your browser or self-host it with one Docker command.', }, { q: 'Does the Arduino simulator work without installing anything?', a: 'The simulation engine runs entirely in your browser. Compiling code requires the arduino-cli backend, which you can run locally or via Docker. No IDE installation is needed.', }, { q: 'What Arduino boards can I simulate?', a: 'Velxio supports 19 boards: Arduino Uno (ATmega328P), Arduino Nano, Arduino Mega 2560, ATtiny85, Arduino Leonardo, Arduino Pro Mini (AVR8) — plus Raspberry Pi Pico (RP2040), ESP32-C3 / XIAO ESP32-C3 / CH32V003 (RISC-V), ESP32 / ESP32-S3 / ESP32-CAM (Xtensa via QEMU), and Raspberry Pi 3B (Linux via QEMU).', }, { q: 'Can I simulate LEDs, sensors, and displays?', a: 'Yes. Velxio includes 48+ interactive wokwi-elements: LEDs, resistors, buttons, servo motors, ultrasonic sensors, ILI9341 TFT displays, LCD, NeoPixel strips, buzzers, DHT22, and more.', }, { q: 'Is Velxio a Wokwi alternative?', a: 'Yes. Velxio is a free, self-hosted alternative to Wokwi. It uses the same avr8js emulation library and wokwi-elements visual components, but runs entirely on your own machine with no cloud dependency.', }, ]; const JSON_LD: object[] = [ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: 'Velxio — Free Online Arduino Simulator', applicationCategory: 'DeveloperApplication', operatingSystem: 'Any (browser-based)', description: 'Free online Arduino simulator with real AVR8 emulation at 16 MHz. Simulate Arduino code with 48+ interactive electronic components directly in your browser — no install, no account.', url: 'https://velxio.dev/arduino-simulator', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' }, author: { '@type': 'Person', name: 'David Montero Crespo' }, license: 'https://www.gnu.org/licenses/agpl-3.0.html', }, { '@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: 'Arduino Simulator', item: 'https://velxio.dev/arduino-simulator', }, ], }, ]; export const ArduinoSimulatorPage: React.FC = () => { const { t } = useTranslation(); const localize = useLocalizedHref(); useSEO({ ...META, jsonLd: JSON_LD }); const faqKeys = ['1', '2', '3', '4', '5'] as const; return (
{/* Hero */}

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

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

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

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

{/* What you can simulate */}

{t('seo.arduino.what.heading')}

{t('seo.arduino.what.lead')}

{t('seo.arduino.what.unoTitle')}

{t('seo.arduino.what.unoBody')}

{t('seo.arduino.what.megaTitle')}

{t('seo.arduino.what.megaBody')}

{t('seo.arduino.what.componentsTitle')}

{t('seo.arduino.what.componentsBody')}

{t('seo.arduino.what.serialTitle')}

{t('seo.arduino.what.serialBodyPrefix')} {t('seo.arduino.what.serialBodyCode')} {t('seo.arduino.what.serialBodySuffix')}

{t('seo.arduino.what.multiTitle')}

{t('seo.arduino.what.multiBody')}

{t('seo.arduino.what.libTitle')}

{t('seo.arduino.what.libBody')}

{/* How it works */}

{t('seo.arduino.how.heading')}

{t('seo.arduino.how.leadPrefix')} {t('seo.arduino.how.leadHighlight')} {t('seo.arduino.how.leadSuffix')}

{t('seo.arduino.how.writeTitle')}

{t('seo.arduino.how.writeBody')}

{t('seo.arduino.how.compileTitle')}

{t('seo.arduino.how.compileBody')}

{t('seo.arduino.how.simulateTitle')}

{t('seo.arduino.how.simulateBody')}

{/* FAQ */}

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

{faqKeys.map((k) => (
{t(`seo.arduino.faq.q${k}`)}
{t(`seo.arduino.faq.a${k}`)}
))}
{/* Bottom CTA */}

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

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

trackClickCTA('arduino-simulator', '/editor')} > {t('seo.arduino.bottom.cta')} →
{t('seo.links.examples')} {t('seo.links.arduinoEmu')} {t('seo.links.atmega')} {t('seo.links.mega')} {t('seo.links.esp32')} {t('seo.links.rpiPico')}
); };