PiicoDev Buzzer Module - Guide for Raspberry Pi Pico

Updated 05 April 2023


Let's play tones and melodies on a PiicoDev® Buzzer Module with a Raspberry Pi Pico. This guide will cover connecting the hardware, running an example to make sure everything works, and playing simple melodies.

To follow along, it's best to have:

If you prefer not to use the Expansion Board for Raspberry Pi Pico, there are other connection options in our PiicoDev Connection Guide.



Plug your Pico into the Expansion Board, connect your Buzzer to the Expansion Board via the PiicoDev cable, and finally connect your Pico to your computer with a USB lead.

This article and video features the older v10 buzzer. The new v20 Buzzer features four ID switches - so there's no need to check the back side of the v20 design (no solder jumpers).

Ensure both ID switches are OFF, and both ID jumpers (on the back side) are OPEN.

If you're unfamiliar with connecting PiicoDev "Smart" Modules, read the PiicoDev Connection Guide before proceeding.


Download MicroPython modules

We will need three files to easily drive the Buzzer Module:

  • Download the PiicoDev Unified LibraryPiicoDev_Unified.py (right-click, "save link as").
  • Download the device module: PiicoDev_Buzzer.py (right-click, "save link as")
  • Download the example script: main.py (right-click, "save link as")

It will be best to keep these files wherever you like to keep your coding projects eg. Documents > PiicoDev

Example Code - Play Tones

We'll be working in Thonny - if you're unfamiliar working with Thonny see our guide for Thonny and Raspberry Pi Pico.

Open Thonny, connect to your Pico and navigate to where you stored the files from the last step. Right-click each file and select "Upload to /" to upload them to your Pico (Hint: View the files menu with View > Files)

Restart your Pico (Keyboard shortcut, Ctrl+D) and you should hear some tones play from your Buzzer Module.

This script initialises the Buzzer at the loudest volume and plays two tones. Then, the volume is reduced to the lowest setting, and the two tones repeat. tone() accepts up to two arguments - the first is frequency in Hz, and the second is tone-duration in milliseconds. If no duration argument is given, the tone will sound continuously. This is the case for the second pair of tones, which omit the duration argument: In this case the tone will play continuously until buzz.noTone() is called. Here, the duration is set by the delay, sleep_ms(). buzz.volume() accepts a 0, 1 or 2 - 0 is the quietest and 2 is the loudest.


It's possible to play simple melodies on a Buzzer Module. In the following example a Python Dictionary notes defines musical-note names with their corresponding frequencies (Hz). Then, a 2-dimensional list melody defines the sequence of notes to play in note-duration pairs. For example, the first note is E, played for 500ms. The 10th note is an F, played for 250ms.

Finally, a loop steps through the melody list, extracts the note/duration data, and plays that tone.

Take this example for a spin! Replace the code in main.py with the following and run the script.

# PiicoDev Buzzer melody example. Define a melody as a combination of notes and durations.

from PiicoDev_Buzzer import PiicoDev_Buzzer
from PiicoDev_Unified import sleep_ms

# Define some note-frequency pairs
notes = {'C4':262,
         'D' :294,
         'E' :330,
         'F' :349,
         'G' :392,
         'A' :440,
         'B' :494,
         'rest':0, # zero Hertz is the same as no tone at all

# define a melody - two-dimensional list of notes and note-duration (ms)
melody = [['E',    500],
          ['D',    500],
          ['C4',   500],
          ['rest', 500],
          ['E',    500],
          ['D',    500],
          ['C4',   500],
          ['rest', 500],
          ['G',    500],
          ['F',    250],
          ['F',    250],
          ['E',    500],
          ['rest', 500],
          ['G',    500],
          ['F',    250],
          ['F',    250],
          ['E',    500],
          ['rest', 500],

buzz = PiicoDev_Buzzer(volume=2)

# play the melody
for x in melody:
    noteName = x[0] # extract the note name
    duration = x[1] # extract the duration
    buzz.tone(notes[noteName], duration)


We can now play tones and melodies at different volumes on our PiicoDev Buzzer Module! If you're looking for some inspiration, perhaps pair the buzzer module with a PiicoDev Capacitive Touch Sensor to create a simple 3-key piano.

If you make something cool with this starter project we'd love for you to share it on our forums! And if you'd like some help with this guide, start the conversation below - We're full-time makers and here to help!


PiicoDev Buzzer Unified MicroPython module

Have a question? Ask the Author of this guide today!

Please enter minimum 20 characters

Your comment will be posted (automatically) on our Support Forum which is publicly accessible. Don't enter private information, such as your phone number.

Expect a quick reply during business hours, many of us check-in over the weekend as well.


Please continue if you would like to leave feedback for any of these topics:

  • Website features/issues
  • Content errors/improvements
  • Missing products/categories
  • Product assignments to categories
  • Search results relevance

For all other inquiries (orders status, stock levels, etc), please contact our support team for quick assistance.

Note: click continue and a draft email will be opened to edit. If you don't have an email client on your device, then send a message via the chat icon on the bottom left of our website.

Makers love reviews as much as you do, please follow this link to review the products you have purchased.