Raspberry Pi Pico (RP2040) Emulator
npm install rp2040js  
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
`
You can also specify the path to the image on the command line and/or load an UF2 image:
`sh
npm run start -- --image ./my-pico-project.uf2
`
A GDB server will be available on port 3333, and the data written to UART0 will be printed
to the console.
$3
To run the MicroPython demo, first download RPI_PICO-20230426-v1.20.0.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 MicroPython 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.
#### Filesystem support
With MicroPython, 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:
`python
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 https://github.com/wokwi/rp2040js/issues/88 for a workaround.
$3
To run the CircuitPython demo, you can follow the directions above for MicroPython, except download adafruit-circuitpython-raspberry_pi_pico-en_US-8.0.2.uf2 instead of the MicroPython UF2 file. Place it in the rp2040js root directory, then run:
`
npm install
npm run start:circuitpython
`
and start the CircuitPython REPL! The rest of the experience is the same as the MicroPython demo (Ctrl+X to exit, using the --image and
--gdb options, etc).
#### Filesystem support
For CircuitPython, you can create a FAT12 filesystem in Linux using the truncate and mkfs.vfat utilities:
`shell
truncate fat12.img -s 1M # make the image file
mkfs.vfat -F12 -S512 fat12.img # create the FAT12 filesystem
`
You can then mount the filesystem image and add files to it:
`shell
mkdir fat12 # create the mounting folder if needed
sudo mount -o loop fat12.img fat12/ # mount the filesystem to the folder
sudo cp code.py fat12/ # copy code.py to the filesystem
sudo umount fat12/ # unmount the filesystem
``