Arduino, running the sketch you wrote
arduino-cli compiles it, an AVR8 core executes it instruction by instruction, and the LCD shows what the ATmega328P actually put on the bus. Uno, Nano, Mega and ATtiny85, no board on your desk.

Hardware is all about iteration. Velxio lets you wire a circuit, program the board and run it in seconds, real firmware on a real solver, right in the browser.
DFRobot · M5Stack links on this page are affiliate links: a purchase through them earns Velxio a small commission at no extra cost to you.
Nothing on this page is a scripted animation: the firmware is compiled and executed, and the circuit around it is solved.
arduino-cli compiles it, an AVR8 core executes it instruction by instruction, and the LCD shows what the ATmega328P actually put on the bus. Uno, Nano, Mega and ATtiny85, no board on your desk.

arduino-cli or ESP-IDF compiles the sketch, then AVR8, RP2040, RISC-V, Xtensa or ARM executes it instruction by instruction. What the OLED draws and what the serial monitor prints is what the chip actually did.

ngspice compiled to WebAssembly runs a full nodal analysis about 60 times a second. GPIO pins drive real nets, ADC inputs read solved node voltages, and probes report RMS, DC and current wherever you drop them.

Adders, comparators, decoders, flip-flops and a 1-bit ALU slice: no microcontroller anywhere, just gates, switches and LEDs solved as a real net. The classroom half of electronics, without the breadboard.

The M5Stack Cardputer with its keyboard, Seeed's round display keeping time, Pimoroni's Badger 2350 driving e-paper, and DFRobot's UNIHIKER M10 in the catalogue alongside them. Their makers sent the hardware so the emulation could be checked against the real thing.




35 boards across 6 CPU architectures — AVR8, ARM Cortex-M, ARM Cortex-A, RISC-V, Xtensa, and Linux. Including partner boards from Pimoroni, M5Stack, Seeed Studio and DFRobot. All running locally, no cloud needed.
One institution contract gives every student in the class a full Pro account. No per-seat checkout, no card details in a classroom.
Private projects, BOM and schematic exports, GitHub Sync and the offline desktop app, for everyone enrolled.
Billed once to your institution, per semester or per year. Volume pricing on request for large cohorts.
Arduino, ESP32, RP2040, STM32, ATtiny and Raspberry Pi, with SPICE analog solved alongside the firmware. Not a sandboxed mock.
The simulator stays free forever, WiFi with internet included. Paid plans unlock the Linux and STM32 boards, custom WiFi networks, the local network gateway and the offline desktop app. Maker and Pro add the AI agent; No AI leaves it out.
Discover the simulator + light AI help.
The full workbench, zero AI. You write every line.
For makers shipping real circuits with AI help.
Private projects, GitHub Sync and BOM exports.
Questions, bugs and ideas: the Discord and the issue tracker are open, and so is every line of the simulator.
An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by 25040118.
/* =====================================================================
Velxio 仿真 · Arduino Uno · 空气质量 / 温度风扇 / 键盘密码锁 + 舵机
---------------------------------------------------------------------
引脚分配(按最终版接线表,D10 空着)
矩阵键盘 R1..R4 : D2 D3 D4 D5
矩阵键盘 C1..C4 : D6 D7 D8 D12
舵机 PWM : D9
Grove 闪光 LED : D11
L293D IN1 : D13 IN2 : A3 (EN1=5V, EN2/IN3/IN4=GND)
蜂鸣器 : A2
空气质量 AO : A0
OLED SSD1306 : A4=SDA A5=SCL (0x3C)
温湿度 SHT31 : A4/A5 同一条 I2C 总线 (0x44)
---------------------------------------------------------------------
逻辑
1) 空气质量原始值显示在 OLED;超过 AQ_THRESHOLD -> D11 LED 亮
2) 温度显示在 OLED;超过 TEMP_ON -> 电机(风扇)转,降回 TEMP_OFF 停
3) 键盘按 "1" "2",再按右下角按键(D) 确认
密码正确 -> 舵机转到 90°,保持 10 秒后回 0°
消息显示在屏幕最下方一行
===================================================================== */
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
/* ---------------- 引脚 ---------------- */
const uint8_t ROW_PINS[4] = {2, 3, 4, 5};
const uint8_t COL_PINS[4] = {6, 7, 8, 12};
const uint8_t SERVO_PIN = 9;
const uint8_t LED_PIN = 11;
const uint8_t MOTOR_IN1 = 13;
const uint8_t MOTOR_IN2 = A3;
const uint8_t BUZZER_PIN = A2;
const uint8_t AQ_PIN = A0;
/* ---------------- 参数 ---------------- */
const int AQ_THRESHOLD = 400; // 空气质量模拟量阈值(0~1023),越大越差
const float TEMP_ON = 30.0; // 超过这个温度开风扇
const float TEMP_OFF = 28.0; // 低于这个温度关风扇(滞回)
const char PASSWORD[] = "12"; // 密码
const char CONFIRM_KEY = 'D'; // 右下角按键 = 确认
const unsigned long SERVO_HOLD_MS = 10000UL; // 舵机保持 90° 的时间
const unsigned long INPUT_TIMEOUT = 8000UL; // 输入超时自动清空
/* ---------------- 键盘布局 ---------------- */
const char KEYS[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
/* ---------------- OLED ---------------- */
#define SCREEN_W 128
#define SCREEN_H 64
Adafruit_SSD1306 display(SCREEN_W, SCREEN_H, &Wire, -1);
Servo servo;
/* ---------------- 状态 ---------------- */
float tempC = 25.0f; // 当前温度(读不到传感器时的默认值)
float humi = 45.0f; // 当前湿度
int aqRaw = 0; // 空气质量原始值
char inputBuf[9] = {0}; // 键盘输入缓冲
uint8_t inputLen = 0;
unsigned long lastKeyMs = 0;
char msg[24] = "请输入密码"; // 屏幕最下方那行消息
bool servoActive = false;
unsigned long servoEndMs = 0;
bool motorOn = false;
/* ==================== SHT31 温湿度(裸 I2C,免库) ==================== */
uint8_t crc8(const uint8_t *data, int len) {
uint8_t crc = 0xFF;
for (int i = 0; i < len; i++) {
crc ^= data[i];
for (int b = 0; b < 8; b++)
crc = (crc & 0x80) ? (uint8_t)((crc << 1) ^ 0x31) : (uint8_t)(crc << 1);
}
return crc;
}
bool readTempHum(float &t, float &h) {
Wire.beginTransmission(0x44); // SHT31 默认地址
Wire.write(0x2C); Wire.write(0x06); // 高重复性、非拉伸
if (Wire.endTransmission() != 0) return false;
delay(20);
if (Wire.