It is used for developing the Connomore64.
https://github.com/c1570/rp2040js
Features:
- somewhat accurate PIO timings (also, MUCH slower emulation)
- built-in cycle profiler using markers in the code
- Dual Core support (by mingpepe)
- Inter-core FIFO support (incomplete)
- a WIP demo wiring up several RP2040s using an 8 bit bus and gathering debug info, simulating GPIO latency
- this is the runner used for developing the Connomore64
- a lot of dirty hacks and tests not suitable for pushing upstream
Raspberry Pi Pico Emulator for the Wokwi Simulation Platform. It blinks, runs Arduino code, and even the MicroPython REPL!
If you are just looking to play around with the Raspberry Pi Pico Simulator, check out the Wokwi Simulator:
For more information, take a look at the wokwi-pi-pico docs and the Pi Pico MicroPython Guide.
If you want to develop your own application using the Raspberry Pi Pico simulator, the following examples may be helpful:
- Blink LEDs with RP2040js, from scratch - Press "Run" and patiently wait for the code to compile ;-)
You'd need to get hello_uart.hex
by building it from the pico-examples repo, then copy it to the rp2040js root directory and run:
npm install
npm start
To run the MicroPython demo, first download rp2-pico-20210902-v1.17.uf2, place it in the rp2040js root directory, then run:
npm install
npm run start:micropython
and enjoy the MicroPython REPL! Quit the REPL with Ctrl+X. A different UF2 image can be loaded by supplying the --image
option:
npm run start:micropython -- --image=my_image.uf2
A GDB server on port 3333 can be enabled by specifying the --gdb
flag:
npm run start:micropython -- --gdb
For using the MicroPython demo code in tests, the --expect-text
can come handy: it will look for the given text in the serial output and exit with code 0 if found, or 1 if not found. You can find an example in the MicroPython CI test.
With MicroPython – and probably also CircuitPython – you can use the filesystem on the Pico. This becomes useful as more than one script file is used in your code. Just put a LittleFS formatted filesystem image called littlefs.img
into the rp2040js root directory, and your main.py
will be automatically started from there.
A simple way to create a suitable LittleFS image containing your script files is outlined in create_littlefs_image.py. So, using littlefs-python, you can do the following:
from littlefs import LittleFS
files = ['your.py', 'files.py', 'here.py', 'main.py']
output_image = 'output/littlefs.img' # symlinked/copied to rp2040js root directory
lfs = LittleFS(block_size=4096, block_count=352, prog_size=256)
for filename in files:
with open(filename, 'rb') as src_file, lfs.open(filename, 'w') as lfs_file:
lfs_file.write(src_file.read())
with open(output_image, 'wb') as fh:
fh.write(lfs.context.buffer)
Other ways of creating LittleFS images can be found here or here.
Currently, the filesystem is not writeable, as the SSI peripheral required for flash writing is not implemented yet. If you're interested in hacking, see the discussion in wokwi#88 for a workaround.
Released under the MIT licence. Copyright (c) 2021-2023, Uri Shaked.