Raspberry Pi Pico SDK Examples
See Getting Started with the Raspberry Pi Pico and the README in the pico-sdk for information
on getting up and running.
App
Description
hello_adc
Display the voltage from an ADC input.
joystick_display
Display a Joystick X/Y input based on two ADC inputs.
adc_console
An interactive shell for playing with the ADC. Includes example of free-running capture mode.
App
Description
hello_48MHz
Change the system clock frequency to 48 MHz while running.
hello_gpout
Use the general purpose clock outputs (GPOUT) to drive divisions of internal clocks onto GPIO outputs.
hello_resus
Enable the clock resuscitate feature, "accidentally" stop the system clock, and show how we recover.
App
Description
build_variants
Builds two version of the same app with different configurations
App
Description
hello_dma
Use the DMA to copy data in memory.
control_blocks
Build a control block list, to program a longer sequence of DMA transfers to the UART.
channel_irq
Use an IRQ handler to reconfigure a DMA channel, in order to continuously drive data through a PIO state machine.
App
Description
cache_perfctr
Read and clear the cache performance counters. Show how they are affected by different types of flash reads.
nuke
Obliterate the contents of flash. An example of a NO_FLASH binary (UF2 loaded directly into SRAM and runs in-place there). A useful utility to drag and drop onto your Pico if the need arises.
program
Erase a flash sector, program one flash page, and read back the data.
xip_stream
Stream data using the XIP stream hardware, which allows data to be DMA'd in the background whilst executing code from flash.
ssi_dma
DMA directly from the flash interface (continuous SCK clocking) for maximum bulk read performance.
App
Description
hello_7segment
Use the GPIOs to drive a seven segment LED display.
hello_gpio_irq
Register an interrupt handler to run when a GPIO is toggled.
dht_sensor
Use GPIO to bitbang the serial protocol for a DHT temperature/humidity sensor.
See also: blink , blinking an LED attached to a GPIO.
App
Description
hello_divider
Show how to directly access the hardware integer dividers, in case AEABI injection is disabled.
App
Description
bus_scan
Scan the I2C bus for devices and display results.
lcd_1602_i2c
Display some text on a generic 16x2 character LCD display, via I2C.
mpu6050_i2c
Read acceleration and angular rate values from a MPU6050 accelerometer/gyro, attached to an I2C bus.
App
Description
hello_interp
A bundle of small examples, showing how to access the core-local interpolator hardware, and use most of its features.
App
Description
hello_multicore
Launch a function on the second core, printf some messages on each core, and pass data back and forth through the mailbox FIFOs.
multicore_fifo_irqs
On each core, register and interrupt handler for the mailbox FIFOs. Show how the interrupt fires when that core receives a message.
multicore_runner
Set up the second core to accept, and run, any function pointer pushed into its mailbox FIFO. Push in a few pieces of code and get answers back.
App
Description
blinky
Blink "hello, world" in Morse code on Pico's LED
button
Use Pico's BOOTSEL button as a regular button input, by temporarily suspending flash access.
App
Description
hello_pio
Absolutely minimal example showing how to control an LED by pushing values into a PIO FIFO.
apa102
Rainbow pattern on on a string of APA102 addressable RGB LEDs.
differential_manchester
Send and receive differential Manchester-encoded serial (BMC).
hub75
Display an image on a 128x64 HUB75 RGB LED matrix.
i2c
Scan an I2C bus.
logic_analyser
Use PIO and DMA to capture a logic trace of some GPIOs, whilst a PWM unit is driving them.
manchester_encoding
Send and receive Manchester-encoded serial.
pio_blink
Set up some PIO state machines to blink LEDs at different frequencies, according to delay counts pushed into their FIFOs.
pwm
Pulse width modulation on PIO. Use it to gradually fade the brightness of an LED.
spi
Use PIO to erase, program and read an external SPI flash chip. A second example runs a loopback test with all four CPHA/CPOL combinations.
squarewave
Drive a fast square wave onto a GPIO. This example accesses low-level PIO registers directly, instead of using the SDK functions.
st7789_lcd
Set up PIO for 62.5 Mbps serial output, and use this to display a spinning image on a ST7789 serial LCD.
uart_rx
Implement the receive component of a UART serial port. Attach it to the spare Arm UART to see it receive characters.
uart_tx
Implement the transmit component of a UART serial port, and print hello world.
ws2812
Examples of driving WS2812 addressable RGB LEDs.
addition
Add two integers together using PIO. Only around 8 billion times slower than Cortex-M0+.
App
Description
hello_pwm
Minimal example of driving PWM output on GPIOs.
led_fade
Fade an LED between low and high brightness. An interrupt handler updates the PWM slice's output level each time the counter wraps.
measure_duty_cycle
Drives a PWM output at a range of duty cycles, and uses another PWM slice in input mode to measure the duty cycle.
App
Description
hello_reset
Perform a hard reset on some peripherals, then bring them back up.
App
Description
hello_rtc
Set a date/time on the RTC, then repeatedly print the current time, 10 times per second, to show it updating.
rtc_alarm
Set an alarm on the RTC to trigger an interrupt at a date/time 5 seconds into the future.
rtc_alarm_repeat
Trigger an RTC interrupt once per minute.
App
Description
bme280_spi
Attach a BME280 temperature/humidity/pressure sensor via SPI.
mpu9250_spi
Attach a MPU9250 accelerometer/gyoscope via SPI.
spi_dma
Use DMA to transfer data both to and from the SPI simultaneously. The SPI is configured for loopback.
spi_flash
Erase, program and read a serial flash device attached to one of the SPI controllers.
App
Description
hello_double_tap
On dev boards with a reset button (but no BOOTSEL), a magic number in RAM can be used to enter the USB bootloader, when the reset button is pressed twice quickly.
narrow_io_write
Demonstrate the effects of 8-bit and 16-bit writes on a 32-bit IO register.
unique_board_id
Read the 64 bit unique ID from external flash, which serves as a unique identifier for the board.
App
Description
hello_timer
Set callbacks on the system timer, which repeat at regular intervals. Cancel the timer when we're done.
periodic_sampler
Sample GPIOs in a timer callback, and push the samples into a concurrency-safe queue. Pop data from the queue in code running in the foreground.
timer_lowlevel
Example of direct access to the timer hardware. Not generally recommended, as the SDK may use the timer for IO timeouts.
App
Description
hello_uart
Print some text from one of the UART serial ports, without going through stdio
.
uart_advanced
Use some other UART features like RX interrupts, hardware control flow, and data formats other than 8n1.
App
Description
host_hid
Use USB in host mode to poll an attached HID keyboard (TinyUSB example)
App
Description
hello_watchdog
Set the watchdog timer, and let it expire. Detect the reboot, and halt.