Raspberry Pi Pico
Contents
Raspberry Pi Pico Features
Raspberry Pi Pico is a low-cost, high-performance microcontroller board with flexible digital interfaces. Key features include:
- RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
- Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
- 264KB of SRAM, and 2MB of on-board Flash memory
- Castellated module allows soldering direct to carrier boards
- USB 1.1 with device and host support
- Low-power sleep and dormant modes
- Drag-and-drop programming using mass storage over USB
- 26 × multi-function GPIO pins
- 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
- Accurate clock and timer on-chip
- Temperature sensor
- Accelerated floating-point libraries on-chip
- 8 × Programmable I/O (PIO) state machines for custom peripheral support
Repositories
Pinout
Reference Documents
- Raspberry Pi Pico data sheet
- RP2040 Datasheet
- Hardware Design Guide
- Getting started with Raspberry Pi Pico - C/C++ development with Raspberry Pi Pico and other RP2040-based microcontroller boards
- Raspberry Pi Pico C/C++ SDK
- Raspberry Pi Pico Python SDK
Adapter Cards
In Small Plastic Project Box
- Fits in 100x60x25mm Project Box
- Socketed Raspberry Pi Pico
- All Pico pins brought to Male Header pins
- Power/Ground distribution
- 5V jack
- VSYS connection with Schottky diode
- Can by Mounted on ODAS Adapter card
Cut Etch / Add wires
- Cut etch from + near jack to board side + connections
- Verify cut with jumper (center pin power jack to + on both sides)
- Add TIE - jumper to ties grounds on both sides together
- Add Power jumper between the two sides
- Add Ground connection Pico pin 38 to - hole near strip
- Add 3.3V Power connection Pico pin 36 to + hole near strip on other side
Schematic Symbol
Pin Table
Pico Pin | BB Pin | Signal | Pico Pin | BB Pin | Signal | |
---|---|---|---|---|---|---|
1 | 30 | GP0 | 40 | 30 | VUSB | |
2 | 29 | GP1 | 39 | 29 | VSYS | |
3 | 28 | GND | 38 | 28 | GND | |
4 | 27 | GP2 | 37 | 27 | 3V3EN | |
5 | 26 | GP3 | 36 | 26 | 3V3OUT | |
6 | 25 | GP4 | 35 | 25 | ADCVREF | |
7 | 24 | GP5 | 34 | 24 | GP28 | |
8 | 23 | GND | 33 | 23 | GND | |
9 | 22 | GP6 | 32 | 22 | GP27 | |
10 | 21 | GP7 | 31 | 21 | GP26 | |
11 | 20 | GP8 | 30 | 20 | RUN | |
12 | 19 | GP9 | 29 | 19 | GP22 | |
13 | 18 | GND | 28 | 18 | GND | |
14 | 17 | GP10 | 27 | 17 | GP21 | |
15 | 16 | GP11 | 26 | 16 | GP20 | |
16 | 15 | GP12 | 25 | 15 | GP19 | |
17 | 14 | GP13 | 24 | 14 | GP18 | |
18 | 13 | GND | 23 | 13 | GND | |
19 | 12 | GP14 | 22 | 12 | GP17 | |
20 | 11 | GP15 | 21 | 11 | GP16 |
Interesting Applications
Running PicoMite (MaxiMite) BASIC
- Two versions
- VGA, PS/2 version
- USB-Serial with SD Card
Running PicoMite (MaxiMite) BASIC (VGA, PS/2)
Configuration
OPTION KEYBOARD US OPTION SDCARD GP13, GP10, GP11, GP12 OPTION AUDIO GP6, GP7 OPTION COLOURCODE ON
Running PicoMite (MaxiMite) BASIC (USB-Serial)
- Incompatible connections to SD Card from VGA version
- VGA version does everything this version does since it can be run via the USB console
- "Boot to MM BASIC" on the Raspberry Pi Pico with VGA
- BASIC Interpreter for the Raspberry Pi Pico - USB
- SD Card Connections
PicoMite SD Card Wiring
- Install NO5V jumper
SD_Socket | PIN | SD-J1 | Pi-Pico | Pico-Pin | Colour |
---|---|---|---|---|---|
3 | GND | 1 | GND | GND | BLK |
7 | MISO | 2 | GPIO16 | 21 | BRN |
5 | SCLK | 3 | GPIO18 | 24 | ORA |
2 | MOSI | 4 | GPIO19 | 25 | YEL |
1 | SLV SEL | 5 | GPIO22 | 29 | WHT |
4 | VCC | 7 | 3.3V | N/C | |
6 | GND | N/C | GND |
Running RP2040 Doom
Running MicroPython
- MicroPython page
- Raspberry Pi Pico with MicroPython
- Python SDK
- Quick MicroPython reference for the RP2
- RP2 Python Library Modules
- Card has 264KB of SRAM
- Free memory under MicroPython plus various module sizes
>>> import gc >>> gc.mem_free() 182624 >>> import time >>> gc.mem_free() 178544 >>> import machine >>> gc.mem_free() 174304 >>>
- To compare QT Py has 19KB free
I2C Scanner
import machine
# Create I2C object i2c = machine.I2C(0, scl=machine.Pin(17), sda=machine.Pin(16)) # Print out any addresses found devices = i2c.scan() if devices: for d in devices: print(hex(d))
Python File System
- Internal Flash File System
- Little FS
- 1.44MB space
- Blocks are 4KB
- 352 Blocks on Internal File System
- os functions
import os os.[TAB] os.dir() os.mkdir("newdir") os.getcwd() os.mkdir("newdir") os.chdir('..') os.listdir() os.statvfs('/') os.uname() os.remove('file2remove') os.rename('old','new')
- Using files
f = open('filename','w') f.write('data to add') f.read() f.close()
Running VGA
Hardware Design Guide Section 3.2