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 statepromove 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/ingestagora 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
/playgroundvirou destino com link inline no Hero (com dot pulsante spark-orange e arrow slidante no hover), entrada no Footer, e card OG dedicado emog/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-eabihf — cargo 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.