Source: https://mokxi.com/boards/raspberry-pi

Board

# Raspberry Pi simulator for GPIO, in Python with gpiozero

The Raspberry Pi 4 Model B, the Raspberry Pi 5 and the Raspberry Pi Zero 2 W, from their 40-pin header. Your main.py runs in a Python engine in the page, and gpiozero and RPi.GPIO drive the header as they do on a real Pi, on the simulated clock. There is no Linux here, and this page says plainly what that leaves out.

Start building free

- 9 peripheral areas modeled
- 9 projects ready to run
- Real time on your own machine

Click to open it in the editor

The board is running its main.py right now. Click it to open the circuit in the editor.

The model

## What is modeled

Taken from the board's own contract document and put in plain words, with what is missing beside it.

### Modeled

The header

All 40 pins in their real order, named by BCM number, with BOARD numbering mapped to them

Power

3V3 on pins 1 and 17, 5V on pins 2 and 4, and the eight grounds

GPIO

GPIO 0 to 27 at 3.3 V logic, as inputs with their 50 k pulls or as outputs, with the SoC’s power-on pulls and the 1.8 k pull-ups on GPIO 2 and 3

gpiozero 2.0.1

LED, PWMLED, RGBLED, Button, Buzzer, Servo, AngularServo, DistanceSensor, MotionSensor, LineSensor and more, on the lgpio pin factory

RPi.GPIO 0.7.1

BCM and BOARD, setup, output, input, PWM, add_event_detect, wait_for_edge and cleanup, with the library’s own warnings and errors

Time

time.sleep(1) is one simulated second; edge callbacks run at the time of the edge

The Pi 5

RPi.GPIO fails there with the error a real Pi 5 gives, and gpiozero works

I2C and SPI

/dev/i2c-1 and /dev/spidev0.0 and 0.1, with smbus, smbus2, spidev and gpiozero’s MCP3008, at the speed of the bus and with the errors a Pi gives

The Serial Monitor

print() and tracebacks, input(), and Ctrl-C as KeyboardInterrupt

### Not modeled

- Linux. There is no kernel, no desktop, no terminal, no sudo and no file system beyond the project’s files.
- pip and apt. Only the modules that come with the board can be imported.
- Networking: no Wi-Fi, Ethernet or Bluetooth, and no socket or requests.
- The camera, the display, HDMI and audio.
- The I2C bus’s speed setting and clock stretching: I2C runs at Raspberry Pi OS’s default 100 kHz.
- Threads. gpiozero’s callbacks, blink() and PWM run without them.
- CPython itself: the engine is MicroPython, so a few details of the language differ (isinstance(True, int) is False). Programs that drive the pins run unchanged.

Start here

## Open one and press Run

Each of these opens in the editor exactly as it is drawn here.

Projects

## Every built-in project on the Raspberry Pi

Each has its own page with the circuit running, the code and a parts list.

- Blink an LED with gpiozero Beginner
- A button toggles an LED with gpiozero Beginner
- Servo sweep with RPi.GPIO PWM Beginner
- RPi.GPIO BCM and BOARD numbering Beginner
- SSD1306 OLED on a Pi with smbus2 Intermediate
- PIR motion sensor with gpiozero Beginner
- Traffic lights with gpiozero Beginner

Learn

## Tutorials that use this board

Each one ends in a running circuit, on this same board.

- Raspberry Pi GPIO in Python: gpiozero, RPi.GPIO, I2C and SPI

## Questions

Is it free?

Yes. Every board and every part is on the free plan, with no account needed.

Is this a Raspberry Pi emulator?

No. There is no Arm core and no Linux. Your Python runs in a Python engine in the page, and its gpiozero and RPi.GPIO drive the header. Everything a circuit can see of a Pi is here; the operating system is not.

Why does RPi.GPIO fail on the Pi 5?

Because it fails on a real Pi 5: the pins are on the RP1 chip, which RPi.GPIO 0.7.1 cannot find, and GPIO.setup raises "Cannot determine SOC peripheral base address". Use gpiozero, which works on all three boards.

Can I pip install a library?

No. Add a library’s .py file as a tab of its own and import it from main.py, which works for libraries written in plain Python.

Will my program run on a real Pi?

Yes, with gpiozero or RPi.GPIO as they ship with Raspberry Pi OS. Timing on a real Pi is looser: software PWM jitters there and does not here.

Also here

## The other boards

Every one of these runs today, and every one is free.

Looking for the shorter introduction? See the Raspberry Pi simulator page.

ESP32-C3-DevKitM-1

A RISC-V chip at 160 MHz, on the real memory map.

Open the board page

Arduino Uno R3

The classic Arduino, with an ATmega328P running at 16 MHz.

Open the board page

Arduino Nano

The Uno’s chip on a small board that fits a breadboard.

Open the board page

Arduino Mega 2560

The big Arduino, with 54 digital pins and four serial ports.

Open the board page

Arduino Leonardo

An Uno-shaped board whose chip does its own USB serial.

Open the board page

ESP32-C6-DevKitC-1

A second RISC-V board, with 31 pins and simulated WiFi.

Open the board page

ESP32 DevKit V1

The classic ESP32 at 240 MHz, with simulated WiFi.

Open the board page

ESP32-S3-DevKitC-1

The ESP32-S3 at 240 MHz, with USB serial and an RGB LED.

Open the board page

All 39 boards

## Try it with your own Python

Write main.py with gpiozero or RPi.GPIO and press Run. Nothing to install and no account needed.

Start building free Open the editor
