Raspberry Pi Pico

From Waveshare Wiki
Jump to: navigation, search
Raspberry Pi Pico
Pre-solderd header, cables and breadboard
Raspberry Pi Pico Start Kit
Raspberry Pi Pico Basic Kit, MicroPython Programming Learning Kit
Sensors Pack including 13pcs sensor module, such as temperature ,humidity, gas, color ,flame...


Raspberry Pi Pico is a low-cost, high-performance microcontroller board with flexible digital interfaces. It incorporates Raspberry Pi's own RP2040 microcontroller chip, with a dual-core Arm Cortex M0+ processor running up to 133 MHz, embedded 264KB of SRAM, and 2MB of onboard Flash memory, as well as 26 x multi-function GPIO pins.
For software development, either Raspberry Pi's C/C++ SDK or the MicroPython is available. There are also complete development resources and tutorials to help you get started easily, and integrate it into end products quickly.


  • RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom.
  • Dual-core Arm Cortex M0+ processor, the flexible clock running up to 133 MHz.
  • 264KB of SRAM, and 2MB of onboard 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.





Software Environment Debugging

  • In order to facilitate the development of Pico boards using MicroPython on the computer, it is recommended to download Thonny IDE.
  • Download Thonny IDE and install it in steps.
  • After installing, please configure the language and the environment for the first time. Note that we should choose the Raspberry Pi option in the board environment.


  • Configure the Micrpython environment and select the Pico port.
    • First connect the Raspberry Pi Pico to the computer, left-click on the configuration environment option in the lower right corner of Thonny--> select configure an interpreter.
    • In the pop-up window bar, select MicroPython (Raspberry Pi Pico), and select the corresponding port.

Raspberry Pi Pico002.png

  • Click OK to return to the main interface of Thonny, download the firmware library to Pico, and then click the stop button to display the currently used environment in the Shell window.
  • Pico download firmware library method in Windows: Press and hold the BOOT button and connect to the computer, release the BOOT button, a removable disk will appear on the computer, and copy the firmware library into it.
  • How to download the firmware library for RP2040 in Windows: After connecting to the computer, press the BOOT key and the RESET key at the same time, release the RESET key and then release the BOOT key, a removable disk will appear on the computer.
  • Copy the firmware library into it (you can also use Pico).

Raspberry Pi Pico003.png

Example Testing

External LED Testing

  • Connect the hardware according to the following figure. Connect to PC by Micro USB, and open the python file in the sample program Lesson-5 External LED in Thonny, and run the sample program to see that the red light is flashing.
  • Precautions for use: The longer pin of the LED is the positive pole, the shorter one is the negative pole, the negative pole should be connected to GND, and the positive pole should be connected to the GPIO output port, and a resistor must be connected when using.

Raspberry Pi Pico Example.png

  • Code analysis
led_external = machine.Pin(15, machine.Pin.OUT) #Set GP15 as output mode
while True:
    led_external.toggle() #Change the state of the LED light every 5 seconds

Traffic Light System Testing

  • Connect the hardware according to the figure below, connect the Micro USB to the computer, open the python file in the sample program Lesson-9 Traffic-Light-System in Thonny, and run the program, you can see the normal operation of the traffic light strip, when you press the button will trigger the buzzer.
  • Precautions for use: The longer pin of the LED is the positive pole, the shorter one is the negative pole, the negative pole should be connected to GND, the positive pole should be connected to the GPIO output port, and a resistor must be connected when using it; the red line of the buzzer is connected to the GPIO port output, black The line is connected to GND.


  • Code analysis
def button_reader_thread(): #Detect if the button is pressed
   global button_pressed
   while True:
       if button.value() == 1:
           button_pressed = True
_thread.start_new_thread(button_reader_thread, ()) #Use the method of starting the thread to detect the button
while True:
   if button_pressed == True: #If the button is pressed, the red light is on and the buzzer sounds
       for i in range(10):
       global button_pressed
       button_pressed = False
   led_red.value(1) #Under normal circumstances, the yellow light will be on for two seconds when the red light is next to the green light, then the yellow and red lights will be off, and the green light will be on
   utime.sleep(5) #When the green light is next to the red light, the green light is off first, the yellow light is on for two seconds, and then the red light is on

Burglar Alarm LED Buzzer Examples

Connect the boards as in the picture below. Connect the Pico to Raspberry Pi or PC. Open the Lesson-14 Burglar Alarm LED Buzzer examples by Thonny.The LED lights on if an object is moving around the Passive infrared sensor and the buzzer will indicate.
Raspberry-Pi-Pico-Basic-Kit-Burglar Alarm LED Two Buzzer.png

  • Codes
def pir_handler(pin):  #Interrupt process function
   print("ALARM! Motion detected!") 
   for i in range(50): 
sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)#Enable the Interrupt, the interrupt function is called when motions is detected.
while True:  #Toggle LED every 5s

Potentiometer Example

Connect the boards as in the picture below. Connect the Pico to Raspberry Pi or PC. Open the Lesson-16 Potentiometer example by Thonny, you can adjust the potentiometer and check if the voltage printed to the Sheel window are changing as well.

  • Codes
potentiometer = machine.ADC(26) #Set the GP26 pin as analog input
conversion_factor = 3.3 / (65535)
while True:
   voltage = potentiometer.read_u16() * conversion_factor #Convert the sampled data to voltage value
   print(voltage) #Print the voltage data, it chanaged according to the sliding rheostat.

WS2812 Example

Connect the boards as in the picture below. Connect the Pico to Raspberry Pi or PC. Open the WS2812_RGB_LED.py file of Lesson-25 WS2812 example by Thonny, the LEDs light in Blue, Red, Green, and White.

  • Codes
