O firmware do Pistonix agora roda no seu navegador

O simulador V-twin do Pistonix foi compilado pra WebAssembly e ganhou um dashboard interativo no site. Você acelera, troca motor, injeta falha de sensor e ouve o motor — tudo rodando o mesmo firmware closed-loop que valida a ECU na bancada.

Tem um Pistonix Dash interativo no site. Você abre pistonix.com.br/playground, twista o acelerador virtual e o RPM sobe — não é mock. É o simulador de motor V-twin que escrevemos em Rust, compilado pra WebAssembly, rodando o mesmo firmware que valida a ECU física na bancada. 216 testes garantem que o que acontece aí é o que vai acontecer no Proteus.

O que tem pra brincar

  • Acelerar e ver os mapas reagirem. RPM, MAP, AFR, knock e DTCs aparecem do mesmo jeito que mostraríamos no display de 4” do Pistonix Dash.
  • Trocar de motor. Twin Cam 88, 96, 103 e Milwaukee-Eight 107, 114, 117 — cada um com sua geometria, faixa de torque e estratégia de detecção de knock (ion-sense no TC, piezo per-cylinder no M8).
  • Trocar de combustível. Gasolina, E10, E85 e metanol. O AFR target shifta quando você muda — porque a estequio muda, e o firmware sabe disso.
  • Forçar uma falha de sensor. TPS travado, ECT aberto, MAP em curto, IAT aberto. Os DTCs aparecem no contador, e dependendo da severidade o safety state promove pra Warning, Limp ou Cutoff — exatamente como vai acontecer com a ECU plugada na moto.
  • Ouvir o motor. Web Audio com pitch atrelado a RPM × throttle, filtro lowpass que abre sob carga. Não é potato-potato Harley perfeito, mas o suficiente pra fazer o cérebro acreditar que o motor está ali.

Por que isso importa pra quem vai comprar

O Pistonix é firmware fechado, escrito do zero, sem dependência de fork de projeto open source. Isso é uma escolha estratégica — a gente não tem GPL pra cumprir, dá pra evoluir o produto sem ter discussão de licença. Mas o lado escuro é que o cliente em potencial não consegue baixar o código pra avaliar o que tá comprando.

O playground resolve metade desse problema. Você não vê o código, mas vê o comportamento — e comportamento é o que importa quando o que tá sob teste é uma ECU. Knock detection que retarda na hora certa, AFR closed-loop que converge, partida fria que enriquece, rev limit que corta — tudo lá, executável, sem instalar nada.

Como funciona por baixo

A peça nova é a feature wasm do crate pistonix-engine-sim. Adicionei wasm-bindgen opcional na Cargo.toml, expus um PistonixEngine que envolve o EngineSim + o FirmwareLoop (mesmo firmware que roda nos testes), e o wasm-pack cospe um bundle de 73KB raw (~28KB gzipped).

A página /playground é um componente Astro stand-alone — sem framework client, sem hidratação. Vanilla JS importa o bundle WASM, chama engine.tickMs(dt) num requestAnimationFrame, e mapeia o struct de telemetry pra atributos no SVG. RPM gauge é arc com stroke-dasharray animado. AFR strip tem um marker em 14.7 (stoich gasolina) e o ponteiro varre 10..18. Knock per-cylinder tem barra laranja→vermelha. Tudo no mesmo layout do dashboard-firmware V2.

A CI ganhou um job wasm-build que cross-compila pra wasm32-unknown-unknown em todo PR — se eu quebrar o binding, o build cai antes de chegar no site.

ADR-008 disse que o cloud backend ia ficar num K3s próprio. O playground é mais um ponto a favor dessa decisão: tudo isso é hospedado de graça em static pages do Cloudflare, e os 73KB de wasm chegam do mesmo CDN que o resto do site.

Limitações que dá pra ver

  • Não tem boost / nitro / launch control nessa primeira versão. Esses três (Phase 3 features do firmware) precisam de configuração específica via builder no FirmwareLoop. Vão entrar numa próxima iteração do playground com toggles dedicados.
  • Som é genérico. Sawtooth + lowpass não é V-twin de verdade. Pra reproduzir a assimetria 315°/405° do Harley precisa de dois osciladores phase-locked com envelope per-firing. Caro pra implementar pelo retorno marketing — fica pra quando o orçamento de tempo permitir.
  • Telemetria não vai pro /telemetry/ingest. O endpoint existe e tem 8 testes de integração, mas o playground não envia ainda. Se quiser, dá pra plugar pra coletar dados anônimos de “como as pessoas testam o Pistonix” — vou pensar com calma se vale o trade-off de privacidade.

O que mais saiu hoje

  • Cloud: POST /telemetry/ingest agora tem 8 testes de integração cobrindo auth, validação Zod, cap de 1000 samples, persistência + storage e download flow. Resolveu uma pendência registrada na STATE.md desde a última rodada.
  • Hero + Footer + OG: o /playground virou destino com link inline no Hero (com dot pulsante spark-orange e arrow slidante no hover), entrada no Footer, e card OG dedicado em og/playground.svg. Compartilhar no WhatsApp/Twitter renderiza certo agora.

Quando eu testo isso na bancada de verdade?

Hardware Fase 0 (Proteus F7, Nucleo F767ZI, ESP32-S3, display, sonda LSU 4.9, ferramentas) ainda em pedido. Quando chegar, o crate pistonix-ecu-firmware já compila pra thumbv7em-none-eabihfcargo run --release -p pistonix-ecu-firmware flasha via probe-rs e abre RTT.

A promessa de “plug and test quando hardware chegar” continua de pé. Enquanto não chega, o playground é o que mais se aproxima — pra mim e pra qualquer um curioso o suficiente pra abrir o site e mexer no acelerador.

Lista de espera

Quer saber em primeira mão.

Pistonix está em desenvolvimento ativo. Inscreva-se pra receber atualizações de produto, basemaps prévios, convites pra rodar nos eventos do Milwaukee Garage Drag Racing e prioridade na lista de compra do Pistonix Forge.

  • Atualizações mensais de roadmap e firmware
  • Convite para sessões de tuning na pré-venda
  • Prioridade para o lote inicial do Pistonix Forge
  • Acesso antecipado a basemaps por motor

Ao se inscrever você concorda em receber emails do Pistonix. Não compartilhamos seu email. Você pode descadastrar a qualquer momento. (LGPD)