#15

Arduino Simulator — Mobile

March 27, 2026

React NativeThree.jsExpoGoogle PlayArduinoOTG/USB

Ported the web Arduino simulator to React Native and shipped it on Google Play. Pre-built labs with live 3D simulation — pick a lab, run the code, watch it react. April update added real Arduino Uno support via OTG: connect your board, flash code directly from your Android phone.

What is it?

The mobile port of the Arduino Simulator, on Google Play. Pre-built labs with live 3D simulation — pick a lab, run the code, watch hardware react. The April 2026 update added real Arduino Uno integration: connect via OTG cable and flash code directly from your Android phone.

The porting reality

The web version took days. Mobile took weeks. Main friction: React Native doesn't run browser APIs. Web Audio API → need a native audio library. WebAssembly in a browser → different execution model in React Native. 3D rendering → expo-gl instead of WebGL. Build pipelines (EAS Build), Google Play's 14-day closed testing requirement, privacy policy, screenshot specs, and an Android Studio setup that killed the laptop — ended up using VS Code + emulator + heavy AI assistance throughout.

Google Play submission

Steps that aren't obvious: generate a signing keystore once (lose it = can't update the app), configure EAS Build with the keystore, build an AAB (Android App Bundle, not APK) for Play submission, fill out the content rating questionnaire, write and host a privacy policy, recruit 12+ testers for the 14-day closed testing period before you can apply for production access.

EAS Build compiles the React Native app in Expo's cloud — no Android Studio needed locally. Returns a signed AAB download link.

OTG hardware integration

USB OTG (On-The-Go) lets Android act as a USB host. The app detects OTG connection, identifies the connected device as an Arduino Uno via USB Vendor ID/Product ID, reads the compiled HEX from the simulation, and invokes avrdude (the Arduino flash tool) via a native module to upload to the board.

The same code that ran in the 3D simulator gets flashed to real hardware. Students prototype in simulation, verify on the board — without needing a laptop or Arduino IDE. The April update added detailed wiring diagrams for each lab to guide the physical hardware setup.

Current limitations and next steps

At launch, lab parameters are hardcoded — you can't change LED pins or servo angles live. The simulation + real hardware modes share the same hardcoded lab definitions. The stated next step: full dynamic control where users can adjust parameters and see both simulation and hardware update in real time. This requires the app to re-compile and re-flash on parameter change, which adds latency to the interaction loop.

Key takeaways

  • Expo EAS Build: cloud Android compilation, keystore management, AAB vs APK
  • Google Play requirements: 14-day closed testing, privacy policy, content rating
  • USB OTG on Android: USB host API, VID/PID device enumeration
  • avrdude: Arduino HEX format, upload protocols (stk500, avr109), flashing via CLI
  • React Native gaps vs browser: Web Audio, WebAssembly, WebGL — and their native equivalents
Try it live →← all projects