#This code uses the state machine mechanism. The following code is a decorator where we can initialize the hardware, set the pin level, etc.
#label("bitloop") We can define some tags in our code so that we can jump to them.
#jmp(not_x,"do_zero") If x=0, we jumpt to do_zero.
#nop() .set(0) [T2 - 1] The code jumpt to here if x = 0.
@asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
   T1 = 2
   T2 = 5
   T3 = 1
   out(x, 1)               .side(0)    [T3 - 1] 
   jmp(not_x, "do_zero")   .side(1)    [T1 - 1] 
   jmp("bitloop")          .side(1)    [T2 - 1] 
   nop()                   .side(0)    [T2 - 1]
# Create the StateMachine with the ws2812 program, outputting on Pin(22).
sm = StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(0)) #Create the stats machine
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1) #Start the stats machine
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for j in range(0, 255): 
   for i in range(NUM_LEDS): 
       ar[i] = j 
   sm.put(ar,8)  #put() is put the data to output FIFO of the stats machine

LCD1602 I2C Example

Connect the boards as in the picture below. Connect the Pico to Raspberry Pi or PC. Open the Lesson-21 LCD1602 I2C example by Thonny, you need to first save the RGB1602.py to Pico and then run the Choose_Color.py file. The LCD will change color every 5s. If you run the Discoloratio.py file, the LED display RGB colors. Raspberry-Pi-Pico-Basic-Kit-LCD1602-I2C.jpg

  • Codes


#Define colors
rgb9 = (0,255,0) #green
lcd.setCursor(0, 0) #Set the position of cursor
# print the number of seconds since reset:
lcd.printout("Waveshare") #Print the string
lcd.setCursor(0, 1) #Move the cursor to second row.
lcd.printout("Hello,World!")#Print the string
lcd.setRGB(rgb1[0],rgb1[1],rgb1[2]); #Set the back light


while True:
   r = int((abs(math.sin(3.14*t/180)))*255);  #RGB changeas as time goes
   g = int((abs(math.sin(3.14*(t+60)/180)))*255);
   b = int((abs(math.sin(3.14*(t+120)/180)))*255);
   t = t + 3;
   lcd.setRGB(r,g,b);#Set the RGB data again.
# set the cursor to column 0, line 1
   lcd.setCursor(0, 0) #Set the curson to the first row.
# print the number of seconds since reset:
   lcd.printout("Waveshare")#Print the string
   lcd.setCursor(0, 1) #Set the cursor to second row
   lcd.printout("Hello,World!")#Print the string

Pico Quick Start

Download Firmware

  • MicroPython Firmware Download

MicroPython Firmware Download.gif

  • C_Blink Firmware Download

C Blink Download.gif

Video Tutorial

  • Pico Tutorial I - Basic Introduction

  • Pico Tutorial II - GPIO

  • Pico Tutorial III - PWM

  • Pico Tutorial IV - ADC

  • Pico Tutorial V - UART

  • Pico Tutorial VI - To be continued...

MicroPython Series

C/C++ Series

Arduino IDE Series

Install Arduino IDE

  1. Download the Arduino IDE installation package from Arduino website.
    RoArm-M1 Tutorial II01.jpg
  2. Just click on "JUST DOWNLOAD".
    Arduino IDE Pico.png
  3. Click to install after downloading.
    RoArm-M1 Tutorial II02.gif
  4. Note: You will be prompted to install the driver during the installation process, we can click Install.

Install Arduino-Pico Core on Arduino IDE

  1. Open Arduino IDE, click the File on the left corner and choose "Preferences".
    RoArm-M1 Tutorial04.jpg
  2. Add the following link in the additional development board manager URL, then click OK.

    RoArm-M1 Tutorial II05.jpg
    Note: If you already have the ESP8266 board URL, you can separate the URLs with commas like this:

  3. Click on Tools -> Dev Board -> Dev Board Manager -> Search for pico, it shows installed since my computer has already installed it.
    Pico Get Start 05.png
    Pico Get Start 06.png

Upload Demo At the First Time

  1. Press and hold the BOOTSET button on the Pico board, connect the Pico to the USB port of the computer via the Micro USB cable, and release the button when the computer recognizes a removable hard drive (RPI-RP2).
    Pico Get Start.gif
  2. Download the demo, open arduino\PWM\D1-LED path under the D1-LED.ino.
  3. Click Tools -> Port, remember the existing COM, do not need to click this COM (different computers show different COM, remember the existing COM on your computer).
    UGV1 doenload02EN.png
  4. Connect the driver board to the computer with a USB cable, then click Tools -> Ports, select uf2 Board for the first connection, and after the upload is complete, connecting again will result in an additional COM port.
    UGV1 doenload03EN.png
  5. Click Tool -> Dev Board -> Raspberry Pi Pico/RP2040 -> Raspberry Pi Pico.
    Pico Get Start02.png
  6. After setting, click the right arrow to upload.
    Pico Get Start03.png
    • If you encounter problems during the period, you need to reinstall or replace the Arduino IDE version, uninstall the Arduino IDE needs to be uninstalled cleanly, after uninstalling the software you need to manually delete all the contents of the folder C:\Users\[name]\AppData\Local\Arduino15 (you need to show the hidden files in order to see it) and then reinstall.

Open Source Demo


Example Demo

Official Document

Pico W



User Manual

Schematic & Datasheet

Related Books

Raspberry Pi Open-source Demo

Development Software


1. The pin that sets the input state must be initially pulled high or pulled low.

2. Replace the USB cable to see if there is a problem with the USB cable used.




Technical Support

If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 AM GMT+8 (Monday to Friday)